2

因此,假设我有一个 sidekiq 进程,它发送一个我不想等待的 http post 请求。我不希望这成为工人速度的障碍。

我的一个想法是将这个简单的示例代码用于 EventMachine Http Request

  EventMachine.run do
    http = EventMachine::HttpRequest.new("http://www.example.com").post :options => {...}
    http.callback do
      puts "got a response"
      puts http.response
      EventMachine.stop
    end
    puts "worker finished"
  end

所以让我们假设我的工作进程在调用回调之前完成。这里会发生什么?这是否意味着指向回调的指针会失败?我想了解这里的控制流程。

4

2 回答 2

2

根据您的需要:

  1. 您想利用 CPU
    Sidekiq 工作人员非常轻量级。您可以在等待响应时运行更多它们以利用 CPU。
  2. 您希望工人完成得更快
    您可以将每个请求排入队列以由不同的工作人员处理。就像 EM 中的 next_tick() 一样。我对 Sidekiq 和赛璐珞感到兴奋,因为它改变了我们的思维方式。http://www.slideshare.net/KyleDrake/hybrid-concurrency-patterns?utm_source=rubyweekly&utm_medium=email
于 2012-11-14T07:37:02.877 回答
2

在您调用之前,该EventMachine.run块不会返回EventMachine.stop。因此,在您的情况下,如果没有运行回调,工作人员将无法完成。

于 2012-11-13T17:41:14.327 回答