这年头,大多数人应该不需要看这些内容了,所以以下也不是什么入门,只是有些同学还不太了解,举几个简单例子帮助理解
例子一:
require 'faraday'
Faraday.get 'http://www.sina.com'
puts 'web get done'
puts 'hello'
sleep 3
puts 'completed.'
很简单,ruby 脚本先下载,再依次打印 web get done
,hello
,completed.
例子二:
require 'faraday'
Thread.new do
Faraday.get 'http://www.sina.com'
puts 'web get done'
end
puts 'hello'
sleep 3
puts 'completed.'
这次有所不同,下载和打印web get done
的环节是和打印’completed.'同时发生的,这就是线程的作用——传递给 Thread.new 的 block 与后续代码”并行“执行了,我们也可以说,传入的 block 是异步执行(不会阻碍当前执行序列)
那如何拿到并行的执行结果呢?答案是等待。由于我们有 thread 对象,等待就是它的一个方法,比如这样:
require 'faraday'
t = Thread.new do
Faraday.get 'http://www.sina.com'
puts 'web get done'
end
t.join
puts 'hello'
脚本执行到 thread 对象的 join 方法时,将会等待线程执行结束,然后继续进行。
传入线程的 block 也有返回值,所以我们还可以这样
require 'faraday'
t = Thread.new do
Faraday.get 'http://www.sina.com'
'web get done'
end
puts 'hello'
puts t.value
与 join 类似,调用 thread 的 value 方法时,系统会等待线程执行结束,然后将 block 的执行结果返回