Iñáki Baz Castillo <ibc / aliax.net> wrote: > El Jueves, 7 de Enero de 2010, Robert Klemme escribióº > > > Yeah, I gathered that from your other posts. The general point, though, > > > still applies: check the pipe's size, and if it grows too large, spin > > > off a new reading thread. > > > > That's something different than you proposed initially, isn't it? This > > approach (increasing the number of readers if the pipe fills too fast) > > is better because it regulates read performance according to load. > > Definitively I have no idea of how to know the status of a FIFO (not a IO pipe > but a FIFO file). The only it occurs when it's full (because no reader is > getting the data) is that the writer #flush operation gets blocked. > I've found no way to determine how "full" is a FIFO file. FIFO are pipes, they just have a name on the filesystem. In any case, use IO#write_nonblock. Any writes you do will raise Errno::EAGAIN if your FIFO/pipe is full. See the pipe(7) manpage on a Linux machine, it provides a great overview of pipe semantics for blocking/non-blocking operations. -- Eric Wong