Confondu lorsque la méthode d'exécution boost::asio::io_service bloque/débloque
Dans Boost.Asio, io_service::run() La méthode est responsable du traitement du travail et de l’appel des gestionnaires associés au io_service. Lorsqu'un thread appelle run(), il se bloque généralement jusqu'à ce que :
Gestionnaire : Un gestionnaire est une fonction de rappel qui est invoquée lorsqu'une opération asynchrone se termine.
Dans l'exemple 3a :
La méthode io_service::run() bloque les threads de travail jusqu'à ce que les calculs de Fibonacci (gestionnaires) soient terminés. L'objet io_service::work garantit que io_service a toujours du travail à faire, empêchant les threads de travail de se fermer. Une fois le travail terminé, les threads se rejoignent.
Dans le code de la question :
io_service::run() se bloque jusqu'à ce que l'opération de lecture soit terminée. Dès que le gestionnaire de lecture est invoqué, io_service::run() renvoie.
Différences et points clés :
Synchronous vs. Asynchrone
Bien que le code de question utilise des opérations asynchrones, il se comporte efficacement comme du code synchrone car io_service::run() attend la fin de l'opération asynchrone. Mélanger des opérations synchrones et asynchrones peut conduire à de la complexité.
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!