Native Threads in the RTS
Simon Marlow
simonmar@microsoft.com
Tue, 26 Nov 2002 16:34:04 -0000
Alastair Reid wrote:
> Design
> ~~~~~~
>=20
> Haskell threads may be associated at thread creation time with either
> zero or one native threads. There are only two ways to create Haskell
> threads so there are two cases to consider:
Umm, Alastair, I think you've got things a bit mixed up here. Did you
mean two ways to create a native thread? =20
There are currently three ways to create a Haskell thread (forkIO,
foreign export, finalizers) and Wolfgang has proposed a fourth
(forkNativeThread).
Or perhaps you're proposing we do away with forkIO and only have
forkNativeThread? That was discounted a while back because we want to
continue to have light-weight threads independent of OS threads.
> 1) forkNativeThread :: IO () -> IO ()
>=20
> The fresh Haskell thread is associated with a fresh native thread.
>=20
> (ToDo: do we really need to use a fresh native thread or would a
> pool of threads be ok? The issue could be avoided by separating
> creation of the native thread from the 'associate' operation.)
>=20
> 2) Calls to a threadsafe foreign export allocate a fresh Haskell
> thread which is then associated with the Haskell thread.
I don't know what you mean by a "threadsafe foreign export". Did you
mean "threadsafe foreign import" perhaps? And I'm not sure how a fresh
Haskell thread is associated with a Haskell thread ;-)
> Calls to threadsafe foreign imports by threads which have an
> associated native thread are performed by that native thread.
>=20
> Calls to any other foreign imports (i.e., 'safe' or 'unsafe' calls)
> may be made in other threads or, if it exists, in the associated
> native thread at the implementation's discretion.
>=20
> [ToDo: can Haskell threads with no associated thread make foreign
> calls using a thread associated with some other thread? =20
er... overloading the word "thread" was maybe not such a good idea. I
think you're asking whether a green thread can grab a native thread to
make a foreign call. The current answer is no... but can you think of a
reason we might want this feature?
Cheers,
Simon