Gooutine Dijadualkan Bersama: Meneroka Potensi untuk Menyekat Pelaksanaan
Konsep teras di sebalik goroutine ialah penjadualan koperasi mereka, seperti yang diserlahkan dalam blog yang disediakan pos daripada Nindalf. Sifat kerjasama ini membayangkan bahawa gorout pada asasnya mengawal sendiri pelaksanaannya, tanpa bergantung pada gangguan preemptive daripada kernel yang mendasari.
Memandangkan model penjadualan ini, satu persoalan penting timbul: bolehkah goroutin yang gelung selama-lamanya tanpa menghasilkan pelaksanaan secara berkesan menyebabkan orang lain kelaparan goroutine pada urutan yang sama?
Untuk menangani perkara ini soalan, mari kita pertimbangkan coretan kod yang disediakan dalam siaran. Fungsi jumlah hanya mengira dan mencetak jumlah integer sehingga had yang ditentukan.
Apabila melaksanakan kod ini dengan berbilang goroutin, jelas bahawa jika hanya ada satu urutan yang tersedia, goroutin tidak akan berjalan serentak. Sebaliknya, mereka akan melaksanakan secara berurutan, satu demi satu.
Sebab bagi tingkah laku ini terletak pada mekanisme penjadualan koperasi goroutin. Tanpa mata hasil yang jelas, goroutine yang sedang melaksanakan akan terus berbuat demikian sehingga ia menghadapi situasi di mana ia mesti menyerahkan kawalan.
Dalam kod contoh, ketiadaan sebarang operasi menyekat, seperti komunikasi saluran, input rangkaian, atau panggilan sistem, bermakna goroutine akan melaksanakan gelung selama-lamanya. Akibatnya, ia akan memonopoli benang, menghalang goroutine lain daripada dijalankan.
Untuk mengurangkan isu ini, adalah penting untuk memasukkan mata hasil ke dalam pelaksanaan goroutine. Ini boleh dicapai melalui pelbagai mekanisme, termasuk:
Dengan menerima teknik ini, pembangun boleh memastikan bahawa goroutin tidak disekat selama-lamanya, membolehkan pelaksanaan yang lebih seimbang dan cekap dalam persekitaran berbilang benang.
Atas ialah kandungan terperinci Bolehkah Goroutine yang Tidak Mengalah Melaparkan Orang Lain pada Satu Benang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!