预备知识:关于多线程

2018-10-18  本文已影响0人  不吃甜食会怎样

问题1:

工作线程数是不是设置的越大越好?

回答:

1)一来服务器CPU核数有限,同时并发的线程数是有限的,1核CPU设置10000个工作线程没有意义

2)线程切换是有开销的,如果线程切换过于频繁,反而会使性能降低

问题2:

调用sleep()函数的时候,线程是否一直占用CPU?

回答:

不占用,等待时会把CPU让出来,给其他需要CPU资源的线程使用不止调用sleep()函数,在进行一些阻塞调用,例如网络编程中的阻塞accept()【等待客户端连接】和阻塞recv()【等待下游回包】也不占用CPU资源

问题3:

如果CPU是单核,设置多线程有意义么,能提高并发性能么?

回答:

即使是单核,使用多线程也是有意义的

1)多线程编码可以让我们的服务/代码更加清晰,有些IO线程收发包,有些Worker线程进行任务处理,有些Timeout线程进行超时检测

2)如果有一个任务一直占用CPU资源在进行计算,那么此时增加线程并不能增加并发,例如这样的一个代码

 while(1){ i++; }

该代码一直不停的占用CPU资源进行计算,会使CPU占用率达到100%

3)通常来说,Worker线程一般不会一直占用CPU进行计算,此时即使CPU是单核,增加Worker线程也能够提高并发,因为这个线程在休息的时候,其他的线程可以继续工作

上一篇 下一篇

猜你喜欢

热点阅读