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.





Reply via email to