Perbezaan antara utas golang dan coroutine: 1. Kaedah penjadualan yang berbeza dijadualkan mengikut potongan masa CPU, dan coroutine dijadualkan oleh penjadual masa jalan 2. Strategi penjadualan adalah berbeza penjadualan dan penjadualan koperasi coroutine; 3. Kelajuan pensuisan konteks adalah berbeza, kelajuan penukaran benang adalah kira-kira 1 hingga 2 mikrosaat, dan kelajuan pensuisan coroutine adalah kira-kira 0.2 mikrosaat 4. Saiz tindanan adalah berbeza, dan saiz tindanan; biasanya 8MB, dan saiz tindanan coroutine go lalai ialah 2KB.
Persekitaran pengendalian artikel ini: Sistem Windows 10, versi go1.20, komputer dell g3.
Perbezaan antara benang golang dan coroutine:
1 Kaedah penjadualan
Benang: Benang dijadualkan secara preemptive berdasarkan kepingan masa CPU. Sistem pengendalian melakukan penukaran konteks benang melalui isyarat gangguan (gangguan pemasa, gangguan peranti I/O, dsb.). Apabila suis konteks benang berlaku, ia perlu dipindahkan daripada mod pengguna sistem pengendalian ke mod kernel dan maklumat status disimpan apabila beralih ke utas seterusnya untuk dilaksanakan, maklumat status perlu dimuatkan dan dipindahkan daripada mod kernel kepada mod pengguna sistem pengendalian.
Coroutine: Coroutine wujud dalam mod pengguna dan dijadualkan oleh penjadual masa jalan bahasa pergi. Coroutine tergolong dalam urutan tertentu Berbilang coroutine boleh dijadualkan menjadi satu thread. Satu coroutine juga boleh ditukar kepada berbilang thread untuk pelaksanaan Oleh itu, coroutine dan thread mempunyai hubungan banyak-ke-banyak (M:N).
2. Strategi penjadualan
Thread: Penjadualan preemptive. Untuk mengimbangi kitaran pelaksanaan setiap utas, penjadual sistem pengendalian secara berkala akan menghantar isyarat gangguan untuk memaksa penukaran konteks benang.
Coroutine: penjadualan kolaboratif. Selepas coroutine mengendalikan tugasnya sendiri, ia boleh secara proaktif memindahkan hak pelaksanaan kepada coroutine lain dan tidak akan didahulukan dengan mudah. Hanya selepas coroutine berjalan terlalu lama, penjadual bahasa go akan secara paksa mendahului pelaksanaannya.
3 Kelajuan penukaran konteks
Thread: Penukaran konteks thread memerlukan penukaran antara mod pengguna sistem pengendalian dan mod kernel, dan kelajuan pensuisan adalah kira-kira 1 hingga 2 mikrosaat.
Coroutine: Coroutine ialah utas ringan dalam mod pengguna Penukaran coroutine tidak memerlukan penukaran antara mod pengguna dan mod kernel, dan hanya beberapa nilai status perlu disimpan semasa menukar, jadi penukaran. kelajuan adalah Beberapa kali lebih pantas, kira-kira 0.2 mikrosaat. (Kira-kira 10 kali lebih cepat daripada penukaran benang)
4. Saiz tindanan
Benang: Saiz tindanan pada umumnya ditentukan apabila ia dibuat, untuk linux dan mac Saiz tindanan lalai biasanya 8MB (boleh dilihat melalui ulimit -s). 2000 utas memerlukan 16G memori maya.
Coroutine: Saiz tindanan go coroutine lalai ialah 2KB dan memori maya 16G boleh mencipta lebih daripada 8 juta coroutine. Dalam amalan, adalah perkara biasa untuk melihat kewujudan beribu-ribu coroutine.
Atas ialah kandungan terperinci Apakah perbezaan antara benang golang dan coroutine?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!