How multithreading works in hardware using D ==AND== difference b/w goroutine and threads in D

Sean Kelly sean at invisibleduck.org
Tue Nov 27 13:35:53 PST 2012


On Nov 25, 2012, at 11:29 AM, Sparsh Mittal <sparsh0mittal at gmail.com> wrote:

> Hello
> 
> I could find this for Java, but not yet for D and so wanted to ask:
> 
> Would you tell briefly, how multi-threading in D works on hardware. What I wanted to ask is: if we have a single-core or multicore system, how does scheduling of threads in D happens.
> 
> For Java, what I found was (in my words):
> 
> The JVM runs as a single process which internally spawns many threads. When the scheduler code running inside the JVM asks for another thread, JVM starts another thread. The execution of the threads is done using timeslicing, which enables threads to share the processor. With this approach, concurrency using multithreading can be achieved even on single processors. On multicore platforms, these threads can possibly be scheduled on different CPU cores. In hardware, the management of thread is done by the operating system (OS), and the JVM uses the facility provided by the OS.

D is the same.  In essence, a Thread in D is equivalent to a kernel thread and in fact forwards all of the real work to the appropriate kernel calls.


> My second question is: What is the difference between working of goroutine in Go and threads spawned in D. Both work concurrently with the caller (parent).

A D Fiber is closer to a goroutine, but Fibers are still somewhat simpler / lower-level.  The stack for a Fiber is allocated on creation and fixed in size, and scheduling is done manually via the call() method.


More information about the Digitalmars-d mailing list