November 10, 2017 Re: How you guys go about -BetterC Multithreading? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Petar Kirov [ZombineDev] | On 09/11/2017 4:00 PM, Petar Kirov [ZombineDev] wrote:
> On Thursday, 9 November 2017 at 13:00:15 UTC, ParticlePeter wrote:
>> On Thursday, 9 November 2017 at 12:19:00 UTC, Petar Kirov [ZombineDev] wrote:
>>> On Thursday, 9 November 2017 at 11:08:21 UTC, ParticlePeter wrote:
>>>> Any experience reports or general suggestions?
>>>> I've used only D threads so far.
>>>
>>> It would be far easier if you use druntime + @nogc and/or de-register latency-sensitive threads from druntime [1], so they're not interrupted even if some other thread calls the GC. Probably the path of least resistance is to call [2] and queue @nogc tasks on [3].
>>>
>>> If you really want to pursue the version(D_BetterC) route, then you're essentially on your own to use the threading facilities provided by your target OS, e.g.:
>>>
>>> https://linux.die.net/man/3/pthread_create
>>> https://msdn.microsoft.com/en-us/library/windows/desktop/ms682516(v=vs.85).aspx
>>>
>>>
>>> Though you need to be extra careful not to use thread-local storage (e.g. only shared static and __gshared) and not to rely on (shared) static {con|de}structors, dynamic arrays, associative arrays, exceptions, classes, RAII, etc., which is really not worth it, unless you're writing very low-level code (e.g. OS kernels and drivers).
>>>
>>> [1]: https://dlang.org/phobos/core_thread#.thread_detachThis
>>> [2]: https://dlang.org/phobos/core_memory#.GC.disable
>>> [3]: https://dlang.org/phobos/std_parallelism#.taskPool
>>
>> Forgot to mention, I'll try this first, I think its a good first step towards -BetterC usage. But in the end I want to see how far I can get with the -BetterC feature.
>
> In short, the cost / benefit of going all the way version(D_BetterC) is incredibly poor for regular applications, as you end up a bit more limited than with modern C++ (> 11) for prototyping. For example, even writers of D real-time audio plugins don't go as far.
I just did some work for Guillaume Piolat (p0nce author of dplug), guess what is going to be used again, druntime!
|
November 10, 2017 Re: How you guys go about -BetterC Multithreading? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Petar Kirov [ZombineDev] | On Thursday, 9 November 2017 at 16:00:36 UTC, Petar Kirov [ZombineDev] wrote:
>
> In short, the cost / benefit of going all the way version(D_BetterC) is incredibly poor for regular applications, as you end up a bit more limited than with modern C++ (> 11) for prototyping. For example, even writers of D real-time audio plugins don't go as far.
For now we do have some @nogc alternatives for mutex, condition variables, thread-pool, file reading, etc... (dplug:core package) for use with the runtime disabled - the middle ground that's way more usable than -betterC. They may, or not, be applicable to -betterC.
|
November 10, 2017 Re: How you guys go about -BetterC Multithreading? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Guillaume Piolat | On Friday, 10 November 2017 at 11:55:57 UTC, Guillaume Piolat wrote:
> On Thursday, 9 November 2017 at 16:00:36 UTC, Petar Kirov [ZombineDev] wrote:
>>
>> In short, the cost / benefit of going all the way version(D_BetterC) is incredibly poor for regular applications, as you end up a bit more limited than with modern C++ (> 11) for prototyping. For example, even writers of D real-time audio plugins don't go as far.
>
> For now we do have some @nogc alternatives for mutex, condition variables, thread-pool, file reading, etc... (dplug:core package) for use with the runtime disabled - the middle ground that's way more usable than -betterC. They may, or not, be applicable to -betterC.
Interesting, thanks for the info. It looks you made good progress since the last time I read about your project (quite a while ago). I'll be sure to check what you have in dplug:core ;)
|
November 10, 2017 Re: How you guys go about -BetterC Multithreading? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jacob Carlborg | On Thursday, 9 November 2017 at 19:42:55 UTC, Jacob Carlborg wrote:
> On 2017-11-09 17:52, Petar Kirov [ZombineDev] wrote:
>
>> Thanks for reminding me, I keep forgetting that it should just work (minus initialization?).
>
> What do you mean "initialization"?
static constructors
|
November 10, 2017 Re: How you guys go about -BetterC Multithreading? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Petar Kirov [ZombineDev] | On 2017-11-10 14:30, Petar Kirov [ZombineDev] wrote: > static constructors Yeah, those won't work. I don't think that's really related to TLS, hence my confusion. -- /Jacob Carlborg |
November 27, 2017 Re: How you guys go about -BetterC Multithreading? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Guillaume Piolat | On Friday, 10 November 2017 at 11:55:57 UTC, Guillaume Piolat wrote:
> For now we do have some @nogc alternatives for mutex, condition variables, thread-pool, file reading, etc... (dplug:core package) for use with the runtime disabled - the middle ground that's way more usable than -betterC. They may, or not, be applicable to -betterC.
Your thread module (among others) is an amazing read and a very nice starting point for my endeavor. Thanks for pointing me in this direction!
|
Copyright © 1999-2021 by the D Language Foundation