91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行Ruby線程相關知識點分析

發布時間:2022-01-11 14:44:09 來源:億速云 閱讀:115 作者:柒染 欄目:編程語言

這期內容當中小編將會給大家帶來有關如何進行Ruby線程相關知識點分析,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

Ruby語言一款完全面向對象的解釋型腳本語言。對于這樣的一款新型編程語言,其特性對于程序員的吸引力不小。

今天看了Ruby線程部分。《Programming Ruby》***版的HTML版的線程和進程部分講得很詳細。看完后感覺就好像又把操作系統的這一部分重溫了一遍。尤其是Spawning New Processes那一節,如果沒有學過操作系統還真不知道他說什么。

IO.popen,其中的popen,我理解應該是應該是"piped open"的意思。其中這段Ruby線程代碼,

  1. pipe = IO.popen("-","w+")  

  2. if pipe  

  3. pipe.puts "Get a job!"  

  4. $stderr.puts "Child says
     '#{pipe.gets.chomp}'"  

  5. else  

  6. $stderr.puts "Dad says 
    '#{gets.chomp}'"  

  7. puts "OK"  

  8. end 

簡直和Unix課里面的fork代碼示例一樣,父子進程共享同一段代碼。《Programming Ruby》對這段代碼的解釋是“There's one more twist to popen. If the command you pass it is a single minus sign (``--''), popen will fork a new Ruby interpreter. Both this and the original interpreter will continue running by returning from the popen. The original process will receive an IO object back, while the child will receive nil. ”。

***次看我完全沒看出來他說的是什么。看了代碼后一時間也沒往fork去想。結果過了十分鐘后靈光一現才知道是怎么回事。同志們,看英文的東西不容易啊!

Ruby線程還挺好學。Ruby線程的功能是自已實現的。與操作系統無關。為了達到平臺無關性,這種犧牲我覺得有點大。不說作者開發時得費多少力氣。就是使用起來,也沒有本地線程的種種優勢。比如說線程饑餓。下面我寫了一個練習性質的生產者--消費者例子。實話說,比Ruby中thread.rb里的例子要長太多……好處是,這里解決了屏幕輸出時的竄行問題。

  1. require 'thread'  

  2. class Consumer  

  3. def initialize(queue, 
    stdout_mutex)  

  4. @queuequeue = queue  

  5. @stdout_mutexstdout_mutex 
    = stdout_mutex  

  6. end  

  7. def consume  

  8. product = @queue.pop  

  9. @stdout_mutex.synchronize {  

  10. puts "Product #{product} 
    consumed."  

  11. $stdout.flush  

  12. }  

  13. end  

  14. end  

  15. class Producer  

  16. def initialize(queue, stdout_mutex)  

  17. @queuequeue = queue  

  18. end  

  19. def produce  

  20. product = rand(10)  

  21. @queue.push(product)  

  22. @stdout_mutex.synchronize {  

  23. puts "Product #{product} produced."  

  24. $stdout.flush  

  25. }  

  26. end  

  27. end  

  28. sized_queue = SizedQueue.new(10)  

  29. stdout_mutex = Mutex.new  

  30. consumer_threads = []  

  31. 100.times {  

  32. consumer_threads << Thread.new {  

  33. consumer = Consumer.new(sized_
    queue, stdout_mutex)  

  34. consumer.consume  

  35. }  

  36. Thread.new {  

  37. producer = Producer.new(sized_
    queue, stdout_mutex)  

  38. producer.produce  

  39. }  

  40. }  

  41. consumer_threads.each { 
    |thread| thread.join } 

上述就是小編為大家分享的如何進行Ruby線程相關知識點分析了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

潜江市| 阿巴嘎旗| 肇庆市| 怀远县| 宝山区| 西林县| 开原市| 东方市| 高密市| 蒲城县| 自治县| 黄龙县| 天门市| 临泉县| 平阳县| 海晏县| 乡城县| 方正县| 嘉义县| 云浮市| 武清区| 贞丰县| 务川| 鄢陵县| 太保市| 张家界市| 洛南县| 绥化市| 辽阳市| 天台县| 宜春市| 邵阳县| 三门峡市| 昔阳县| 荣成市| 威海市| 宾阳县| 镇康县| 长武县| 颍上县| 怀柔区|