CPU核数和线程 (池)的个数关系,求大牛。。开高分

96掌门师兄 2013-10-18 05:09:12
看了个帖子,说线程池的大小最优的是CPU核数的1.5--2倍,开多了反而会因为线程调度而导致性能减低,不知道单核时代大家开的线程池大小是多少?好像也有开10个的吧?

我有一个4核服务器,上面跑了几个模块做socket数据收发,简单比对和存数据库。
其中有一个模块线程数 20+1+10+1,至少是32个。
另一个进程11个线程,
还有个模块,用select + 线程池做socket接收,也打算开10个线程或更高,想问下,在这种部署的情况下,开大线程池还有效果吗?
真是快疯了,都部署在一台服务器上。
求帮助!
...全文
11231 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinsl00000 2016-05-18
  • 打赏
  • 举报
回复
那个线程数量应该是并行线程数量,不是所有线程数量。系统里面几百个线程,但是很多可能是什么监听之类的,只是挂着而已。真正是并行计算的各个线程相同起点相同终点的情况下,最大并行效率的线程数是cpu的1.5-2倍,其中包括了系统本身其他进程对cpu时间的损耗了。同时避免设置的太少导致死锁。不过这个1.5-2的数字我没测过,环境影响太大了。我搜这个也是想确认一下这个数字。
96掌门师兄 2013-10-29
  • 打赏
  • 举报
回复
这里我需要从网卡缓冲区使用recv将数据"收"到我自己的内存空间,所以还是需要CPU的,线程多了都在排队,导致CPU占用率较高,实验下来的结果是小于CPU核数的时候,效率最好,CPU最低、。
rsdtt 2013-10-25
  • 打赏
  • 举报
回复
看完回复表示茅塞顿开
cjfdqchwhj 2013-10-25
  • 打赏
  • 举报
回复
进来学习,看到大家的回复都挺有道理的
u0116snail 2013-10-25
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
如果你开两个独立的程序,每个程序的速度保持不变,或者略有下降的话,你可以考虑增加线程,如果降低到原来的1/2,就不用费事了。 关于线程数量和CPU核数的关系,没有什么教条可循,因为应用不一样。对于CPU敏感的程序,比如科学计算,线程数大于处理器个数是没有意义的,但是对于非CPU敏感的程序,比如网络下载之类,多线程的用途是IO延迟隐藏,和CPU核数毫无关系。
深表赞同
threenewbee 2013-10-24
  • 打赏
  • 举报
回复
看问题要看主要矛盾和次要矛盾,比如说,山上和山脚下哪里气温低?在中午的时候,山上更靠近太阳,理应气温高。但是山脚下接受的地面辐射强,大气保温作用明显,理应山脚下温度高,那么到底哪个高。很显然,山上虽然靠近太阳,但是只靠近了几亿分之一,可以忽略不计,但是地面辐射的差异却很明显。所以矛盾中起主要作用的是后者。 一个道理,多开几个线程,理论上是会降低一点性能,降低多少呢,可能是千分之一,可能是万分之一,但是通过IO延迟的隐藏,提高了几分之一乃至几倍的性能,你说哪个占主导?
96掌门师兄 2013-10-24
  • 打赏
  • 举报
回复
顶起来,求帮助。。。
threenewbee 2013-10-22
  • 打赏
  • 举报
回复
引用 8 楼 xiaoxiaoyu85 的回复:
[quote=引用 7 楼 caozhy 的回复:] [quote=引用 3 楼 xiaoxiaoyu85 的回复:] [quote=引用 2 楼 caozhy 的回复:] 如果你开两个独立的程序,每个程序的速度保持不变,或者略有下降的话,你可以考虑增加线程,如果降低到原来的1/2,就不用费事了。 关于线程数量和CPU核数的关系,没有什么教条可循,因为应用不一样。对于CPU敏感的程序,比如科学计算,线程数大于处理器个数是没有意义的,但是对于非CPU敏感的程序,比如网络下载之类,多线程的用途是IO延迟隐藏,和CPU核数毫无关系。
恩,这个有道理。但是线程太多会让CPU频繁切换,会有性能消耗的呀,[/quote] 那是相对而言的。对于现在级别的计算机,通常开几百个线程对性能的影响微乎其微。打开任务管理器,你会发现,当前的线程个数有上千个。即便什么都不开,也有几百个。[/quote] 多谢了,但是不敢相信,等待CPU调度的线程太多,会占用缓存之类的。影响也大吧[/quote] CPU和操作系统都有缓存淘汰算法,那些不频繁使用等待中的东西不会摆在缓存中耽误事的!
96掌门师兄 2013-10-22
  • 打赏
  • 举报
回复
引用 7 楼 caozhy 的回复:
[quote=引用 3 楼 xiaoxiaoyu85 的回复:] [quote=引用 2 楼 caozhy 的回复:] 如果你开两个独立的程序,每个程序的速度保持不变,或者略有下降的话,你可以考虑增加线程,如果降低到原来的1/2,就不用费事了。 关于线程数量和CPU核数的关系,没有什么教条可循,因为应用不一样。对于CPU敏感的程序,比如科学计算,线程数大于处理器个数是没有意义的,但是对于非CPU敏感的程序,比如网络下载之类,多线程的用途是IO延迟隐藏,和CPU核数毫无关系。
恩,这个有道理。但是线程太多会让CPU频繁切换,会有性能消耗的呀,[/quote] 那是相对而言的。对于现在级别的计算机,通常开几百个线程对性能的影响微乎其微。打开任务管理器,你会发现,当前的线程个数有上千个。即便什么都不开,也有几百个。[/quote] 多谢了,但是不敢相信,等待CPU调度的线程太多,会占用缓存之类的。影响也大吧
threenewbee 2013-10-21
  • 打赏
  • 举报
回复
引用 3 楼 xiaoxiaoyu85 的回复:
[quote=引用 2 楼 caozhy 的回复:] 如果你开两个独立的程序,每个程序的速度保持不变,或者略有下降的话,你可以考虑增加线程,如果降低到原来的1/2,就不用费事了。 关于线程数量和CPU核数的关系,没有什么教条可循,因为应用不一样。对于CPU敏感的程序,比如科学计算,线程数大于处理器个数是没有意义的,但是对于非CPU敏感的程序,比如网络下载之类,多线程的用途是IO延迟隐藏,和CPU核数毫无关系。
恩,这个有道理。但是线程太多会让CPU频繁切换,会有性能消耗的呀,[/quote] 那是相对而言的。对于现在级别的计算机,通常开几百个线程对性能的影响微乎其微。打开任务管理器,你会发现,当前的线程个数有上千个。即便什么都不开,也有几百个。
modyaj 2013-10-21
  • 打赏
  • 举报
回复
线程数量和CPU核数有关系,但是也指不清楚,曾经做多核并行运算的时候,建议是说开线程数为核数的两倍最好,其实,只要这些线程不频繁切换和竞争资源的话,多开点也不是不可以的!最优性能还是得慢慢调试吧。
96掌门师兄 2013-10-21
  • 打赏
  • 举报
回复
引用 4 楼 VisualEleven 的回复:
可以考虑一下换个socket IO模型,用IOCP
因为要兼容linux,所以用了select
Eleven 2013-10-21
  • 打赏
  • 举报
回复
可以考虑一下换个socket IO模型,用IOCP
96掌门师兄 2013-10-21
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
如果你开两个独立的程序,每个程序的速度保持不变,或者略有下降的话,你可以考虑增加线程,如果降低到原来的1/2,就不用费事了。 关于线程数量和CPU核数的关系,没有什么教条可循,因为应用不一样。对于CPU敏感的程序,比如科学计算,线程数大于处理器个数是没有意义的,但是对于非CPU敏感的程序,比如网络下载之类,多线程的用途是IO延迟隐藏,和CPU核数毫无关系。
恩,这个有道理。但是线程太多会让CPU频繁切换,会有性能消耗的呀,
threenewbee 2013-10-18
  • 打赏
  • 举报
回复
如果你开两个独立的程序,每个程序的速度保持不变,或者略有下降的话,你可以考虑增加线程,如果降低到原来的1/2,就不用费事了。 关于线程数量和CPU核数的关系,没有什么教条可循,因为应用不一样。对于CPU敏感的程序,比如科学计算,线程数大于处理器个数是没有意义的,但是对于非CPU敏感的程序,比如网络下载之类,多线程的用途是IO延迟隐藏,和CPU核数毫无关系。
oyljerry 2013-10-18
  • 打赏
  • 举报
回复
这个可以自己调整,然后来做性能测试,然后优化到一个最好的值

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧