特别说明哦:我的日志都是自己写的,完全是自己写的,完全没有转载的,可别以为我是转载的哦
这里的文章除特别说明的以外,全部使用《知识共享 署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议》进行许可,不可以盗用哦

首先写了一个找第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]



请给这篇日志评个分吧!
  • Currently -4/9
  • 1
    -4
  • 2
    -3
  • 3
    -2
  • 4
    -1
  • 5
    0
  • 6
    1
  • 7
    2
  • 8
    3
  • 9
    4

现在的分数: -4 分,共3个评分

科学最有爱 » 技术向 | 评论(0) | 引用(0) | 阅读(677)
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
昵称   密码   游客无需密码
网址   电邮   [注册]