Ruby多线程编程初步入门多线程编程初步入门
传统程序有一个单独的线程执行,包含该程序的语句或指令顺序执行直到程序终止。
一个多线程的程序有多个线程的执行。在每个线程是按顺序执行的,但是在多核CPU机器上线程可能并行地执行。例如,通
常情况下在单一CPU的机器,多个线程实际上不是并行执行的,而是模拟并行交叉的线程的执行。
Ruby的可以使用 Thread 类很容易地编写多线程程序。 Ruby线程是一个轻量级的和高效的在代码中实现并行性。
创建创建Ruby线程:线程:
要启动一个新线程,关联一个块通过调用Thread.new。将创建一个新的线程执行的代码块,原始线程将立即从Thread.new返
回并继续执行下一个语句:
# Thread #1 is running here
Thread.new {
# Thread #2 runs this code
}
# Thread #1 runs this code
例如:
这里是一个例子说明,我们如何能够利用多线程的Ruby的程序。
#!/usr/bin/ruby
def func1
i=0
while i<=2
puts "func1 at: #{Time.now}"
sleep(2)
i=i+1
end
end
def func2
j=0
while j<=2
puts "func2 at: #{Time.now}"
sleep(1)
j=j+1
end
end
puts "Started At #{Time.now}"
t1=Thread.new{func1()}
t2=Thread.new{func2()}
t1.join
t2.join
puts "End at #{Time.now}"
这将产生以下结果:
Started At Wed May 14 08:21:54 -0700 2008
func1 at: Wed May 14 08:21:54 -0700 2008
func2 at: Wed May 14 08:21:54 -0700 2008
func2 at: Wed May 14 08:21:55 -0700 2008
func1 at: Wed May 14 08:21:56 -0700 2008
func2 at: Wed May 14 08:21:56 -0700 2008
func1 at: Wed May 14 08:21:58 -0700 2008
End at Wed May 14 08:22:00 -0700 2008
线程的生命周期:线程的生命周期:
创建一个新的线程用 Thread.new。也可以使用了同义词用 Thread.Start 和 Thread.fork。
没有必要启动一个线程在它被创建后,它会自动开始运行时,CPU 资源成为可用。
Thread 类定义了一些方法来查询和处理的线程在运行时。运行一个线程块中的代码调用Thread.new,然后它停止运行。
该块中的最后一个表达式的值是线程的值,可以通过调用 Thread对象值的方法。如果线程运行完成,则该值为线程的返回