歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Ubuntu 14.04下安裝Rubinius測試原生線程

Ubuntu 14.04下安裝Rubinius測試原生線程

日期:2017/2/28 14:23:22   编辑:Linux教程

因為CRuby(MRI)本身不支持原生多線程,所以想試一下其他ruby解釋器實現對原生多線程的支持.於是安裝rubinius折騰一下:)

在rubinius官網下載2.4.1源代碼,然後駕輕就熟首先bundle,然後./configure一切正常,在rake最後關頭出現錯誤,提示rubinius內部文件夾中若干文件找不到;奇怪的是再次執行rake後,還是報錯,但是文件夾中出現了上次未找到的文件,進去看了一下貌似內容不太對,只有Gemfile和一些README之類的文件,並沒有源代碼之類的文件.多次執行rake,發現文件夾中文件越來越多,但rake總是不成功.

開始懷疑是源代碼過舊,於是從github中clone最新版本2.5.x,下載失敗幾次後終於成功鳥,一百多兆,解壓縮後大了一倍多;然後按部就班,發現在執行./configure時下載了很多gem,於是抱有希望鳥...可是rake時還是報錯,錯誤相同.照理不應該啊!不可能再是源代碼的問題,多半是笨貓系統的問題!

靜下心來,錯誤最後的一些細節引起了本貓的注意:隱約一些utf8轉換神馬ascii8失敗之類的詞眼雲雲飄來...忽然聯想到:難道是PATH中有中文的原因嗎?果不其然,fk!換為全english的path後一切清淨了;編譯時間不短也不長,最後還有若干UnitTest需要運行測試...剩下的就簡單鳥:rake install,再錯,加權限後ok!

下面上測試代碼:

#!/usr/bin/ruby

$x = 0
Thread_proc = ->{i=0;($x+=1;i+=1) while(i<10000)}

def make_t(blk)
Thread.new(&blk)
end

t0 = make_t(Thread_proc)
t1 = make_t(Thread_proc)

t0.join
t1.join

puts "$x last is #{$x}"

在MRI和rbx分別5次結果如下:

MRI:

linuxidc@linuxidc:~/src/ruby_src$ ruby a.rb
$x last is 20000
linuxidc@linuxidc:~/src/ruby_src$ ruby a.rb
$x last is 20000
linuxidc@linuxidc:~/src/ruby_src$ ruby a.rb
$x last is 20000
linuxidc@linuxidc:~/src/ruby_src$ ruby a.rb
$x last is 20000
linuxidc@linuxidc:~/src/ruby_src$ ruby a.rb
$x last is 20000

rbx:

linuxidc@linuxidc:~/src/ruby_src$ rbx a.rb
$x last is 17234
linuxidc@linuxidc:~/src/ruby_src$ rbx a.rb
$x last is 17845
linuxidc@linuxidc:~/src/ruby_src$ rbx a.rb
$x last is 11626
linuxidc@linuxidc:~/src/ruby_src$ rbx a.rb
$x last is 14554
linuxidc@linuxidc:~/src/ruby_src$ rbx a.rb
$x last is 16098

結論很簡單,印證了本篇的主題。

更多Ubuntu相關信息見Ubuntu 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=2

Copyright © Linux教程網 All Rights Reserved