Dalam bahasa Go, goroutine dan benang ialah unit asas pelaksanaan serentak. Secara umumnya, urutan dijadualkan oleh kernel sistem pengendalian, manakala coroutine dijadualkan mengikut masa jalan bahasa Go.
Mari kita lihat dengan lebih dekat beberapa perbezaan antara coroutine dan thread:
- Scheduler
Threads dijadualkan oleh kernel sistem pengendalian, manakala coroutines dijadualkan mengikut masa jalan bahasa Go. Penjadual bahasa Go menggunakan teknologi yang dipanggil penjadualan M:N, iaitu, ia memetakan goroutine M ke urutan N OS untuk dilaksanakan. Ini membolehkan bahasa Go menggunakan CPU berbilang teras dengan cekap sambil mengelakkan overhed penukaran benang.
- Memori dan Prestasi
Setiap urutan memerlukan ruang tindanan bebas dan penukaran konteks di atas kepala. Coroutine dijalankan dalam ruang tindanan yang sama dan kerana penjadual bahasa Go adalah berdasarkan kerjasama, overhed penukaran konteks adalah sangat kecil. Ini menjadikan coroutine lebih ringan daripada benang dan boleh menyokong konkurensi yang lebih tinggi.
- Kunci dan penyegerakan
Dalam pengaturcaraan berbilang benang, memandangkan sumber yang dikongsi boleh diakses oleh berbilang rangkaian pada masa yang sama, kunci dan mekanisme penyegerakan perlu digunakan untuk memastikan ketepatan data. Dalam bahasa Go, memandangkan coroutine dijalankan dalam ruang tindanan yang sama, penyegerakan dan komunikasi data boleh dicapai melalui mekanisme seperti saluran, mengelakkan penggunaan kunci dan menjadikan kod lebih ringkas, mudah dibaca dan mudah ditulis.
- Pengendalian Pengecualian
Pengecualian boleh berlaku dalam kedua-dua rangkaian dan coroutine, tetapi mereka mengendalikan pengecualian secara berbeza. Dalam pengaturcaraan berbilang benang, pengecualian boleh menyebabkan keseluruhan proses ranap. Dalam bahasa Go, pengecualian dianggap sebagai ralat biasa, dan mekanisme penangguhan dan panik/pulih boleh digunakan untuk mengendalikan pengecualian, menjadikan program lebih mantap.
Jadi, walaupun coroutine dan thread adalah kedua-dua unit asas pelaksanaan serentak, kaedah dan ciri pelaksanaannya adalah berbeza. Dalam bahasa Go, coroutine ialah mekanisme konkurensi ringan yang boleh menggunakan sumber pengkomputeran dengan cekap dan mencapai penyegerakan dan komunikasi yang mudah dan berkesan melalui mekanisme seperti saluran.