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调度的线程太多,会占用缓存之类的。影响也大吧