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