[Haskell-cafe] Re: Bound threads
Wolfgang Thaller
wolfgang.thaller at gmx.net
Sat Feb 26 01:21:30 EST 2005
> I'm trying to understand the semantics and implementation of bound
> threads
> basing on the conc-ffi paper and others.
>
> Since the main thread is bound, and unbound threads are never executed
> on an OS thread which has some Haskell thread bound, this would imply
> that when the main thread spawns a Haskell thread and they synchronize
> a lot with each other using MVars, the synchronization needs OS-thread
> synchronization - the threads will not execute on a the same OS thread.
Correct.
> If I understand this correctly, doesn't it impose a significant
> overhead compared to synchronizing two unbound threads? If not,
> what am I missing?
Yes, it does impose more overhead than synchronizing two unbound
threads. Depending on how high your demands are and on how good your
operating system is at OS-thread synchronization, it might or might not
be significant.
We need the main thread to be bound because the main thread is special
for some libraries (Apple's Carbon and Cocoa libraries, and, to a
lesser extent, Microsoft's Win32). Some calls to these libraries
absolutely have to be executed in the main thread and not in any other
thread.
So treating the "call" to main the same way as other calls into Haskell
code (using a bound Haskell thread) was the nicest solution to this;
the performance disadvantage you pointed out can be easily worked
around by just doing _all_ the work in unbound threads (and having the
main thread just wait for the unbound threads to terminate).
Hope that answers your question,
Wolfgang
More information about the Haskell-Cafe
mailing list