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]
本文探讨了Ruby中进程创建的方式及其在不同操作系统上的阻塞特性。通过具体示例代码展示了如何使用Process.fork实现非阻塞执行,并比较了system与exec等方法的阻塞效果。
557

被折叠的 条评论
为什么被折叠?



