请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

多路复用select和多线程性能比较,差距也很大吗?

我看到您课程性能是用select和同步比较,这种差距很大;用select跟多线程比较会不会突出一些,差距也很大吗?

正在回答 回答被采纳积分+3

2回答

慕粉1428145039 2020-12-28 12:30:55

要看具体情况吧;

首先,两者是一种解决并发问题的实现方式。如果是一套简单的程序,从用户线程角度看其实最终得出的结果 多线程也是能实现多路复用的一套模型。但多路复用从基本概念上,确实要比多线程来的要好,比如没有了多线程的上下文切换,和CPU时间片竞争。

但也并不是说多路复用就完全比多线程要好。一切要看实际,并不是一个简单的几行代码的小程序就能代表的。

如果你的用户线程计算比较单一,比较简单,你线程池核心线程配出花来,也不会对整个进程有个很有效的提高,因为CPU在你的用户线程上的cpu时间片占用并不高。而你的程序瓶颈就在io上,这个时候IO多路复用的效果就会体现出来。

但是如果你的用户线程是个计算密集型,那么这个时候需要的是把关注点放在多线程上,因为此时主要影响性能的是你的cpu而不是IO。

(这也就是为什么多路复用是redis最好的选择,因为io多路复用+单线程的方式,舍去了多线程的时间片切换以及锁的操作,数据上保证一致性,更是因为redis数据结构比较单一,所以保证了redis能更加合理有效的使用IO多路复用模型)

当然实际情况中,我们不可能2选1这种,毕竟io多路复用和多线程 在我们实际的用户线程中是混合用的。

只是说在定义线程数和线程池的时候,我们更应该多考虑下我们实际的进程瓶颈到底在哪里。而不是说一慢了,就单纯的说增加核心线程数来解决。

1 回复 有任何疑惑可以回复我~
  • bobby #1
    如果是计算密集型,那么使用select和多线程都无济于事,因为select和多线程都是解决io问题的,计算密集型是耗cpu的,遇到这种问题要使用多进程利用多核,甚至给电脑加gpu
    回复 有任何疑惑可以回复我~ 2020-12-31 11:18:29
bobby 2020-09-18 19:52:01

那肯定select性能高啊, 多路复用异步高并发的关键所在, 肯定性能是高的

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信