On Apr 19, 2012, at 9:37 PM, Sean Cavanaugh <worksonmymach...@gmail.com> wrote:

> On 4/19/2012 10:00 PM, Jameson Ernst wrote:
>> On Thursday, 19 April 2012 at 00:07:45 UTC, Sean Kelly wrote:
>>> On Apr 18, 2012, at 4:06 PM, Andrew Lauritzen wrote:
>>> 
>>>> I'm still interested in if anyone has any suggested workarounds or
>>>> experience using Win32 fibers in D2 as well.
>>> 
>>> The x32 Windows code should be pretty well tested. If this is using
>>> the x64 code though, that's all quite new. I'll give this a try when I
>>> find some time, but can't suggest a workaround offhand. It almost
>>> sounds alignment-related, which could be tricky.
>> 
>> Been following D for a while now, and fibers right in the std lib are a
>> huge draw for me. I'm not an expert on them, but on the topic of x64
>> fibers, I have some exposure to them trying to contribute x64 windows
>> support to bsnes, which uses its own home-grown fiber/coroutine system.
>> 
>> Out of curiosity I took a look at the D fiber context code, and noticed
>> that the x64 windows version doesn't seem to save the XMM6-15 registers
>> (unless I missed it), which is something I forgot to do also. MSDN
>> indicates that they are nonvolatile, which could potentially cause
>> problems for FP heavy code on x64 windows.
>> 
>> Not sure if I should file a bug for this, as I haven't tried an x64
>> windows fiber in D yet to make sure it's actually a problem first.
> 
> Fibers seem like a last resort to me.  They are fairly difficult to make 
> bulletproof due to the thread local storage issues and a few other problems 
> with context switches.  Win7 scheduling and management of real threads is a 
> lot better than in previous versions, and in x64 mode there is also user mode 
> scheduling (UMS) system and the library built on top of it (ConcRT), which 
> gets you almost all of the benefits of fibers but you get to use 'real' 
> threads, plus the added bonus of being able to switch to another thread when 
> you stall on a page fault or block on a kernel object (something fiber's 
> can't do).

I've thought about giving fibers their own TLS so D could have "real" user 
space threads. It would allow us to make the thread count in apps substantially 
higher if everything were a fiber and std.concurrency receive, for example, 
performed a context switch instead of blocking. 

Reply via email to