Ruby的线程肯定是假的,不废话
Ruby的进程,
--RednaxelaFX提供的win/process可以很好的新建进程--
在windows上是阻塞的,意思是通过system或者exec或者``或者Process.fork,用上面这些方式去执行一段代码,这段代码还是处于调用者的进程空间之内,会阻止调用者继续执行下面的代码,除非这段代码执行完毕。
在linux上通过使用Process.fork将是非阻塞的执行。system或者exec或者``仍然是阻塞的,调用者将等待被调用着返回。
大侠拍一下吧,小弟就这么点理解,悟性不高。
贴一段测试代码方便兄弟们理解:
[quote="执行结果"]"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
this is caller! 1557
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
this is caller! 1557
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
this is caller! 1557
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
this is caller! 1557
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"[/quote]
Ruby的进程,
--RednaxelaFX提供的win/process可以很好的新建进程--
在windows上是阻塞的,意思是通过system或者exec或者``或者Process.fork,用上面这些方式去执行一段代码,这段代码还是处于调用者的进程空间之内,会阻止调用者继续执行下面的代码,除非这段代码执行完毕。
在linux上通过使用Process.fork将是非阻塞的执行。system或者exec或者``仍然是阻塞的,调用者将等待被调用着返回。
大侠拍一下吧,小弟就这么点理解,悟性不高。
贴一段测试代码方便兄弟们理解:
p1 = Process.fork{
while true
sleep 1
p "p1 1 seconds #{Process.pid};"
`echo $$>>temp.pid`
end
}
p2 = Process.fork{
while true
sleep 2
p "p2 2 seconds #{Process.pid};"
system("ll")
end
}
#~ Process.detach(p1)
#~ Process.waitpid(p2)
while true
sleep 5
puts 'this is caller! '+Process.pid.to_s
end
[quote="执行结果"]"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
this is caller! 1557
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
this is caller! 1557
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
this is caller! 1557
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
this is caller! 1557
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"[/quote]