Class: ParallelServer::Prefork::Child

Inherits:
Object
  • Object
show all
Defined in:
lib/parallel_server/prefork.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sockets, opts, to_parent, from_parent) ⇒ Child

Returns a new instance of Child.

Parameters:

  • sockets (Array<Socket>)
  • opts (Hash)
  • to_parent (IO)
  • from_parent (IO)


311
312
313
314
315
316
317
318
319
320
321
# File 'lib/parallel_server/prefork.rb', line 311

def initialize(sockets, opts, to_parent, from_parent)
  @sockets = sockets
  @options = opts
  @to_parent = to_parent
  @from_parent = from_parent
  @threads = {}
  @threads_mutex = Mutex.new
  @threads_cv = ConditionVariable.new
  @parent_mutex = Mutex.new
  @status = :run
end

Instance Attribute Details

#optionsObject (readonly)

Returns the value of attribute options.



305
306
307
# File 'lib/parallel_server/prefork.rb', line 305

def options
  @options
end

Instance Method Details

#max_idleInteger

Returns:

  • (Integer)


329
330
331
# File 'lib/parallel_server/prefork.rb', line 329

def max_idle
  @options[:max_idle] || DEFAULT_MAX_IDLE
end

#max_threadsInteger

Returns:

  • (Integer)


324
325
326
# File 'lib/parallel_server/prefork.rb', line 324

def max_threads
  @options[:max_threads] || DEFAULT_MAX_THREADS
end

#max_useInteger

Returns:

  • (Integer)


334
335
336
# File 'lib/parallel_server/prefork.rb', line 334

def max_use
  @options[:max_use] || DEFAULT_MAX_USE
end

#start(block) ⇒ void

This method returns an undefined value.

Parameters:

  • block (#call)


340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
# File 'lib/parallel_server/prefork.rb', line 340

def start(block)
  queue = Queue.new
  accept_thread = Thread.new{ accept_loop(block, queue) }
  reload_thread = Thread.new{ reload_loop(queue) }

  # wait that accept_loop or reload_loop end
  queue.pop

  accept_thread.exit
  @sockets.each(&:close)
  @threads_mutex.synchronize do
    notify_status
  end
  wait_all_connections
  reload_thread.exit
end