并发情况处理-面试
2016-02-17 10:13
330 查看
对于三种常见的并发情况的简单分析:
1.高并发低耗时
2.低并发高耗时
3.高并发高耗时
先说高并发低耗时,由于线程运行时间很短,为了能够大量的支持并发可以使用newCachedThreadPool这种线程池。高并发的情况如果没有大量线程支撑的话,必定需要一个很大的阻塞队列来缓存任务,这样就导致任务有较长延时。当然也有人会说线程很多的话也会导致系统开销很大,的确是这样,所以这种时候就要做负载均衡将并发量拆解分散到各个节点。
对于低并发高耗时,在http://ifeve.com/里面有个面试的回答分析的很好。高耗时是要看是CPU耗时还是IO耗时,如果是CPU耗时线程数通常解决不了太多的问题,因为cpu的负载本身都已经饱和,再添加线程对整体耗时作用不大(考虑到线程调度等因素)。如果是io耗时,由于io是会阻塞线程(类似于sleep方式使得线程进入等待状态),所以线程数可以稍微多一些,让cpu能够负载能够尽量高一些。这种情况通常使用fixedthreadpool,主要是需要设置一个合理的线程数量。
第三种情况,应该需要用到异步处理,通过任务队列将任务缓存起来,然后异步的执行这些任务,但是还是需要增加节点来处理这些任务,不然只是解决了客户端避免由于同步调用响应慢的问题,任务的完成时间还是没得到改善。
1.高并发低耗时
2.低并发高耗时
3.高并发高耗时
先说高并发低耗时,由于线程运行时间很短,为了能够大量的支持并发可以使用newCachedThreadPool这种线程池。高并发的情况如果没有大量线程支撑的话,必定需要一个很大的阻塞队列来缓存任务,这样就导致任务有较长延时。当然也有人会说线程很多的话也会导致系统开销很大,的确是这样,所以这种时候就要做负载均衡将并发量拆解分散到各个节点。
对于低并发高耗时,在http://ifeve.com/里面有个面试的回答分析的很好。高耗时是要看是CPU耗时还是IO耗时,如果是CPU耗时线程数通常解决不了太多的问题,因为cpu的负载本身都已经饱和,再添加线程对整体耗时作用不大(考虑到线程调度等因素)。如果是io耗时,由于io是会阻塞线程(类似于sleep方式使得线程进入等待状态),所以线程数可以稍微多一些,让cpu能够负载能够尽量高一些。这种情况通常使用fixedthreadpool,主要是需要设置一个合理的线程数量。
第三种情况,应该需要用到异步处理,通过任务队列将任务缓存起来,然后异步的执行这些任务,但是还是需要增加节点来处理这些任务,不然只是解决了客户端避免由于同步调用响应慢的问题,任务的完成时间还是没得到改善。
相关文章推荐
- 关于网站大并发情况下的数据的初始化如何处理。
- boost中asio网络库多线程并发处理实现,以及asio在多线程模型中线程的调度情况和线程安全。
- 如何处理高并发情况下的DB插入
- RxJava 并发之意外情况处理
- iOS开发—处理多个网络请求并发的情况
- 关于WCF服务在高并发情况下报目标积极拒绝的异常处理
- 如何处理高并发情况下的DB插入
- 大量数据并发的情况下 ,不用自增列 怎样设置主键 (转载自IT公司面试手册)
- 如何处理高并发情况下的DB插入
- 在Java中使用Jedis操作Redis,在高并发的情况下,应用卡死、报无法获取连接错误的处理方式
- RxJava 并发之意外情况处理
- 如何处理高并发情况下的DB插入
- RxJava 并发之意外情况处理
- Java高并发之魂(二)------synchronized,多线程访问同步方法的7种情况(面试常考)
- 高并发情况下用户处理同一条数据解决方法
- java中如何处理高并发情况
- Java面试处理高并发
- JAVA中怎么处理高并发的情况
- Oracle编程,遇到并发的情况处理
- 如何处理高并发情况下的DB插入