output streams vs output ports
Taylor Campbell
(18 Jun 2005 00:26 UTC)
|
Re: output streams vs output ports
Michael Sperber
(18 Jun 2005 07:57 UTC)
|
Re: output streams vs output ports
Taylor Campbell
(18 Jun 2005 15:17 UTC)
|
Re: output streams vs output ports
Michael Sperber
(18 Jun 2005 18:51 UTC)
|
Re: output streams vs output ports
Shiro Kawai
(18 Jun 2005 21:06 UTC)
|
Re: output streams vs output ports
Michael Sperber
(19 Jun 2005 09:09 UTC)
|
Re: output streams vs output ports
Shiro Kawai
(19 Jun 2005 09:41 UTC)
|
Re: output streams vs output ports
Michael Sperber
(20 Jun 2005 05:41 UTC)
|
Re: output streams vs output ports Shiro Kawai (20 Jun 2005 09:16 UTC)
|
Re: output streams vs output ports
Michael Sperber
(21 Jun 2005 07:43 UTC)
|
Re: output streams vs output ports
Shiro Kawai
(21 Jun 2005 08:08 UTC)
|
Re: output streams vs output ports
Michael Sperber
(27 Jun 2005 05:45 UTC)
|
>From: Michael Sperber <xxxxxx@informatik.uni-tuebingen.de> Subject: Re: output streams vs output ports Date: Mon, 20 Jun 2005 07:41:21 +0200 > > Is there a portable way (i.e. can be written in portable C) > > to avoid calling synchronization primitives (e.g. pthread_mutex_lock) > > if the implementation uses native threads? > > But if you're using native threads, aren't read(2) and write(2) > already thread-safe in some sense? (I really don't know.) If the port I/O is just a thin, stateless layer on top of OS syscalls, yes. But I imagine it's hardly the case---if the port buffers the data, you need mutex in the port layer, for example. So do srfi-6 string ports. > That's where most of the potentially expensive synchronization is, > anyway. There's a little bit in the streams layer, but I'm not sure > avoiding that would be worth the potential pain. The simple-minded copy program: (call-with-input-file "/usr/share/dict/words" (lambda (in) (call-with-output-file "/dev/null" (lambda (out) (do ((c (read-char in) (read-char in))) ((eof-object? c)) (write-char c out)))))) It runs 3.5x faster if I bypass locking of 'in' and 'out' ports in Gauche. The port buffers I/O data, so OS call is far less frequent than the port access, almost negligible. The output buffered stream of srfi-68 reference implementation doesn't seem MT-safe. I thought the locking will be handled in the port layer, but do you think the stream should take care of it? --shiro