Konkurensi pada peringkat bahasa Go bermaksud menggunakan bahasa Go untuk melaksanakan berbilang tugas dalam tempoh masa yang sama dalam bahasa Go dicapai melalui goroutine adalah serupa dengan urutan dan tergolong dalam urutan mod pengguna. Beribu-ribu boleh dibuat mengikut keperluan Puluhan ribu goroutine berfungsi serentak.
Persekitaran pengendalian artikel ini: Sistem Windows 10, versi go1.20, komputer dell g3.
Konkurensi pada tahap bahasa go bermaksud menggunakan bahasa go untuk melaksanakan berbilang tugas pada masa yang sama.
Konkurensi ialah konsep yang sangat penting dalam pengaturcaraan bahasa Go sememangnya menyokong konkurensi pada peringkat bahasa.
Konkurensi dan selari
Konkurensi: melaksanakan berbilang tugas dalam tempoh masa yang sama (contohnya: berbual dengan dua teman wanita menggunakan WeChat).
Sejajar: Laksanakan berbilang tugas pada masa yang sama (contohnya: anda dan rakan anda sedang bersembang dengan teman wanita anda di WeChat).
Konkurensi dalam bahasa Go direalisasikan melalui goroutine adalah serupa dengan utas (benang dan proses adalah konsep yang diperoleh daripada sistem pengendalian. Proses adalah bersamaan dengan bengkel besar, dan CPU bersamaan dengan kilang. Terdapat banyak bengkel di kilang , proses membahagikan kilang kepada bengkel dibahagikan kepada proses, seperti pekerja dan pelbagai sumber dalam proses. Beribu-ribu goroutine berfungsi serentak. Goroutine dijadualkan mengikut masa jalan bahasa Go, dan urutan kedua dijadualkan oleh sistem pengendalian.
Bahasa Go juga menyediakan saluran untuk berkomunikasi antara berbilang goroutin. Goroutine dan saluran ialah asas pelaksanaan yang penting untuk bahasa Go untuk mematuhi CSP (menggalakkan komunikasi melalui memori dikongsi dan bukannya komunikasi melalui memori dikongsi) mod konkurensi
Sambungan:
goroutine
Serupa dengan urutan, dilaksanakan pada peringkat bahasa dan dijalankan pada urutan sistem pengendalian.
Groutine mesti sepadan dengan fungsi dan berbilang goroutin boleh dibuat untuk melaksanakan fungsi yang sama.
Sangat mudah untuk menggunakan goroutine dalam go Apabila memanggil fungsi, tambahkan kata kunci go di hadapan untuk mencipta goroutine untuk fungsi.
Mulakan satu goroutine:
package main import ( "fmt" "sync" ) var wg sync.WaitGroup //WaitGroup等待方法 // goroutine demo func hello(i int){ fmt.Println("Hello hello",i) wg.Done() //此方法如果运行 ,通知wg把计数器 -1 } func main() { // 开启一个主goroutine去执行mian函数 wg.Add(10000)//(计数器)只有一个小弟为1,等待wg.Done()后-1,为0时停止等待 for i:=0; i<10000;i++{ //wg.Add(1) 可以给定10000个goroutine 也可以,每次循环+1 go hello(i) // 开启了一个独立的 goroutine去执行hello这个函数 } fmt.Println("Hello main") // 让我们的主goroutine 等待 goroutine 小弟 执行 // 如果不等待,独立的goroutine小弟,可能小弟这个goroutine还没有运行 //time.Sleep(time.Second) 第二种等待 wg.Wait()//等待所有小弟干完活 }
Perbezaan antara goroutine dan benang
Benang OS (benang sistem pengendalian) mempunyai memori tindanan tetap ( Biasanya 2MB ), timbunan goroutine hanya mempunyai timbunan kecil pada permulaan kitaran hayatnya (biasanya 2KB Timbunan goroutine tidak tetap Ia boleh membesar dan mengecut mengikut keperluan jarang sehingga 1GB. Oleh itu, adalah mungkin untuk mencipta kira-kira 100,000 grorutin pada satu masa dalam bahasa Go.
Atas ialah kandungan terperinci Apakah maksud konkurensi pada peringkat bahasa go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!