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

_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to