Rumah  >  Artikel  >  pembangunan bahagian belakang  >  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
Barbara Streisandasal
2024-11-10 22:07:03187semak imbas

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:
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