Swoole ialah rangka kerja komunikasi rangkaian berprestasi tinggi yang dibangunkan berdasarkan bahasa PHP Ia boleh menyediakan pelbagai kaedah pengaturcaraan seperti asynchronous, coroutine dan concurrency, membolehkan pembangun menulis aplikasi rangkaian dengan lebih cekap.
Dalam Swoole, penjadual coroutine ialah salah satu komponen terasnya Ia bertanggungjawab untuk penciptaan, penjadualan dan kitar semula coroutine, dan merupakan salah satu kunci untuk mencapai prestasi tinggi dalam Swoole.
Jadi, bagaimanakah penjadual coroutine Swoole berfungsi? Dalam artikel ini, kita akan menyelidiki cara penjadual coroutine Swoole beroperasi.
1. Coroutine
Sebelum kita memahami penjadual coroutine Swoole secara mendalam, mari kita fahami dahulu apa itu coroutine.
Coroutine ialah benang yang ringan Berbanding dengan proses dan benang, ia mempunyai ciri-ciri berikut:
1. Penukaran coroutine tidak bergantung pada kernel dan tidak memerlukan overhed konteks pensuisan, kelajuan pensuisan adalah sangat pantas.
2. Penggunaan memori coroutine adalah lebih kecil daripada penggunaan benang dan proses, dan lebih banyak coroutine boleh dibuat pada masa yang sama.
3. Dalam model I/O tak segerak, coroutine lebih sesuai untuk senario aplikasi intensif IO dan boleh menggunakan sumber dengan lebih baik.
4. Coroutine bukan preemptif Hanya satu coroutine boleh dijalankan pada masa yang sama Sebaik sahaja coroutine melakukan operasi IO atau secara aktif melepaskan kawalan, ia akan beralih kepada coroutine lain untuk dilaksanakan.
Coroutine dalam bahasa PHP biasanya perlu menggunakan kata kunci hasil, yang bermaksud bahawa coroutine menyerah, melepaskan kawalan dan menunggu pelaksanaan coroutine lain atau mencetuskan peristiwa IO.
2. Coroutine Scheduler
Swoole coroutine scheduler ialah rangkaian hijau yang berjalan dalam mod pengguna dan boleh mencapai penjadualan berbilang tugas dengan menukar sumber coroutine dan penjadualan dengan sangat cekap dan web berprestasi tinggi aplikasi.
Penjadual coroutine akan mencipta tindanan coroutine (coroutine_stack) setiap kali ia dilaksanakan, dan akan menyimpan konteks (konteks) ke tindanan coroutine, dan kemudian memuatkan semula konteks apabila coroutine perlu menyambung semula pelaksanaan .
Kaedah penjadualan penjadual coroutine adalah bukan preemptif Hanya apabila mungkin untuk bertukar kepada coroutine lain untuk pelaksanaan, coroutine semasa akan secara aktif melepaskan kawalan dan penjadual akan melaksanakan operasi penukaran coroutine.
Perlu diambil perhatian bahawa penjadual coroutine Swoole membungkus IO rangkaian asas melalui coroutine untuk mencapai kesan penukaran coroutine, dan bukannya multi-threading dalam erti kata sebenar. Swoole menggunakan Epoll atau Kqueue di lapisan bawah untuk tinjauan acara dan penggunaan semula IO, dan bekerjasama dengan mekanisme pensuisan coroutine untuk meningkatkan prestasi aplikasi rangkaian intensif I/O.
3. Prinsip operasi
Prinsip operasi penjadual coroutine Swoole boleh dibahagikan kepada tiga langkah: penciptaan coroutine, penukaran coroutine dan kitar semula coroutine.
1. Proses penciptaan Coroutine
Apabila program Swoole mula dilaksanakan, penjadual coroutine juga mula berfungsi. Apabila coroutine dibuat, penjadualan coroutine akan terlebih dahulu memperuntukkan coroutine_id untuk mewakili ID coroutine, dan kemudian membuka ruang untuk menyimpan maklumat konteks coroutine, termasuk fail yang sedang dilaksanakan, nombor baris semasa, dsb., dan maka maklumat konteks ini disimpan ke dalam struktur data coroutine_stack.
2. Proses penukaran Coroutine
Penjadual coroutine bertanggungjawab untuk bertukar antara berbilang coroutine Sebaik sahaja coroutine diaktifkan atau perlu menunggu acara lain, penjadual coroutine akan bertukar kepada coroutine lain untuk. pelaksanaan. Proses pensuisan ini nampaknya sangat menyusahkan, penjadual coroutine Swoole telah dioptimumkan Anda hanya perlu menyimpan konteks ke timbunan semasa, dan kemudian mulakan timbunan berjalan dari coroutine lain dan anda boleh tukar coroutine.
3. Proses kitar semula Coroutine
Selepas coroutine selesai dijalankan, ingatan perlu dikeluarkan tepat pada masanya Proses kitar semula penjadual coroutine adalah untuk mengesan penggunaan tindanan coroutine. Jika coroutine adalah Jika memori dalam timbunan proses tidak diduduki, ini bermakna coroutine boleh dikitar semula. Apabila mengitar semula, konteks coroutine akan mula-mula dialih keluar daripada penjadual coroutine, kemudian memori dalam tindanan coroutine akan dimusnahkan dan sumber seperti deskriptor fail asas akan dikeluarkan.
4. Ringkasan
Artikel ini memperkenalkan prinsip operasi penjadual coroutine Swoole, termasuk tiga aspek: penciptaan coroutine, penukaran coroutine dan kitar semula coroutine. Dengan mempunyai pemahaman yang mendalam tentang prinsip kerja penjadual coroutine Swoole, anda bukan sahaja dapat memahami dengan lebih baik mekanisme tak segerak, coroutine, acara dan mekanisme lain rangka kerja Swoole, tetapi juga menggunakan Swoole dengan lebih cekap dalam pembangunan sebenar untuk meningkatkan prestasi aplikasi. .
Atas ialah kandungan terperinci Terokai prinsip operasi penjadual coroutine Swoole. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!