"Spawn as many thousand threads as you like" and D

Sönke Ludwig via Digitalmars-d digitalmars-d at puremagic.com
Wed May 7 10:06:24 PDT 2014


Am 07.05.2014 17:28, schrieb Bienlein:
>
> Hello Sönke,
>
> would it be possible in vibe.d to spawn a task the usual actor-style way
> as it is done with kernel threads in D? What I mean is this:
>
> void spawnedFunc(Tid tid)
> {
>     receive(
>       (int i) { writeln("Received the number ", i);}
>     );
>
> }
>
> auto tid = spawn(&spawnedFunc, thisTid);
>
>
> Thanks, Bienlein

The Tid handling is currently a little different, but apart from that it 
should work like this:

	import vibe.core.core;
	import vibe.core.concurrency;

	void spawnedFunc(Tid tid)
	{
	    receive(
	      (int i) { writeln("Received the number ", i); }
	    );
	}

	// run it as a fiber in the same thread
	// note: runTask only takes a delegate to make runTask({ ... })
	// work without an ambiguity error
	auto tid = runTask(toDelegate(&spawnedFunc), Task.getThis());

	// or run it in the thread pool instead
	runWorkerTask(&spawnedFunc, Task.getThis());

Having said that, I'll just add a "thisTid" property to 
vibe.core.concurrency to make that part API compatible. I'd also add a 
"spawn" alias, but the question is if that should point to runTask or 
rather to runWorkerTask.


More information about the Digitalmars-d mailing list