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:可以让你改变什么时发生的情况过程中收到一个信号
scroll top