我正在写入线程服务器中的套接字(目前在 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()
吗?