Ruby執行緒生命週期及其狀態


在 Ruby 中,我們可以建立具有不同狀態和生命週期的執行緒,其生命週期表示從開始到結束的時間。在本文中,我們將瞭解 Ruby 中執行緒的生命週期。

Ruby中的執行緒生命週期

執行緒生命週期簡要總結了執行緒從開始到結束的發展過程。可以使用**Thread.new、Thread.fork**或**Thread.start**建立一個新執行緒。

  • 建立新執行緒後,無需立即啟動它。只要 CPU 可用,它就會自動啟動。

  • **Thread.new**返回一個 Thread 物件。可以使用 Thread 類的多種方法查詢和操作執行緒。

  • 一旦執行緒到達與呼叫**Thread.new**相關的程式碼塊,它就會停止。

  • 透過呼叫 Thread 物件的 value 方法,將執行緒塊中的最後一個表示式轉換為執行緒值,該值透過呼叫執行緒塊中的最後一個表示式獲得。

  • 完全執行的執行緒只會從**value**方法接收值。否則,它將不會接收值。

  • 如果引發異常,則執行緒將終止。即使不是主執行緒,只有以異常終止的執行緒才會受到此條件的影響。

Ruby中的執行緒狀態

Ruby 提供五種執行緒狀態,每種狀態都描述了執行緒的當前狀態。要確定執行緒是否存活,可以使用**alive?**函式和**status**方法。

下表描述了 Ruby 中的不同執行緒狀態及其返回值。

狀態返回值
可執行run
休眠Sleep
中止aborting
正常終止false
異常終止nil

讓我們更深入地瞭解 Ruby 中執行緒的不同狀態。

  • **可執行** - 正在執行或等待獲取 CPU 資源(如果可用)的執行緒。

  • **休眠** - 空閒執行緒,正在等待 IO 或當前已停止的執行緒。

  • **中止** - 中間狀態。這指的是已被終止但尚未結束的執行緒。

  • **異常終止** - 包含異常的執行緒,或者換句話說,由於發生異常而終止的執行緒。

  • **正常終止** - 執行緒在不包含異常的情況下完成其工作,或正常終止時。

示例

現在讓我們來看一個非常基本的例子,我們將建立一個新執行緒,然後檢查其狀態。請考慮以下程式碼。

# status checking of a thread
cnt = 0

# new thread created
x = Thread.new {
   loop {
      cnt += 1
   }
}

# checking
puts x.alive?

# printing status
puts x.status

輸出

true
run

更新於: 2022年1月25日

458 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告