使用Unix工艺控制的方法在红宝石
-
05-07-2019 - |
题
Ryan Tomayko了相当火灾风暴 这个职位 关于使用Unix工艺控制的命令。
我们应该做更多的这一点。更多的这一点。我说的是fork(2),execve(2)、管道(2),socketpair(2),选择(2),杀死(2),sigaction(2),等等。这些都是我们的朋友。他们想要的那么严重只是来帮助我们。
我有一位的代码(a delayed_job
克隆DataMapper,我认为适合这一点,但我不清楚如何利用所列出的命令。任何想法,关于如何提高这个代码?
def start
say "*** Starting job worker #{@name}"
t = Thread.new do
loop do
delay = Update.work_off(self)
break if $exit
sleep delay
break if $exit
end
clear_locks
end
trap('TERM') { terminate_with t }
trap('INT') { terminate_with t }
trap('USR1') do
say "Wakeup Signal Caught"
t.run
end
end
解决方案
啊是...危险的"我们应该做更多的这种"没有解释什么,这些做,在什么情况下你会使用它们。对喜欢的东西 delayed_job
你甚至可能使用 fork
不知道你使用 fork
.这就是说,它并不重要。Ryan是在谈论使用 fork
为preforking服务器。 delayed_job
将使用 fork
把一个过程变成一个进程。同样的系统,呼叫,不同的目的。运行 delayed_job
在前景(没有 fork
)与在该背景(与 fork
)将导致一个可以忽略不计的性能差异。
但是,如果你写一个服务器接受同时连接,现在Ryan的建议是正确的金钱。
fork
:创建一个复原过程execve
:停止执行当前文件和开始执行一个新的文件在同一进程中(中非常有用耙任务)pipe
:创建一个管道(两个文件的描述,一读,一个用于编写)socketpair
:像管,但对插座select
:让你等一个或更多文件的描述是准备用超时kill
:用来发送一个信号,以一个过程sigaction
:可以让你改变什么时发生的情况过程中收到一个信号
不隶属于 StackOverflow