Skynet 1M Fiber microbenchmark in D

Nordlöw per.nordlow at gmail.com
Wed Oct 18 11:34:57 UTC 2017


On Wednesday, 18 October 2017 at 11:04:10 UTC, Biotronic wrote:
> On Wednesday, 18 October 2017 at 11:01:56 UTC, Per Nordlöw 
> wrote:
>> On Wednesday, 18 October 2017 at 09:01:30 UTC, Per Nordlöw 
>> wrote:
>>> Creates an actor (goroutine, whatever), which spawns 10 new 
>>> actors, each of them spawns 10 more actors, etc. until one 
>>> million actors are created on the final level. Then, each of 
>>> them returns back its ordinal number (from 0 to 999999), 
>>> which are summed on the previous level and sent back 
>>> upstream, until reaching the root actor. (The answer should 
>>> be 499999500000).
>>>
>>> See also: https://github.com/atemerev/skynet
>>
>> I Fibers aren't supposed to take any parameters how are we 
>> supposed to pass values to it during creation?
>
> class MyFiber : Fiber {
>     this(int arguments, string go, float here) {
>         super(&run);
>         // Save arguments somewhere
>     }
>     void run() {
>         // Use arguments here.
>     }
> }
>
> --
>   Biotronic

Thanks, I figured that out myself after a while ;)

Another thing...how should the synchronization between the fibers 
figure out when the total number of fibers have reached one 
million?...via an atomic counter fed by reference to the 
constructor...or are there better ways? Because I do need an 
atomic reference counter here, right?

And how do I parallelize this over multiple worker threads? 
AFAICT fibers are by default all spawned in the same main thread, 
right?


More information about the Digitalmars-d-learn mailing list