Golang (juga dikenali sebagai bahasa Go) ialah bahasa pengaturcaraan berdasarkan bahasa C Sejak beberapa tahun kebelakangan ini, ia telah menarik perhatian ramai dan digunakan secara meluas oleh pembangun. Matlamat reka bentuk Golang adalah untuk meningkatkan kebolehbacaan kod, kebolehselenggaraan, keselarasan dan prestasi. Antaranya, keselarasan Golang adalah salah satu sorotan terbesarnya Ia menggunakan model pengkomputeran Goroutine. Artikel ini akan menjalankan analisis terperinci tentang model penjadualan coroutine di Golang.
1. Pengenalan kepada Goroutine
Dalam bahasa Golang, coroutine ialah utas yang ringan di ruang alamat yang sama dan boleh dikongsi dalam proses yang sama. Coroutine Golang dipanggil Goroutine, yang diuruskan oleh persekitaran masa jalan bahasa Go Ia boleh mencipta sejumlah besar coroutine dalam masa yang sangat singkat dan boleh menjadualkan pelaksanaan coroutine secara automatik.
2. Penciptaan dan pemusnahan Goroutine
Dalam bahasa Golang, anda boleh mencipta coroutine baharu melalui kata kunci go dan mulakan pelaksanaan fungsi:
go func () { // do something }()
Dalam ini contoh, pelaksanaan fungsi tanpa nama (func(){}
) dimulakan melalui kata kunci go, dan pelaksanaan fungsi ini akan dilakukan dalam coroutine baharu. Di Golang, bilangan coroutine diurus oleh persekitaran runtime, yang bermaksud kita tidak perlu mencipta atau memusnahkan coroutine secara manual. Apabila coroutine menyelesaikan pelaksanaan, persekitaran masa jalan memusnahkannya secara automatik.
3. Model penjadualan Goroutine
Coroutine Golang menggunakan model penjadualan M:N. Di mana M mewakili benang fizikal sistem pengendalian, dan N mewakili bilangan Goroutine. Benang M dalam model M:N menyelaraskan pelaksanaan N Goroutines melalui penjadual. Persekitaran masa jalan Golang akan mencipta benang M yang mencukupi berdasarkan situasi sebenar sistem untuk memastikan berbilang coroutine boleh dilaksanakan serentak pada pemproses yang berbeza. Ini bermakna coroutine Golang boleh mencapai keselarasan sebenar dan bukannya berjalan secara berselang-seli pada selang masa yang berbeza.
Penjadual Golang mempunyai tiga jenis: penjadual sistem, penjadual peringkat pengguna dan penjadual rangkaian. Penjadual sistem adalah sebahagian daripada persekitaran masa jalan Golang Ia bertanggungjawab untuk memperuntukkan coroutine kepada utas M dan mengurus penjadualan peringkat sistem. Penjadual peringkat pengguna berjalan dalam konteks kod pengguna dan bertanggungjawab untuk melaksanakan Goroutine yang berbeza secara bergilir-gilir dalam tempoh masa. Penjadual rangkaian digunakan untuk memproses operasi I/O Ia akan memindahkan operasi I/O ke benang M khusus supaya ia tidak akan menjejaskan pemprosesan I/O dalam pelaksanaan coroutine lain.
Dalam model penjadualan Goroutine, Golang akan melaksanakan penjadualan preemptive apabila kod pengguna dilaksanakan. Ini bermakna penjadual Golang akan menghentikan pelaksana Goroutine secara paksa pada satu ketika dan membiarkan Goroutine lain yang menunggu untuk dilaksanakan berjalan. Mod penjadualan ini boleh memastikan keadilan dan menghalang coroutine tertentu daripada menduduki sumber CPU sepanjang masa.
4. Goroutine menyekat dan bangun
Di Golang, coroutine boleh berkomunikasi melalui chan (saluran). chan ialah struktur data yang boleh berkomunikasi antara coroutine yang berbeza Ia boleh menyebabkan coroutine disekat sehingga coroutine lain menghantar mesej kepada chan (dilaksanakan melalui simbol <-
) atau menerima mesej (melalui simbol chanName := <-chan
). > bentuk). Apabila coroutine disekat pada chan, penjadual Golang akan menghentikan pelaksanaan coroutine dan memindahkannya ke baris gilir boleh bangun. Apabila chan penerima coroutine menerima mesej dan meneruskan pelaksanaan, penjadual Golang akan melintasi baris gilir boleh bangun untuk mendapatkan coroutine dan memulihkannya kepada baris gilir pelaksanaan.
5. Ringkasan
Coroutine Golang ialah salah satu sorotan terbesarnya. Ia menggunakan model penjadualan M:N, yang boleh mencapai prestasi yang sangat baik dalam senario serentak. Pada masa yang sama, apabila menggunakan coroutine, anda juga perlu memberi perhatian kepada kaedah komunikasi antara coroutine dan mekanisme menyekat bangun. Apabila menggunakan coroutine, masalah seperti kebuntuan dan kelaparan perlu dielakkan. Oleh itu, apabila menggunakan coroutine Golang, anda perlu memahami sepenuhnya mekanisme penjadualan di belakangnya untuk memastikan kestabilan dan prestasi kod.
Atas ialah kandungan terperinci Analisis terperinci model penjadualan coroutine bagi fungsi Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!