京东资深架构师:高性能高并发服务的瓶颈及突破思路
在绝大多数的开发中,线程池技术就已经足够了,但是线程池在充分榨干cpu计算资源或者说提供有效计算资源方面并不是最完美的,以一核的计算资源为例,线程池里假设有x个线程,这x个线程会被操作系统依据具体调度策略进行调度,但是线程上下文切换本身是会消耗一定的cpu资源的,假设这部分消耗代价是w,而实际有效服务的能力是c,那么理论上来说w+c 就是总的cpu实际提供的计算资源,同时假设一核cpu理论上提供计算资源假设为t,这个是固定的. 所以就会出现一种情况,当线程池中线程数量较少的时候并发度较低,w虽然小了,但是c也是比较小的,也就是w+c < t甚至是远远小于t,如果线程数很多,又会出现上下文切换代价太大,即w变大了.虽然c也随之提升了一些,但因为t是固定的,所以c的上限值一定是小于t-w的,而且随着w越大,c的上限值反倒降低了,因此使用线程池的时候,线程数的设置需要根据实际情况进行调整. 2、基于事件驱动的模式多线程(线程池)的方式可以较为方便地进行并发编程,但是多线程的方式对cpu的有效利用率其实并不是最高的,真正能够充分利用cpu的编程方式是尽量让cpu一直在工作,同时又尽量避免线程的上下文切换等开销. 图7 epoll示例 (编辑:开发网_开封站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |