On Friday, 8 January 2016 at 16:58:59 UTC, Jin wrote:
Idea: no mutex, no CAS, only one direction queues without any
locks.
My prototype (https://github.com/nin-jin/go.d) is up to 10x
faster than std.concurrency.send/receive
---
writers =512
readers =1
std.concurency milliseconds=1313
jin.go milliseconds=113
---
Realization:
Queue! - buffered static typed channel. One and only one thread
can push data to queue, and one and only one can take data from
queue. Thread blocks when he takes from empty queue and pushes
to fulfilled queue.
Queues! - list of queues with round robin balancing
go! - starts new thread, in future i want to implement
something like goroutine, but i do not understand how yet.
I need some good advice, i am newbie in D :-)
Problems:
For blocking thread i use loop with Thread.sleep - this is bad
decision IMHO.
On my system i can create only up to 1000 threads without
errors. Fibers from core.thread or Tasks from std.parallelism
potentiaдly can resolve this problem, but how to integrate
their gracefully.
API of jin-go can be better?
Which dub modules can help me?
I'm a little worried you have no volatile writes or fences around
your code when you 'publish' an event using head/tail etc. It
looks like it's working but how are you ensuring no compiler/CPU
reordering is ocurring. Does x86_64 actually allow you to get
away with this? I know its memory model is stricter than others...
Cheeers,
A.