In my app I will receive various events that I would like to process asynchronously in a prioritised order.
I could do this with a boost::asio::io_service
, but my application is single threaded. I don't want to pay for locks and mallocs
you might need for a multi threaded program (the performance cost really is significant to me). I'm basically looking for a boost::asio::io_service
that is written for single threaded execution.
I'm pretty sure I could implement this myself using boost::coroutine
, but before I do, does something like a boost::asio::io_service
that is written for single threaded execution exist already? I scanned the list of boost libraries already and nothing stood out to me
Be aware that you have to pay for synchronization as soon as you use any non-blocking calls of Asio.
Even though you might use a single thread for scheduling work and processing the resulting callbacks, Asio might still have to spawn additional threads internally for executing asynchronous calls. Those will access the io_service
concurrently.
Think of an async_read
on a socket: As soon as the received data becomes available, the socket has to notify the io_service
. This happens concurrent to your main thread, so additional synchronization is required.
For blocking I/O this problem goes away in theory, but since asynchronous I/O is sort of the whole point of the library, I would not expect to find too many optimizations for this case in the implementation.
As was pointed out in the comments already, the contention on the io_service
will be very low with only one main thread, so unless profiling indicates a clear performance bottleneck there, you should not worry about it too much.