boost.asio - asynchronous io
TRANSCRIPT
-
7/23/2019 Boost.asio - Asynchronous IO
1/16
Asynchronous I/O withBoost.Asio
What are asynchronous operations?
When shall I use Boost.Asio (and not threads)?
How do I use Boost.Asio?
How does Boost.Asiosarchitecture look like?
What else do I need to know about Boost.Asio?
Boris Schling, [email protected]
Meeting C++, Dsseldorf, 10 November 2012
-
7/23/2019 Boost.asio - Asynchronous IO
2/16
Asynchronous operations
Asynchronous I/O with Boost.Asio 2
do_sync()
do_async (&done)
event_loop()
done()
A library like Boost.AsioYour code
-
7/23/2019 Boost.asio - Asynchronous IO
3/16
Boost.Asio vs. Boost.Thread
Asynchronous I/O with Boost.Asio 3
do_async (&done)
event_loop()
done()
A library like Boost.AsioYour code
Use asynchronous operations to access re-
sources concurrently outside of your process
-
7/23/2019 Boost.asio - Asynchronous IO
4/16
Boost.Asio vs. Boost.Thread
Asynchronous I/O with Boost.Asio 4
Your code
Use threads to access resources
concurrently in your process
block()
-
7/23/2019 Boost.asio - Asynchronous IO
5/16
Boost.Asio sample program
Asynchronous I/O with Boost.Asio 5
voidhandler(const boost::system::error_code &ec) {}
intmain()
{
boost::asio::io_service io_service;
boost::asio::deadline_timer timer(io_service,
boost::posix_time::seconds(5));
timer.async_wait(handler);
io_service.run();}
-
7/23/2019 Boost.asio - Asynchronous IO
6/16
Boost.Asio sample program
Asynchronous I/O with Boost.Asio 6
boost::asio::deadline_timer timer(io_service,
boost::posix_time::seconds(5));
timer.async_wait(handler);
io_service.run();
async_wait() returns immediately
deadline_timer is one of many classes
in Boost.Asio which make it possible
to call functions asynchronously
run() calls handler after 5 seconds
-
7/23/2019 Boost.asio - Asynchronous IO
7/16
Asynchronous operations
Asynchronous I/O with Boost.Asio 7
deadline_timer
ip::tcp::acceptor
ip::tcp::resolver
ip::tcp::socket
async_wait() to wait until some time is expired
async_accept() to accept TCP/IP connections
async_resolve() to resolve hostnames
async_read_some() and async_write_some()to send and receive data
Boost.Asio provides different classes which turn
different blocking functions into asynchronous functions
-
7/23/2019 Boost.asio - Asynchronous IO
8/16
Boost.Asio terminology
Asynchronous I/O with Boost.Asio 8
voidhandler(const boost::system::error_code &ec) {}
intmain()
{
boost::asio::io_service io_service;
boost::asio::deadline_timer timer(io_service,
boost::posix_time::seconds(5));
timer.async_wait(handler);
io_service.run();}
I/O service object
I/O object
-
7/23/2019 Boost.asio - Asynchronous IO
9/16
Boost.Asio terminology
Asynchronous I/O with Boost.Asio 9
deadline_timer io_service
An I/O object is initialized
with an I/O service object.
It doesnt use the I/O serviceobject thoughit uses
services provided by the I/O
service object.
An I/O service object
provides services to I/O
objects. Think of it as a set ofservicesset because there
is maximum one instance of
each and every service.
While I/O objects and I/O service objects are
visible in user code, I/O services do the hard work
in the background.
-
7/23/2019 Boost.asio - Asynchronous IO
10/16
Boost.Asio architecture
Asynchronous I/O with Boost.Asio 10
I/O service B
I/O service object
I/O service A
I/O object 3I/O object 2I/O object 1
-
7/23/2019 Boost.asio - Asynchronous IO
11/16
Boost.Asio architecture
Asynchronous I/O with Boost.Asio 11
boost::asio::
deadline_timer_service
boost::asio::
io_service
boost::asio::
stream_socket_service
boost::asio::
basic_deadline_timer
boost::asio::ip::tcp::
basic_socket_iostream
boost::asio::ip::tcp::
basic_stream_socket
-
7/23/2019 Boost.asio - Asynchronous IO
12/16
Multiple async operations
Asynchronous I/O with Boost.Asio 12
...
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();...
-
7/23/2019 Boost.asio - Asynchronous IO
13/16
Boost.Asio with threads
Asynchronous I/O with Boost.Asio 13
...
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();
...
-
7/23/2019 Boost.asio - Asynchronous IO
14/16
Synchronization with strand
Asynchronous I/O with Boost.Asio 14
...
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();
...
-
7/23/2019 Boost.asio - Asynchronous IO
15/16
No return with work
Asynchronous I/O with Boost.Asio 15
...
boost::asio::io_service io_service;
boost::asio::io_service::work work(io_service);
io_service.run();
...
-
7/23/2019 Boost.asio - Asynchronous IO
16/16
More information
50 Boost C++ Libraries in 180 minutes 16
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)
JTC1/SC22/WG21 paper N3388:http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3388.pdf
http://www.boost.org/libs/asio/http://boostcon.boost.org/presentations/http://en.highscore.de/cpp/boost/asio.htmlhttp://www.highscore.de/cpp/boost/asio.htmlhttp://zh.highscore.de/cpp/boost/asio.htmlhttp://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3388.pdfhttp://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3388.pdfhttp://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3388.pdfhttp://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3388.pdfhttp://zh.highscore.de/cpp/boost/asio.htmlhttp://www.highscore.de/cpp/boost/asio.htmlhttp://en.highscore.de/cpp/boost/asio.htmlhttp://boostcon.boost.org/presentations/http://boostcon.boost.org/presentations/http://www.boost.org/libs/asio/http://www.boost.org/libs/asio/