Waiting on Sockets or File Descriptors
Wolfgang Thaller
wolfgang.thaller at gmx.net
Wed Feb 2 11:41:06 EST 2005
> So I guess I can't really use them in code that's supposed
> to be portable among different platforms?
>
> Maybe 'forkOS' combined with calling poll() through FFI
> really is the best solution? I seem to recall reading
> somewhere that the threaded RTS was more efficient for these
> applications anyway?
Two minor points:
a) poll() is not supported on Mac OS X and (at least some popular
versions of) BSD.
b) 'forkIO' in the threaded RTS would suffice in this case, as the
poll() or select() system calls don't use any thread-local state. In
the threaded RTS, "safe" foreign imports never affect other threads,
and you only need forkOS if the actual identity of the OS thread
matters (i.e. when using thread-local state, OpenGL, some GUI
libraries).
Apart from that, my guess is that it would be fairly efficient with the
threaded RTS.
The only inefficiency would be that if you're doing regular IO to
"slow" file handles at the same time, you'd get one (OS) thread in
GHC's libraries calling select() for the regular fds, plus a separate
(OS) thread running your call to select()/poll(). I'm not sure if
cleaning this up would be worth the effort - you get at least two OS
threads anyway.
Cheers,
Wolfgang
More information about the Glasgow-haskell-users
mailing list