首页 > 学院 > 开发设计 > 正文

Ruby多线程编程初步入门

2019-10-26 19:26:51
字体:
来源:转载
供稿:网友

 传统程序有一个单独的线程执行,包含该程序的语句或指令顺序执行直到程序终止。

一个多线程的程序有多个线程的执行。在每个线程是按顺序执行的,但是在多核CPU机器上线程可能并行地执行。例如,通常情况下在单一CPU的机器,多个线程实际上不是并行执行的,而是模拟并行交叉的线程的执行。

Ruby的可以使用 Thread 类很容易地编写多线程程序。 Ruby线程是一个轻量级的和高效的在代码中实现并行性。
创建Ruby线程:

要启动一个新线程,关联一个块通过调用Thread.new。将创建一个新的线程执行的代码块,原始线程将立即从Thread.new返回并继续执行下一个语句:

# Thread #1 is running hereThread.new { # Thread #2 runs this code}# Thread #1 runs this code

例如:

这里是一个例子说明,我们如何能够利用多线程的Ruby的程序。

#!/usr/bin/rubydef func1  i=0  while i<=2   puts "func1 at: #{Time.now}"   sleep(2)   i=i+1  endenddef func2  j=0  while j<=2   puts "func2 at: #{Time.now}"   sleep(1)   j=j+1  endendputs "Started At #{Time.now}"t1=Thread.new{func1()}t2=Thread.new{func2()}t1.joint2.joinputs "End at #{Time.now}"

这将产生以下结果:

Started At Wed May 14 08:21:54 -0700 2008func1 at: Wed May 14 08:21:54 -0700 2008func2 at: Wed May 14 08:21:54 -0700 2008func2 at: Wed May 14 08:21:55 -0700 2008func1 at: Wed May 14 08:21:56 -0700 2008func2 at: Wed May 14 08:21:56 -0700 2008func1 at: Wed May 14 08:21:58 -0700 2008End at Wed May 14 08:22:00 -0700 2008

线程的生命周期:

创建一个新的线程用 Thread.new。也可以使用了同义词用 Thread.Start 和 Thread.fork。

没有必要启动一个线程在它被创建后,它会自动开始运行时,CPU 资源成为可用。

Thread 类定义了一些方法来查询和处理的线程在运行时。运行一个线程块中的代码调用Thread.new,然后它停止运行。

该块中的最后一个表达式的值是线程的值,可以通过调用 Thread对象值的方法。如果线程运行完成,则该值为线程的返回值。否则,该值方法会阻塞不会返回,直到该线程已完成。
类方法Thread.current返回代表当前线程的 Thread对象。这允许线程操纵自己。类方法 Thread.main返回线程对象代表主线程,thread.this初始线程开始执行Ruby程序开始时。

可以等待一个特定的线程通过调用该线程的Thread.Join方法来完成。调用线程将被阻塞,直到给定线程完成。
线程和异常:

如果在主线程中引发一个异常,并没有任何地方处理,Ruby解释器打印一条消息并退出。在主线程以外的其他线程,未处理的异常导致线程停止运行。

如果线程 t 退出,因为未处理的异常,而另一个线程调用t.join或t.value,那么所发生的异常在 t 中提出的线程 s。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表