Rumah > masalah biasa > Apakah perbezaan antara benang golang dan coroutine?

Apakah perbezaan antara benang golang dan coroutine?

DDD
Lepaskan: 2023-06-16 13:15:40
asal
1136 orang telah melayarinya

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.

Apakah perbezaan antara benang golang dan coroutine?

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan