[asio] Using io_service::poll() without pthread locking and unlocking
I'm using boost::asio to do some TCP socket communication from a single-threaded program. The program performs asynchronous reads and writes and keeps calling io_service::poll() from a busy loop. I noticed from callgrind profiling that a significant portion of time is spent on pthread locking and unlocking from io_service::poll(). If I can get rid of the lock operations, the performance will improve significantly. Is there a way to get io_service to not use locks other than hacking the source code? It's a single-threaded application so the locking is unnecessary. The main reason I'm using asio is for the abstraction that allows me to write clean, simple, code, and hope I don't have to give up performance for simplicity. Josh
Am 29.10.2015 um 11:10 schrieb ☂Josh Chia (谢任中):
I'm using boost::asio to do some TCP socket communication from a single-threaded program. The program performs asynchronous reads and writes and keeps calling io_service::poll() from a busy loop.
I noticed from callgrind profiling that a significant portion of time is spent on pthread locking and unlocking from io_service::poll(). If I can get rid of the lock operations, the performance will improve significantly. Is there a way to get io_service to not use locks other than hacking the source code? It's a single-threaded application so the locking is unnecessary.
The main reason I'm using asio is for the abstraction that allows me to write clean, simple, code, and hope I don't have to give up performance for simplicity.
Josh
Did you try #define BOOST_ASIO_DISABLE_THREADS ?? Stefan -- ---------------------------------------------------------------- /dev/random says: A harp is a nude piano. python -c "print '73746566616e2e6e616577654061746c61732d656c656b74726f6e696b2e636f6d'.decode('hex')" GPG Key fingerprint = 2DF5 E01B 09C3 7501 BCA9 9666 829B 49C5 9221 27AF
I just tried BOOST_ASIO_DISABLE_THREADS and it worked.
On Thu, Oct 29, 2015 at 9:46 PM,
Am 29.10.2015 um 11:10 schrieb ☂Josh Chia (谢任中):
I'm using boost::asio to do some TCP socket communication from a single-threaded program. The program performs asynchronous reads and writes and keeps calling io_service::poll() from a busy loop.
I noticed from callgrind profiling that a significant portion of time is spent on pthread locking and unlocking from io_service::poll(). If I can get rid of the lock operations, the performance will improve significantly. Is there a way to get io_service to not use locks other than hacking the source code? It's a single-threaded application so the locking is unnecessary.
The main reason I'm using asio is for the abstraction that allows me to write clean, simple, code, and hope I don't have to give up performance for simplicity.
Josh
Did you try
#define BOOST_ASIO_DISABLE_THREADS
??
Stefan -- ---------------------------------------------------------------- /dev/random says: A harp is a nude piano. python -c "print '73746566616e2e6e616577654061746c61732d656c656b74726f6e696b2e636f6d'.decode('hex')" GPG Key fingerprint = 2DF5 E01B 09C3 7501 BCA9 9666 829B 49C5 9221 27AF _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
participants (2)
-
stefan.naewe@atlas-elektronik.com
-
☂Josh Chia (谢任中)