Lets talk about fibers

Jonathan M Davis via Digitalmars-d digitalmars-d at puremagic.com
Thu Jun 4 15:28:51 PDT 2015


On Wednesday, 3 June 2015 at 18:34:34 UTC, Liran Zvibel wrote:
> As we see, there is nothing to gain and lots to lose by moving 
> fibers between threads.

Given that it sounds like LLVM _can't_ implement moving fibers 
(or if it can, it'll really hurt performance), I think that we 
need a really compelling reason to allow it. And I haven't heard 
one from anyone thus far.

Initially, at dconf, Walter asserted that we needed to make 
fibers moveable across threads, but I haven't really heard anyone 
give a reason why we need to. deadalnix talked about load 
balancing that way, but you gave good reasons as to why that 
didn't make sense, and that argument is the closest that I've 
seen to a reason why it would make sense to move fibers across 
threads.

Now, like Steven, I've never used a fiber in my life (I really 
should look into them one of these days), so I'm ill-suited for 
making a decision on this, but it sounds to me like we should 
start by having it be illegal to move fibers across threads and 
then add the ability later if someone comes up with a good enough 
reason. Certainly, it's sounds questionable that it even _can_ be 
implemented and costly if it can.

Another approach would be to make it so that shared(Fiber) could 
be moved across threads but that Fiber can't be (or at least, 
it's undefined behavior if you do, since the compiler will assume 
that you won't), and if the 3 major backends can all support 
moving fibers across threads (even in an inefficient fashion), 
then we can just implement that support for shared(Fiber) and say 
that folks are free to shoot themselves in the foot using that if 
they so desire and let Fiber be more restrictive and not have it 
take the performance hit incurred by allowing fibers to be passed 
across threads.

But if LLVM really can't support moving fibers across threads, 
then I think that the clear answer is that we shouldn't allow it 
at all (in which case, shared(Fiber) should probably be outright 
disallowed).

- Jonathan M Davis


More information about the Digitalmars-d mailing list