首先写了一个找第N个素数的程序,使用很原始的算法,然后设定为找第10000个素数。
我本意是想弄一个线程来记录当前的搜索进度,这样就涉及两个变量,当前已经找到了第几个素数,以及当前正在测试的数。为了保证正确记录这两个变量,就弄了一个信号量来设定临界区。
于是奇异的现象就出现了,没有设置信号量之前整个程序运行时间是12.3秒左右,而使用了信号量之后,速度竟然降低到11.8秒左右,速度提高近5%。虽然不是每次测试都快0.5秒,但如果没有快0.5秒的话,就是差不多12.3秒。只会出现基本上速度相同,或者快0.5秒的情况看。
明明是加了信号量,需要内核去做一些事情,这些事情多多少少也会吃掉一些时间,如果说内核调用速度很快对运行速度基本上没有影响,那么有没有使用信号量的时间基本上一样也就算了,但问题是加了信号量之后运行速度竟然更快了,这也太诡异了的说。
随后我又给另一个代码段加了一个信号量,但是速度并没有变得比11.8秒更快,似乎11.8秒就是极限了
[code]
gs@yts-j:~/pg$ time ./ss && time ./ss_lock && time ./ss && time ./ss_lock
real 0m12.212s
user 0m11.730s
sys 0m0.000s
real 0m11.831s
user 0m11.355s
sys 0m0.001s
real 0m12.315s
user 0m11.729s
sys 0m0.002s
real 0m11.829s
user 0m11.356s
sys 0m0.002s
[/code]
[code]
gs@yts-j:~/pg$ time ./ss && time ./ss_lock && time ./ss_lock2 && time ./ss && time ./ss_lock && time ./ss_lock2
real 0m12.239s
user 0m11.732s
sys 0m0.002s
real 0m11.860s
user 0m11.361s
sys 0m0.003s
real 0m11.865s
user 0m11.365s
sys 0m0.002s
real 0m12.240s
user 0m11.735s
sys 0m0.000s
real 0m11.857s
user 0m11.361s
sys 0m0.001s
real 0m11.861s
user 0m11.365s
sys 0m0.003s
[/code]
请给这篇日志评个分吧!
我的千年电脑,令人脑抽的千点分辨率
将迅雷拒于Linux服务器门外

2009年9月20日 21:40 | by 





