为何在1进程情况下,单线程反而比多线程速度快呢?

李昱 发布于 2014/02/25 04:32
阅读 2K+
收藏 1

1线程,使用test里面的test_press_mpt。

在win7 64位环境下。

10万差不多是2秒左右。

但是开10线程,要8秒左右。。。。

这就有点汗。。是否多线程部分有问题导致锁?

加载中
0
明月照大江
明月照大江
你跑的是什么函数,第一、多线程情况下是否有锁;第二、你确定你的多线程是CPU所支持的,而不是超出了你的CPU的范围,导致线程切换引起了损耗。第三、多线程不是银弹,不是万能钥匙,什么锁都能开
0
悠悠然然
悠悠然然

多线程主要用于解决CPU是运算瓶颈的情况。

如果你的瓶颈不是CPU,那么你搞得线程数越多,大家资源竞争越厉害,性能反而下降。

所以,做性能优化要找准瓶颈--有可能是一个,有可能是多个有针对性的进行优化,而不是只要性能不行,就上多线程。

0
木川瓦兹
木川瓦兹
我在思考1进制是啥意思?
0
yak
yak
因为输出没有阻塞
0
XzhiF
XzhiF
io 密集型 跟 计算密集型 开多线程的数量还是有策略的
0
李昱
李昱

汗。。。大家看清楚啊。你们说的这些我怎么可能不知道。我是说这个ilog3的库的问题。

你们用过么?

悠悠然然
悠悠然然
你问问题的水平真高。
0
YiYang
YiYang
多线程还有遇到阻塞之后挂起呢
0
calvinwilliams
calvinwilliams

@李昱

你是开单线程输出10万条日志和开10条线程各输出1万条日志比较吗?

我的虚拟机里速度差不多

[calvin@rhel54 /home/calvin/exsrc/iLOG3-1.0.3/test] rm -f *.log* ; sleep 1 ; time ./test_press_mpt 1 1 100000; wc *.log* ; rm -f *.log*

real    0m1.223s
user    0m0.129s
sys     0m1.095s
100000  800000 7300000 test_press_mpt.log
[calvin@rhel54 /home/calvin/exsrc/iLOG3-1.0.3/test] rm -f *.log* ; sleep 1 ; time ./test_press_mpt 1 10 10000; wc *.log* ; rm -f *.log*

real    0m1.349s
user    0m0.121s
sys     0m1.230s
100000  800000 7300000 test_press_mpt.log

或者你说的是开单线程输出10万条日志和开10条线程各输出10万条日志比较?这个时间就比较长了,可能是单CPU在多线程切换中损耗比较严重,再加上用于日志转档的全局锁所致。

[calvin@rhel54 /home/calvin/exsrc/iLOG3-1.0.3/test] rm -f *.log* ; sleep 1 ; time ./test_press_mpt 1 10 100000; wc *.log* ; rm -f *.log*

real    0m13.171s
user    0m1.272s
sys     0m11.172s
 123686   989488  9029078 test_press_mpt.log
 154282  1234256 11262586 test_press_mpt.log.1
 143657  1149256 10486961 test_press_mpt.log.2
 144553  1156424 10552369 test_press_mpt.log.3
 146405  1171240 10687565 test_press_mpt.log.4
 143752  1150016 10493896 test_press_mpt.log.5
 143665  1149320 10487545 test_press_mpt.log.6
1000000  8000000 73000000 total


0
calvinwilliams
calvinwilliams
此外,对于后者,由于硬盘IO速度是所有IO中最慢的,理论上,你总共写100万条日志耗时应该是写10万条日志耗时的十倍。
返回顶部
顶部