ruby 线程的性能测试

来源:互联网 发布:英国脱欧影响知乎 编辑:程序博客网 时间:2024/06/06 08:00

在使用中ruby的过程中难免会遇到提高性能的问题,由此便想起了ruby线程。但是我在使用中却发现ruby的线程却不能提高性能。我写了以下代码,做了些简单测试。

 

代码

 

测试结果如下

"没有使用线程,线程的处理代码里没有sleep"    ->     24秒
2009-12-02 23:03:11 +0800
#<DateTime: 1993-02-24T12:30:45+00:00 (4702162601/1920,0/1,2299161)>
#<DateTime: 1993-02-25T12:30:45+00:00 (4702164521/1920,0/1,2299161)>
2009-12-02 23:03:35 +0800


"使用线程,线程的处理代码里没有sleep" -> 26秒
2009-12-02 23:03:35 +0800
#<DateTime: 1993-02-25T12:30:45+00:00 (4702164521/1920,0/1,2299161)>
#<DateTime: 1993-02-24T12:30:45+00:00 (4702162601/1920,0/1,2299161)>
2009-12-02 23:04:01 +0800


"使用线程,线程的处理代码里有sleep" -> 3秒
2009-12-02 23:04:01 +0800
3
3
2009-12-02 23:04:04 +0800


"没有使用线程,线程的处理代码里有sleep" -> 5秒
2009-12-02 23:04:04 +0800
3
3
2009-12-02 23:04:09 +0800

 

 

 

分析

从上面可以的结果看出,一旦你的处理很忙的时候,没有空闲的话,使用ruby的多线程反而性能会变低。如果你的处理有空闲的话,使用多线程,就能达到提高性能的目的。其中官方也提到了ruby的线程并不能提高运行速度。(http://www.ruby-lang.org/ja/man/html/Thread.html 日文的)

 

 

* 线程定义参考

ruby线程概述
线程(Thread)就是指能在一个程序中处理若干控制流的功能。与OS提供的进程不同的是,线程可以共享内存空间。

Ruby中使用的线程是用户级线程,由Ruby解释器进行切换管理。其效率要低于由OS管理线程的效率,且不能使用多个CPU,这确实是它的缺点。但其优点也很明显,即可移植性很高。

 

引用URL:http://hi.baidu.com/chenjinze/blog/item/b4edde1c831bcc8887d6b633.html