Chinaunix

标题: 写了一个类wrk程序,多线程效率不如单线程 [打印本页]

作者: knull    时间: 2015-02-28 21:54
标题: 写了一个类wrk程序,多线程效率不如单线程
    由于工作需要,写了一个多连接发生数据的测试程序(客户端),类似于wrk(只不过数据,仅仅是二进制数据,不是http数据)。
    用echoserver进行测试,发现在一个线程的时候,大约能达到3k+/sec;但是,多个线程竟然效率降低(4个线程的时候,大约在1.5+k/sec)。
    网上查看了,多线程,在cpu密集型的时候,是有效的;但是,I/O密集型的时候,提升不大,反而需要增加CPU的切换时间。主要是因为I/O速度是瓶颈。
    但是,在我用环回地址测试的时候,速度似乎也没有明显提升。
    按道理来说,环回地址的I/O速度,比跨主机的速度,是快很多的。
作者: hellioncu    时间: 2015-02-28 22:55
连接在多个线程中怎么分的?CPU型号?
作者: knull    时间: 2015-03-02 09:43
hellioncu 发表于 2015-02-28 22:55
连接在多个线程中怎么分的?CPU型号?

首先,感谢你的回复;
就是平均下。比如,并发10K个链接,4个线程,那么,每一个线程2500个链接;
CPU型号,Intel 4核,具体型号:Intel(R) Core(TM) i3-4130 CPU @ 3.40GHz
(这个是跑在虚拟机上的,虚拟机是VMWare 10.0.2 build-1744117)
作者: hellioncu    时间: 2015-03-02 09:48
knull 发表于 2015-03-02 09:43
首先,感谢你的回复;
就是平均下。比如,并发10K个链接,4个线程,那么,每一个线程2500个链接;
CPU型 ...


测试性能还是用实体机吧,便于定位瓶颈所在
作者: yulihua49    时间: 2015-03-02 10:23
knull 发表于 2015-02-28 21:54
由于工作需要,写了一个多连接发生数据的测试程序(客户端),类似于wrk(只不过数据,仅仅是二进制数据 ...

IO瓶颈吧,多线程解决不了。
作者: hanxin83    时间: 2015-03-02 11:37
ltrace一下, 看你的进程消耗在哪里.
另外, 不推荐多线程模型.
作者: hellioncu    时间: 2015-03-02 12:07
hanxin83 发表于 2015-03-02 11:37
ltrace一下, 看你的进程消耗在哪里.
另外, 不推荐多线程模型.


被老的 *nix 毒害了吧
作者: knull    时间: 2015-03-02 15:37
yulihua49 发表于 2015-03-02 10:23
IO瓶颈吧,多线程解决不了。

如果是I/O瓶颈,理论上来说,改用本机测试(127.0.0.1),性能应该是会提升的啊
作者: knull    时间: 2015-03-02 15:38
hanxin83 发表于 2015-03-02 11:37
ltrace一下, 看你的进程消耗在哪里.
另外, 不推荐多线程模型.

用不用多线程,许多时候,不是我能够决定的;我能够决定的是,怎么实现功能
作者: knull    时间: 2015-03-02 15:39
hellioncu 发表于 2015-03-02 12:07
被老的 *nix 毒害了吧

其实,我也不太喜欢用多线程,因为好几次,多线程还不如单线程(应该是我设计有问题);
但是,项目要求这样,不是我能够决定的
作者: z45633584    时间: 2015-03-03 18:09
提示: 作者被禁止或删除 内容自动屏蔽
作者: yulihua49    时间: 2015-03-04 12:57
knull 发表于 2015-02-28 21:54
由于工作需要,写了一个多连接发生数据的测试程序(客户端),类似于wrk(只不过数据,仅仅是二进制数据 ...

http://bbs.chinaunix.net/thread-4077904-3-1.html
看一下26楼,我的测试跟你一样,4个线程慢了一半。
我是可配置线程数的,你也这么办。人家让用多线程就配多线程。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2