Rumah  >  Artikel  >  Apakah coroutine dalam golang

Apakah coroutine dalam golang

小老鼠
小老鼠asal
2023-06-20 16:16:42924semak imbas

Coroutine dalam golang ialah goroutine. Perbezaannya ialah Golang merangkum dan memproses penjadualan goroutine dalam banyak aspek seperti masa jalan dan panggilan sistem Apabila menghadapi pelaksanaan jangka panjang atau panggilan sistem, ia akan secara aktif CPU goroutine semasa dipindahkan supaya goroutine lain boleh dijadualkan dan dilaksanakan secara asli Golang menyokong coroutine dari peringkat bahasa Anda boleh membuat coroutine dengan menambahkan kata kunci pergi di hadapan fungsi atau kaedah.

Apakah coroutine dalam golang

Persekitaran pengendalian tutorial ini: sistem Windows 10, versi go1.20.1, komputer Dell G3.

Untuk coroutine (benang peringkat pengguna), ini adalah telus kepada kernel, iaitu, sistem tidak mengetahui kewujudan coroutine, dan dijadualkan sepenuhnya oleh program keldai sendiri, kerana ia adalah pengguna program itu sendiri mengawal, maka sukar untuk menukar kawalan CPU secara paksa kepada proses/benang lain seperti penjadualan preemptive Biasanya hanya penjadualan kolaboratif boleh dilakukan secara aktif sebelum coroutine lain boleh dikawal.

Perbezaan antara go-routine dan coroutine

Pada asasnya, goroutine ialah coroutine. Perbezaannya ialah Golang merangkum dan memproses penjadualan goroutine dalam banyak aspek seperti masa jalan dan panggilan sistem Apabila menghadapi pelaksanaan jangka panjang atau panggilan sistem, ia akan memindahkan CPU (P) goroutine semasa ke goroutine lain secara aktif dijadualkan dan dilaksanakan, yang bermaksud Golang menyokong coroutine dari peringkat bahasa. Ciri utama Golang ialah ia menyokong coroutine secara asli dari peringkat bahasa Anda boleh membuat coroutine dengan menambahkan kata kunci go di hadapan fungsi atau kaedah.

Perbandingan dalam aspek lain

1. Penggunaan memori

Setiap go-routine (coroutine) menduduki memori yang jauh lebih sedikit daripada benang Java dan C secara lalai.

perjalanan rutin 2KB.

Benang: 8MB.

2. Dari segi overhed penjadualan untuk bertukar antara thread dan go-routine

Dari segi overhead penukaran thread/go-routine, go-routine jauh lebih kecil daripada thread.

Thread: melibatkan penukaran mod (bertukar daripada mod pengguna kepada mod kernel), menyegarkan 16 daftar, PC, SP.. dan daftar lain, dsb.

go-routine: Hanya tiga nilai daftar diubah suai - PC/SP/DX.

2. Prinsip pelaksanaan asas coroutine

Thread ialah objek kernel sistem pengendalian semasa pengaturcaraan berbilang benang, jika terdapat terlalu banyak utas, suis konteks yang kerap akan berlaku kali adalah Perbelanjaan tambahan. Oleh itu, dalam beberapa pengaturcaraan pelayan rangkaian konkurensi tinggi, adalah tidak bijak untuk menggunakan benang untuk menyampaikan sambungan soket. Jadi sistem pengendalian menyediakan model pengaturcaraan tak segerak berdasarkan corak acara. Gunakan sebilangan kecil benang untuk menyediakan sejumlah besar sambungan rangkaian dan /0 operasi. Walau bagaimanapun, penggunaan model pengaturcaraan tak segerak dan berasaskan peristiwa merumitkan penulisan kod program dan sangat terdedah kepada ralat. Oleh kerana benang dijalin, ia juga meningkatkan kesukaran menyelesaikan masalah ralat.

Coroutine ialah urutan yang disimulasikan pada lapisan aplikasi Ia mengelakkan kos tambahan penukaran konteks dan mengambil kira kelebihan berbilang benang. Memudahkan kerumitan program yang sangat serentak. Contohnya, dalam pelayan rangkaian yang sangat serentak, setiap soket disambungkan dan pelayan menggunakan coroutine untuk menyampaikannya. Kod itu sangat jelas. Dan ia mengambil kira prestasi.

Atas ialah kandungan terperinci Apakah coroutine dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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