亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 關(guān)于ruby多終程的疑問 [打印本頁]

作者: yakczh    時(shí)間: 2012-02-11 21:22
標(biāo)題: 關(guān)于ruby多終程的疑問
  1.     pages = %w( www.rubycentral.com
  2.             www.awl.com
  3.             www.pragmaticprogrammer.com
  4.            )
  5.     for n in pages  
  6.     thread=Thread.new(n){ |n|
  7.    
  8.      while true
  9.      puts n
  10.      sleep(rand(2)/1.0)
  11.     end
  12.    
  13.     }  
  14.     thread.join  
  15.     end  
復(fù)制代碼
為什么只是打印第一個(gè)網(wǎng)址
作者: Sevk    時(shí)間: 2012-02-12 13:05
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: bugbugbug3    時(shí)間: 2012-02-13 11:26
本帖最后由 bugbugbug3 于 2012-02-13 11:28 編輯

to yakczh :
1. 你寫的代碼的錯(cuò)誤是:不應(yīng)該在 這個(gè)for循環(huán)里調(diào)用thread.join ,這樣會(huì)導(dǎo)致,你的循環(huán)第一遍時(shí)便在等著新創(chuàng)建的線程結(jié)束。換句話說,你的for循環(huán)只走了一趟而已。也只是創(chuàng)建了一個(gè)線程。解法是把join拿到外面。
2. 按照ruby的編碼風(fēng)格,不推薦用for循環(huán),使用each 加代碼塊 更有ruby的味道。

代碼大體修改如下(我用的是Ruby1.9.2),關(guān)鍵是別再循環(huán)里用join, 可以先把線程對(duì)象收集起來,最后再用join.
  1. pages = %w( www.rubycentral.com
  2.             www.awl.com
  3.             www.pragmaticprogrammer.com
  4.           )

  5. threads = []

  6. pages.each do |page|
  7.   threads << Thread.new(page) do |url|
  8.     while true
  9.       puts url
  10.       sleep(rand(2)/1.0)
  11.     end
  12.   end
  13. end  
  14. threads.map(&:join)
復(fù)制代碼
to Sevk: 應(yīng)該是 yakczh 使用join方法不當(dāng)導(dǎo)致的。


作者: Sevk    時(shí)間: 2012-02-13 14:21
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: lloydm    時(shí)間: 2012-06-26 17:52
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: wu6887421    時(shí)間: 2012-07-06 17:15
壓根不是這個(gè)原因,你去看看for 和each 的區(qū)別就知道為什么了
作者: yezj2004    時(shí)間: 2012-08-09 03:33
不錯(cuò)的~~! 感謝您提供
作者: http80    時(shí)間: 2012-08-15 11:41
本帖最后由 http80 于 2012-08-15 11:43 編輯

推薦:http://www.yiibai.com/ruby/ruby_multithreading.html
傳統(tǒng)程序中有一個(gè)執(zhí)行線程,包括程序的語句或指令順序執(zhí)行,直到程序終止.
一個(gè)多線程程序中有多個(gè)執(zhí)行線程。在每個(gè)線程中,語句順序執(zhí)行,但可parallel.on執(zhí)行線程本身多核的CPU,例如。多個(gè)線程往往在一個(gè)單CPU的機(jī)器,不實(shí)際執(zhí)行并行,但并行交錯(cuò)執(zhí)行的線程模擬.
Ruby可以很容易地寫Thread類的多線程程序。 Ruby線程是一個(gè)輕量級(jí)的和有效的方式,以實(shí)現(xiàn)在你的代碼的并行.

創(chuàng)建Ruby線程:
要開始一個(gè)新的線程,只是關(guān)聯(lián)與以Thread.new調(diào)用塊。將創(chuàng)建一個(gè)新線程執(zhí)行的代碼塊,并從Thread.new原來的線程將立即返回,并恢復(fù)執(zhí)行的下一條語句:

# Thread #1 is running here
Thread.new {
  # Thread #2 runs this code
}
# Thread #1 runs this code
作者: yezj2004    時(shí)間: 2012-10-12 22:17
支持你加分




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2