Rumah >pembangunan bahagian belakang >Golang >Bagaimana jadual di golang

Bagaimana jadual di golang

PHPz
PHPzasal
2023-05-16 09:28:37673semak imbas

Golang ialah bahasa pengaturcaraan yang cekap dan boleh dipercayai yang digunakan secara meluas dalam pengaturcaraan serentak dan pengaturcaraan rangkaian kerana prestasi cemerlangnya dan model benang ringan. Di Golang, penjadual adalah salah satu teras model konkurensinya dan memainkan peranan penting. Artikel ini terutamanya memperkenalkan cara penjadual Golang dilaksanakan dan cara menjadualkannya.

1. Bagaimana untuk melaksanakan penjadual Golang?

Penjadual Golang menggunakan model benang M:N (M mewakili bilangan benang kernel, N mewakili bilangan goroutin). Fungsi utama penjadual adalah untuk menjadualkan sejumlah besar goroutine pada sebilangan kecil utas OS dan memastikan kerjasama dan penyegerakan data antara mereka. Pelaksanaan model ini memerlukan dua komponen teras: penjadual dan goroutine.

1. Penjadual

Penjadual di Golang ialah sekeping kod yang dijalankan dalam urutan OS bebas Ia bertanggungjawab terutamanya untuk peruntukan masa CPU dan penjadualan goroutine. Fungsi utama penjadual adalah untuk menjadualkan goroutine untuk dijalankan pada utas OS, mengawal susunan pelaksanaan dan peruntukan hirisan masa bagi gorouti, dan mengurus sumber seperti memori. Penjadual ialah teras model konkurensi Golang, dan pelaksanaannya melibatkan tiga aspek berikut:

(1) Strategi penjadualan: Strategi penjadualan Golang adalah berdasarkan penjadualan awalan Apabila operasi IO berlaku dalam goroutine yang sedang berjalan Atau apabila memanggil operasi menyekat seperti time.Sleep, urutan OS semasa akan berhenti menjalankan goroutine dan mencipta urutan OS baharu untuk menjalankan goroutin lain.

(2) Baris gilir tugas: Penjadual Golang menggunakan baris gilir tugas untuk menyimpan semua gorout yang menunggu untuk dilaksanakan Apabila urutan OS terbiar muncul, penjadual mengambil tugasan seterusnya daripada baris gilir tugas dan meletakkannya Ditugaskan kepada OS benang untuk pelaksanaan.

(3) Pengurusan benang: Golang menggunakan model benang M:N untuk mengurus benang OS dan goroutin. M mewakili bilangan tetap benang yang diselenggara secara dalaman oleh sistem, dan N mewakili jumlah bilangan goroutin yang dibuat oleh pengguna. Bilangan M diuruskan secara automatik oleh sistem, manakala N dicipta oleh pembangun mengikut keperluan.

2.goroutine

goroutine Golang ialah benang ringan, yang boleh dianggap sebagai cara yang lebih cekap untuk melaksanakan benang. Goroutine dicipta dan dimusnahkan lebih cepat daripada benang dan menggunakan lebih sedikit memori. Pelaksanaan dan penjadualan Goroutine dikawal sepenuhnya oleh penjadual, jadi pembangun hanya perlu menumpukan pada menulis goroutine.

Selain itu, goroutine Golang juga telah membuat banyak pengoptimuman dari segi penjadualan yang dioptimumkan, perkongsian memori dan pengesanan kebuntuan.

2. Bagaimanakah jadual penjadual Golang?

Penjadual Golang adalah berdasarkan penjadualan preemptive, yang bermaksud apabila goroutine sedang melaksanakan, jika ia menyekat, penjadual akan segera menghentikan goroutine dan menukarnya kepada goroutine lain yang menunggu untuk dilaksanakan . Apabila urutan OS baharu tersedia, penjadual akan menetapkan semula tugasan kepada utas OS baharu, dengan itu membolehkan penukaran pantas antara berbilang tugas.

Untuk lebih memahami cara penjadual Golang melaksanakan penjadualan, beberapa mekanisme utama Golang akan diperkenalkan di bawah:

1 Penjadualan Goroutine

Golang's goroutine boleh terganggu. Penjadual akan memasukkan pusat pemeriksaan khas dalam goroutine dan menyemak sama ada terdapat goroutin baharu yang perlu dijalankan di pusat pemeriksaan. Apabila penjadual mengesan bahawa goroutine terganggu, ia menghentikan goroutine dan beralih kepada goroutine lain menunggu untuk dilaksanakan sehingga goroutine tersedia semula.

2. Penjadualan Tugasan

Penjadual Golang menggunakan baris gilir tugas untuk menyimpan semua goroutin yang menunggu untuk dilaksanakan. Apabila urutan OS baharu muncul, penjadual akan mengambil tugas seterusnya daripada baris gilir tugas dan menetapkannya kepada utas OS untuk dilaksanakan. Peranan baris gilir tugas adalah untuk memastikan tugasan dilaksanakan dengan teratur tanpa sebarang konflik.

3. Penjadualan Menyekat

Apabila goroutine disekat, ia akan digantung oleh penjadual dan beratur untuk menunggu pelaksanaan lengkap. Penjadual akan menetapkan status goroutine kepada "disekat" dan meletakkannya dalam baris gilir menyekat. Apabila goroutine tersedia semula, penjadual menugaskannya semula kepada urutan OS baharu untuk dilaksanakan.

4. Penjadualan preemptive

Penjadual Golang adalah berdasarkan penjadualan preemptive, yang bermaksud apabila goroutine berjalan berlaku operasi IO atau memanggil operasi menyekat seperti masa. Tidur, Penjadual akan serta-merta hentikan goroutine dan tukar kepada goroutine lain menunggu untuk dilaksanakan. Pendekatan ini memastikan bahawa semua tugas boleh dilaksanakan dalam masa yang sesingkat mungkin dan mengurangkan kemungkinan suis konteks.

Ringkasan

Artikel ini memperkenalkan cara penjadual Golang dilaksanakan dan dijadualkan, termasuk dua komponen teras penjadual dan goroutine, serta mekanisme penting penjadual, seperti baris gilir tugas , penjadualan awalan, dsb. Mekanisme ini memastikan model konkurensi Golang mempunyai prestasi dan kebolehpercayaan yang cemerlang serta sesuai untuk pelbagai senario konkurensi tinggi. Sebagai bahasa yang popular, penjadual Golang berkait rapat dengan prestasi cemerlang dan kebolehpercayaannya, dan juga merupakan isu yang sangat penting untuk pembangun.

Atas ialah kandungan terperinci Bagaimana jadual di 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
Artikel sebelumnya:golang tak masukArtikel seterusnya:golang tak masuk