Boost - Asio - Asynchronous IO
Boost - Asio - Asynchronous IO
Boost.Asio
What are asynchronous operations?
When shall I use Boost.Asio (and not threads)?
How do I use Boost.Asio?
How does Boost.Asios architecture look like?
What else do I need to know about Boost.Asio?
Boris Schling, boris@highscore.de
Meeting C++, Dsseldorf, 10 November 2012
Asynchronous operations
do_sync()
do_async (&done)
event_loop()
done()
Your code
Asynchronous I/O with Boost.Asio
do_async (&done)
event_loop()
done()
Your code
Asynchronous I/O with Boost.Asio
block()
Your code
Asynchronous I/O with Boost.Asio
boost::asio::deadline_timer timer(io_service,
boost::posix_time::seconds(5));
timer.async_wait(handler);
io_service.run();
Asynchronous operations
deadline_timer
ip::tcp::acceptor
ip::tcp::resolver
ip::tcp::socket
Boost.Asio terminology
Boost.Asio terminology
deadline_timer
io_service
Boost.Asio architecture
I/O service A
I/O service B
I/O object 1
I/O object 2
I/O object 3
10
Boost.Asio architecture
boost::asio::
stream_socket_service
boost::asio::
deadline_timer_service
boost::asio::
io_service
boost::asio::ip::tcp::
basic_stream_socket
boost::asio::ip::tcp::
basic_socket_iostream
boost::asio::
basic_deadline_timer
11
...
boost::asio::io_service io_service;
boost::asio::deadline_timer timer1(io_service,
boost::posix_time::seconds(5));
boost::asio::deadline_timer timer2(io_service,
boost::posix_time::seconds(5));
timer1.async_wait(handler);
timer2.async_wait(handler);
io_service.run();
...
12
...
boost::asio::io_service io_service;
boost::asio::deadline_timer timer(io_service,
boost::posix_time::seconds(5));
timer.async_wait(handler);
boost::thread t([&io_service]{ io_service.run(); });
io_service.run();
t.join();
...
13
...
boost::asio::io_service::strand strand(io_service);
timer1.async_wait(strand.wrap(handler));
timer2.async_wait(strand.wrap(handler));
boost::thread t([&io_service]{ io_service.run(); });
io_service.run();
t.join();
...
14
...
boost::asio::io_service io_service;
boost::asio::io_service::work work(io_service);
io_service.run();
...
15
More information
Boost.Asio documentation:
http://www.boost.org/libs/asio/
BoostCon presentations:
http://boostcon.boost.org/presentations/
Thinking asynchronously (Chris Kohlhoff, 2011)
Creating Boost.Asio extensions (Boris Schling, 2011)
Online book:
http://en.highscore.de/cpp/boost/asio.html
http://www.highscore.de/cpp/boost/asio.html (German)
http://zh.highscore.de/cpp/boost/asio.html (Chinese)
16