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
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP