Rumah > pembangunan bahagian belakang > C++ > Bilakah `boost::asio::io_service::run()` Menyekat dan Nyahsekat dalam Operasi Asynchronous?

Bilakah `boost::asio::io_service::run()` Menyekat dan Nyahsekat dalam Operasi Asynchronous?

Barbara Streisand
Lepaskan: 2024-11-10 22:07:03
asal
269 orang telah melayarinya

When Does `boost::asio::io_service::run()` Block and Unblock in Asynchronous Operations?

Keliru apabila boost::asio::io_service menyekat/menyahsekat kaedah

Dalam Boost.Asio, io_service::run() kaedah bertanggungjawab untuk memproses kerja dan menggunakan pengendali yang berkaitan dengan io_service. Apabila urutan panggilan run(), ia biasanya akan menyekat sehingga:

  • Semua kerja dan pengendali telah selesai
  • io_service dihentikan (melalui stop())
  • Pengecualian dilemparkan daripada pengendali

Pengendali: A pengendali ialah fungsi panggil balik yang digunakan apabila operasi tak segerak selesai.

Dalam Contoh 3a:
Kaedah io_service::run() menyekat urutan pekerja sehingga pengiraan Fibonacci ( pengendali) telah selesai. Objek io_service::work memastikan bahawa io_service sentiasa mempunyai kerja yang perlu dilakukan, menghalang benang pekerja daripada keluar. Apabila kerja selesai, utas bercantum.

Dalam Kod Soalan:
io_service::run() menyekat sehingga operasi baca selesai. Sebaik sahaja pengendali baca dipanggil, io_service::run() kembali.

Perbezaan dan Perkara Utama:

  • Contoh 3a menggunakan io_service::work untuk menghalang io_service::run() daripada kembali serta-merta kerana kekurangan kerja.
  • Kod Soalan tidak tidak menggunakan io_service::work.
  • Kedua-dua contoh bergantung pada operasi tak segerak untuk melaksanakan pengiraan Fibonacci.
  • Dalam Kod Soalan, io_service::run() boleh kembali sebelum operasi tak segerak selesai ( disebabkan oleh penangan itu dipanggil).

Segerak lwn. Tak Segerak

Walaupun Kod Soalan menggunakan operasi tak segerak, ia berkelakuan berkesan seperti kod segerak kerana io_service::run() menunggu untuk operasi tak segerak selesai. Mencampurkan operasi segerak dan tak segerak boleh membawa kepada kerumitan.

Atas ialah kandungan terperinci Bilakah `boost::asio::io_service::run()` Menyekat dan Nyahsekat dalam Operasi Asynchronous?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan