Le comportement de blocage de io_service::run() découle de sa gestion du travail et des gestionnaires. Il reste bloqué jusqu'à :
Lorsque io_service::run() bloque jusqu'à ce que "plus de gestionnaires à distribuer", cela signifie qu'il n'y a pas de tâches en suspens sous forme de rappels enregistrés.
Dans le premier exemple (3a), le io_service bloque dans run() jusqu'à ce que les trois gestionnaires de calcul de Fibonacci publiés soient exécutés.
Le code client semble utiliser des E/S asynchrones (async_receive), mais il se comporte efficacement de manière synchrone :
L'opération synchrone équivalente serait :
boost::asio::error_code error; std::size_t bytes = socket.receive(buffer, error); // Execute handler with error and bytes
Le mélange d'opérations synchrones et asynchrones peut introduire de la complexité. Pensez à éviter cette pratique. La documentation Boost.Asio offre des informations précieuses sur les avantages de la programmation asynchrone.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!