簡體   English   中英

簡單的Neverblock示例不起作用

[英]Simple neverblock example doesn't work

我正在嘗試使用“ neverblock”做某事,但似乎無法使其正常工作。
我的期望:睡眠阻塞不會減慢整個過程。 我希望看到5次“ bla”具有基本相同的時間戳。

紅寶石:

$ ruby --version
ruby 1.9.2dev (2010-03-31 trunk 27123) [x86_64-darwin10.2.0]

碼:

require "neverblock"
fiber_pool = NeverBlock::Pool::FiberPool.new(25)

5.times do
fiber_pool.spawn do
  puts "bla @ #{Time.now}"
  sleep 1
end
end

結果:

$ ruby test.rb 
Using Neverblock
bla @ 2010-04-07 11:00:28 -0400
bla @ 2010-04-07 11:00:29 -0400
bla @ 2010-04-07 11:00:30 -0400
bla @ 2010-04-07 11:00:31 -0400
bla @ 2010-04-07 11:00:32 -0400

您需要“凍結”您的時間。
當您調用Time.now它將始終執行自身

time = Time.now
5.times do
  fiber_pool.spawn do
    puts "bla @ #{time}"
    sleep 1
  end
end

http://ruby-doc.org/core-1.9/classes/Fiber.html

光纖是使用暫掛和恢復進行調度的-由於在此示例中您都不使用它們,因此代碼將按順序運行。 據我所知,NeverBlock結合使用FiberPool以及光纖和事件感知數據庫驅動程序,可以根據需要智能地掛起和恢復光纖以處理I / O事件。

做這個:

require "neverblock"
require "eventmachine"

fiber_pool = NeverBlock::Pool::FiberPool.new(5)

EM::run do
  5.times do
    fiber_pool.spawn do
      puts "bla @ #{Time.now}"
      EM.add_timer(1) do
        EM.stop
      end
    end
  end
end

它應該工作!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM