CPU核数和线程 (池)的个数关系,求大牛。。开高分
看了个帖子,说线程池的大小最优的是CPU核数的1.5--2倍,开多了反而会因为线程调度而导致性能减低,不知道单核时代大家开的线程池大小是多少?好像也有开10个的吧?
我有一个4核服务器,上面跑了几个模块做socket数据收发,简单比对和存数据库。
其中有一个模块线程数 20+1+10+1,至少是32个。
另一个进程11个线程,
还有个模块,用select + 线程池做socket接收,也打算开10个线程或更高,想问下,在这种部署的情况下,开大线程池还有效果吗?
真是快疯了,都部署在一台服务器上。
求帮助!
[解决办法]
这个可以自己调整,然后来做性能测试,然后优化到一个最好的值
[解决办法]
如果你开两个独立的程序,每个程序的速度保持不变,或者略有下降的话,你可以考虑增加线程,如果降低到原来的1/2,就不用费事了。
关于线程数量和CPU核数的关系,没有什么教条可循,因为应用不一样。对于CPU敏感的程序,比如科学计算,线程数大于处理器个数是没有意义的,但是对于非CPU敏感的程序,比如网络下载之类,多线程的用途是IO延迟隐藏,和CPU核数毫无关系。
[解决办法]
可以考虑一下换个socket IO模型,用IOCP
[解决办法]
线程数量和CPU核数有关系,但是也指不清楚,曾经做多核并行运算的时候,建议是说开线程数为核数的两倍最好,其实,只要这些线程不频繁切换和竞争资源的话,多开点也不是不可以的!最优性能还是得慢慢调试吧。
[解决办法]
那是相对而言的。对于现在级别的计算机,通常开几百个线程对性能的影响微乎其微。打开任务管理器,你会发现,当前的线程个数有上千个。即便什么都不开,也有几百个。
[解决办法]
如果你开两个独立的程序,每个程序的速度保持不变,或者略有下降的话,你可以考虑增加线程,如果降低到原来的1/2,就不用费事了。
关于线程数量和CPU核数的关系,没有什么教条可循,因为应用不一样。对于CPU敏感的程序,比如科学计算,线程数大于处理器个数是没有意义的,但是对于非CPU敏感的程序,比如网络下载之类,多线程的用途是IO延迟隐藏,和CPU核数毫无关系。
恩,这个有道理。但是线程太多会让CPU频繁切换,会有性能消耗的呀,
那是相对而言的。对于现在级别的计算机,通常开几百个线程对性能的影响微乎其微。打开任务管理器,你会发现,当前的线程个数有上千个。即便什么都不开,也有几百个。
多谢了,但是不敢相信,等待CPU调度的线程太多,会占用缓存之类的。影响也大吧
CPU和操作系统都有缓存淘汰算法,那些不频繁使用等待中的东西不会摆在缓存中耽误事的!
[解决办法]
看问题要看主要矛盾和次要矛盾,比如说,山上和山脚下哪里气温低?在中午的时候,山上更靠近太阳,理应气温高。但是山脚下接受的地面辐射强,大气保温作用明显,理应山脚下温度高,那么到底哪个高。很显然,山上虽然靠近太阳,但是只靠近了几亿分之一,可以忽略不计,但是地面辐射的差异却很明显。所以矛盾中起主要作用的是后者。
一个道理,多开几个线程,理论上是会降低一点性能,降低多少呢,可能是千分之一,可能是万分之一,但是通过IO延迟的隐藏,提高了几分之一乃至几倍的性能,你说哪个占主导?