[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: output streams vs output ports

Many thanks for running these benchmarks!

Shiro Kawai <shiro@xxxxxxxx> writes:

> In the current implementation, a port has a recursive lock and
> the pthread_mutex_lock is called when a builtin I/O procedure
> is called and the calling thread hasn't acquired the lock.  So
> the locking doesn't affect the large-granularity operation
> such as read or write much, while it is expensive for fine-grained
> operation such as read-char/write-char expensive.  Gauche
> provides a procedure "with-port-locking" to lock the port in
> larger granularity, which is what I used to "bypass" the
> locking.
> (Maybe I'm doing something stupid; if there's a clever way to
> avoid this much of locking overhead, I'd like to be enlightened.)

Huh---I'm afraid I don't have a good answer for you other than to use
procedures like DISPLAY-STRING.  You should be able to do better with
input streams through lockless synchronization in the common case---if
a buffer is there, it's immutable, after all.  For output streams,
it's indeed harder.

I don't really see thread safety as being local to ports only---the
stream framework is just as high-level as the ports, and should be
ready for the same tasks.

Cheers =8-} Mike
Friede, Völkerverständigung und überhaupt blabla