免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4393 | 回复: 6
打印 上一主题 下一主题

为何多线程效率比单线程还低? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-28 18:31 |只看该作者 |倒序浏览
  目前有一个项目,开发前期使用的是单进程模式,但在测试时发现发送数据流的模块能占用一个CPU的资源也就是其中一个CPU达到99%(共4CUP服务器),于是将此模块进行了改造做成了多线程模式,共三个相同线程来完成发送数据的工作,但完工后测试发现三个线程每个占用的CPU资源是40%左右,但发送数据的效率反比改造前的单线程低了些,不知大家有没有遇到过这种问题;多线程代码类似以下:

............................
for(t=1;t<4;t++)
    {
   ret=pthread_create(&id[1],NULL,(void *) senddata,(void *)&sin);
    if(ret!=0){
            printf ("create pthread error!\n");
            exit (1);
              }
    }
    senddata(&sin);
    return   0;
}

int senddata(struct sockaddr_in * ssin)
{
    int j;
...........................

论坛徽章:
1
2015小元宵徽章
日期:2015-03-06 15:57:20
2 [报告]
发表于 2006-04-28 21:23 |只看该作者
cpu密集型的程序多线程才能提高效率,io密集型的徒增调度而已.

论坛徽章:
0
3 [报告]
发表于 2006-04-28 21:47 |只看该作者
同意二楼。

CPU虽然有多个,但是总线、内存子系统只有一个(估计LZ不是在NUMA或超级机上),具体问题具体分析,不要为了多线程而多线程。

论坛徽章:
0
4 [报告]
发表于 2006-04-29 00:36 |只看该作者
但在测试时发现发送数据流的模块能占用一个CPU的资源也就是其中一个CPU达到99%(共4CUP服务器),于是将此模块进行了改造做成了多线程模式,共三个相同线程来完成发送数据的工作,但完工后测试发现三个线程每个占用的CPU资源是40%左右

还是有点 CPU 密集的意思的……不过看示例代码,似乎 I/O 过程也被分散在各个线程中了——如果用一个线程集中 I/O,其它线程只负责 CPU 运算,会不会更好一些。。

论坛徽章:
0
5 [报告]
发表于 2006-04-29 11:28 |只看该作者
并发体现在那里?
应该体现在send/recv buffer。
把你的buffer管理改进一下。

论坛徽章:
0
6 [报告]
发表于 2006-04-29 12:22 |只看该作者
原帖由 柳五随风 于 2006-4-29 11:28 发表
并发体现在那里?
应该体现在send/recv buffer。
把你的buffer管理改进一下。



谢谢大家回复,由于此模块发送的内容是相同的,所以应该与buffer管理没多大关系,感觉与系统io关系似乎更大,单线程时网卡output将近20M,多线程时也差不多(1000M卡),这是否能说明系统瓶径在于系统总线io上?

论坛徽章:
0
7 [报告]
发表于 2006-04-29 15:32 |只看该作者
内容相同就用多播
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP