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 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.