Date: Sat, 17 Apr 1999 02:52:56 +0200 (MET DST) From: Olaf Wagner <wagner@luthien.in-berlin.de> To: freebsd-current@freebsd.org Subject: Re: cvsup Message-ID: <199904170052.CAA31420@luthien.iceflower.in-berlin.de> In-Reply-To: <XFMail.990413162255.jdp@polstra.com>
next in thread | previous in thread | raw e-mail | index | archive | help
In article <XFMail.990413162255.jdp@polstra.com> you wrote: > Daniel Eischen wrote: >> John Polstra wrote: >> >>> My hunch is that it's not a fairness issue. It's just the fact that >>> when you block in disk I/O, the whole process (all threads) blocks. >> >> That statement made me think that Modula-3 had it's own threading >> support because our native threads using non-blocking file I/O. > For disk I/O? Are you sure? If so then it must use the aio/lio calls > or something similar. Disk I/O calls _always_ block, even if you've > set O_NONBLOCK on the file descriptor. The SchedulerPosix interface in m3core exports the procedures IOWait() and IOAlertWait(), which can be used to wait for a single file descriptor without stopping other threads. These procedures are used in FilePosix.IntermittentRead to implement non-blocking reading. The default implementation does not count RegularFiles as intermittent readers and writers though: REVEAL Pipe.T = IntermittentFile BRANDED OBJECT END; Terminal.T = IntermittentFile BRANDED OBJECT END; RegularFile.T = RegularFile.Public BRANDED OBJECT OVERRIDES read := RegularFileRead; write := RegularFileWrite; seek := RegularFileSeek; flush := RegularFileFlush; lock := RegularFileLock; unlock := RegularFileUnlock END; So read calls on files always block until the Unix read call returns; no other threads can run. If the O_NONBLOCK flag on fds would work for disk I/O in FreeBSD, then the code from the intermittent read procedures in FilePosix could easily be used to let the scheduler run other threads while one thread is waiting for data from a file. As John Polstra pointed out, this seems not to be possible... Aio could probably be used, but there seems to be a shortage of man pages about aio calls in FreeBSD and I haven't got my Posix book at hand, so I'm not sure how difficult this would be. -- /\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ || Olaf Wagner | wagner@luthien.in-berlin.de (private) | || Cranachstrasse 7 | wagner@elego.de (business) | || D-12157 Berlin | phone: +49 30 85 60 26 70 | || Germany / Deutschland | fax: +49 30 85 60 26 71 | \///////////////////////////////////////////////////////////////// To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199904170052.CAA31420>