Rumah >pembangunan bahagian belakang >C++ >Bilakah `boost::asio::io_service::run()` Sekat?

Bilakah `boost::asio::io_service::run()` Sekat?

Linda Hamilton
Linda Hamiltonasal
2024-11-11 12:17:03500semak imbas

When Does `boost::asio::io_service::run()` Block?

When Does boost::asio::io_service run Menyekat/Nyahsekat

Tingkah laku menyekat io_service::run() berpunca daripada pengendalian kerja dan pengendalinya. Ia kekal disekat sehingga:

  • Semua kerja telah selesai
  • Tiada lagi pengendali yang tinggal untuk dilaksanakan
  • Perkhidmatan io telah dihentikan via stop()

Mentafsir Frasa "Tiada Lagi Pengendali untuk Menjadi Dihantar"

Apabila io_service::run() menyekat sehingga "tiada lagi pengendali untuk dihantar," ini menandakan bahawa tiada tugas tertunggak dalam bentuk panggilan balik berdaftar.

Tingkah laku dalam Contoh Kod

Contoh 3a: Menyekat

Dalam contoh pertama (3a), blok io_service dalam run() sehingga ketiga-tiga pengendali pengiraan Fibonacci yang disiarkan telah dilaksanakan.

Aliran Pelaksanaan Terperinci:

  1. io_service::kerja dicipta untuk mengelakkan pemulangan segera dari run().
  2. Urut pekerja dilancarkan untuk menjalankan io_service gelung.
  3. Pengendali untuk pengiraan Fibonacci disiarkan.
  4. io_service::work ditetapkan semula, membenarkan run() keluar.
  5. Urut pekerja bercantum, menunjukkan selesai tugas.

Kod Pelanggan: Asynchronous tetapi Berkesan Synchronous

Kod klien nampaknya menggunakan I/O tak segerak (async_receive), tetapi ia berfungsi secara serentak:

Aliran Pelaksanaan:

  1. async_receive() memulakan tak segerak operasi.
  2. io_service::run() menyekat sehingga operasi selesai atau ralat berlaku.
  3. Kawalan kembali ke urutan panggilan, dan pengendali dilaksanakan.

Rakan Sejawat Segerak:

Operasi segerak yang setara akan be:

boost::asio::error_code error;
std::size_t bytes = socket.receive(buffer, error);
// Execute handler with error and bytes

Garis Panduan Am: Operasi Segerak dan Tak Segerak Asing

Mencampurkan operasi segerak dan tak segerak boleh memperkenalkan kerumitan. Pertimbangkan untuk mengelakkan amalan ini. Dokumentasi Boost.Asio menawarkan cerapan berharga tentang faedah pengaturcaraan tak segerak.

Atas ialah kandungan terperinci Bilakah `boost::asio::io_service::run()` Sekat?. 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