read/write a pipe is slow, but read/write circle-buffer is fast because
its pure user space code and lockless.
memcpy() can be avoid by write the pointer into circle-buffer instead of
write the data itself.
if you care about malloc() cost, you can use pre-allocated memory which
are allocated during initialization.
But in my opinion, the work in thread usually cost much more cpu time
than read/write/malloc. It's not worth paying time on read/write/malloc
when you using multi-threading. In another word, if the work in thread
is not heavy or blocking, I prefer do the work in main thread. Because
"multi-threading" means more complicated development and more bug which
is diffcult to debug, I hate this...
在 2015年02月14日 17:47, Rick van Rein 写道:
Hi Echo,
3) When main thread got a new request, it find an idle worker and write the
request data to the worker's circle-buffer and notify the worker's ev_async.
This is what I’m hoping to avoid — slowing down the master with the read() of
the available data, and causing a need for an extra memcpy() in the worker
threads. This may only work with a modification of libev, and I thought it
would be useful to drive that discussion.
My English is not very good, hope this helpful.
To me, you make a lot of sense :)
Thanks for your response!
-Rick
_______________________________________________
libev mailing list
[email protected]
http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev