strand -w390 > ; strand . strand, :
io_service , , . , socket " ". , :
buffer1.resize(11);
buffer2.resize(7);
buffer3.resize(8);
socket.async_read_some(boost::asio::buffer(buffer1), handler1);
socket.async_read_some(boost::asio::buffer(buffer2), handler2);
socket.async_read_some(boost::asio::buffer(buffer3), handler3);
:
handler1 , buffer1 "Strawberry"handler2, buffer2 ""handler3, buffer3 "" .
, , . strand.
Asio Proactor [1] . . . :
socket.async_read_some(buffer, handler);
, async_read_some handler. StreamSocketService:
- , , StreamSocketService
handler io_service - , , Asio, .
io_service, , Asio. Asio , handler io_service
io_service , , io_service, handler. .
, , . FIFO (, , ..). networking-ts, Asio, :
the buffers , . .
:
socket.async_read_some(buffer1, handler1);
socket.async_read_some(buffer2, handler2);
op1 op2, buffer1 , , , buffer2, handler2 handler1.
. , async_read(), , stream.async_read_some().
, async_read_some(), , async_read_some() , - async_read , :
, (, async_read, async_read_some , ), .
, - , .
, async_read() 26 :
buffer.resize(26);
boost::asio::async_read(socket, boost::asio::buffer(buffer), handler);
"", "" , "" , async_read() socket.async_read_some(). , :
async_read_some() 11 , "Strawberry", , 0. 26 , async_read_some()async_read_some() 7 , "" , 11. 26 , async_read_some()async_read_some() 8 , "" . , 18. 26 , handler io_service
handler, buffer " ".
Strand
strand . :
- strand
s f1, s s.post() s.dispatch(), s.running_in_this_thread() == falsef2, s s.post() s.dispatch(), s.running_in_this_thread() == false
concurrency, f1 f2 . , f1 f2, f1 f2.
auto wrapped_handler1 = strand.wrap(handler1);
auto wrapped_handler2 = strand.wrap(handler2);
socket.async_read_some(buffer1, wrapped_handler1);
socket.async_read_some(buffer2, wrapped_handler2);
op1 op2, buffer1 , , , buffer2, , wrapped_handler1 wrapped_handler2 . strand , :
handler1 handler2wrapped_handler1 wrapped_handler2, handler1 handler2wrapped_handler2 wrapped_handler1, handler2 handler1
, strand . strand , FIFO. , , io_service. strand FIFO, , , , io_service.
, , asio_handler_invoke() (.. strand) . question.
1. [POSA2] . ., , 2. Wiley, 2000.