0

スレッド化されたサーバー (現在 MRI で実行中) のソケットに書き込みを行っています。次のコードでそれを行います:

begin
  num_bytes_written = socket.write_nonblock(chunk)
  if num_bytes_written < chunk.bytesize
    chunk = chunk[num_bytes_written..-1]
    raise Errno::EINTR
  end
rescue IO::WaitWritable, Errno::EINTR
  Thread.pass if server_is_threaded
  IO.select(nil, [socket])
  retry
rescue Errno::EPIPE
  return
end

その要点は、WaitWritable を取得した場合 (ソケットが飽和している場合)、これを実行するサーバーに別のスレッドを先取りさせたいということです。ここで良い考えですかThread.pass、または私のスレッドが実行している場合、MRI は自動的に何か他のものをプリエンプトしますselect()か?

4

1 に答える 1