Rumah >pembangunan bahagian belakang >C++ >Bilakah kaedah io_service::run() Boost.Asio dinyahsekat?
Menyekat dan Nyahsekat Syarat
Apabila Boost.Asio's io_service: Kaedah :run() digunakan, ia biasanya menyekat sehingga salah satu daripada syarat berikut dipenuhi:
Perhatikan bahawa run() menyekat apabila tiada lagi pengendali untuk "dihantar "oleh io_service. Pengendali merujuk kepada fungsi panggil balik atau objek pengendali yang digunakan apabila operasi tak segerak yang sepadan selesai. Apabila semua kerja dan pengendali yang dijadualkan telah dilaksanakan, io_service menganggap dirinya melahu tanpa operasi yang belum selesai, yang membawa kepada nyahsekat run().
Contoh 1: Klien TCP/IP Segerak
Dalam kod contoh yang disediakan dalam soalan anda, kaedah run() menyekat kerana ia menunggu operasi baca tak segerak selesai. Soket disediakan untuk menerima data daripada pelayan dan sehingga data diterima dan diproses oleh pengendali handle_async_receive, kaedah run() kekal disekat.
Contoh 2: Kolam Benang Pekerja
Dalam contoh kedua, run() digunakan dalam urutan pekerja. Objek kerja memastikan bahawa io_service kekal aktif walaupun tiada pengendali yang dijadualkan. Apabila pengendali CalculateFib disiarkan ke io_service, ia dilaksanakan oleh urutan pekerja. Apabila ketiga-tiga pengiraan Fibonacci selesai, objek kerja dimusnahkan, menyebabkan io_service berhenti menerima kerja baharu. Ini memberi isyarat kepada benang pekerja bahawa tiada lagi tugasan untuk dilaksanakan, membolehkan mereka ditamatkan. Akibatnya, run() nyahsekat dan utas utama boleh diteruskan.
Perbezaan antara Contoh 1 dan 2
Walaupun kedua-dua contoh menggunakan operasi tak segerak, yang pertama berkelakuan serentak dengan berkesan kerana ia menyekat sehingga data diterima. Dalam contoh kedua, rangkaian pekerja berjalan selari, membenarkan tugasan lain diproses sementara io_service menunggu untuk lebih banyak kerja.
Kendalian Asynchronous dan Synchronous
Secara umum , adalah dinasihatkan untuk mengelak mencampurkan operasi segerak dan tak segerak kerana ia boleh membawa kepada kerumitan dalam kod anda. Kelebihan pengaturcaraan tak segerak termasuk:
Atas ialah kandungan terperinci Bilakah kaedah io_service::run() Boost.Asio dinyahsekat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!