espace / neverblock forked from oldmoe/neverblock

A collection of high level non-blocking IO libraries

This URL has Read+Write access

neverblock / test / test_mysql.rb
100644 37 lines (33 sloc) 0.767 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
require 'rubygems'
require 'neverblock'
require 'neverblock-mysql'
 
class Mysql
  attr_accessor :fiber
end
 
@count = 100
@connections = {}
@fpool = NB::Pool::FiberPool.new(@count)
@cpool = NB::Pool::FiberedConnectionPool.new(size:@count, eager:true) do
   c = NB::DB::FiberedMysqlConnection.real_connect('localhost','root',nil)
   @connections[c.io] = c
   c
end
 
@break = false
@done = 0
@t = Time.now
@count.times do
  @fpool.spawn do
    @cpool.hold do |conn|
      conn.query('select sleep(1) as sleep').each{|r|p r}
      @done = @done + 1
      puts "done in #{Time.now - @t}" if @done == @count
    end
  end
end
@sockets = @connections.keys
loop do
  res = select(@sockets,nil,nil,nil)
  if res
    res.first.each{|s|@connections[s].resume_command}
  end
end