. daripada soalan, sebenarnya, wawancara ini Intipati soalan adalah untuk bertanya: "
Artikel ini akan membawa anda meneroka sebab perubahan dalam model GM dan GMP.
Model GM
Sebelum Go1.1, model penjadualan Go sebenarnya adalah model GM, iaitu, tiada P.Hari ini saya akan membawa anda menyemak reka bentuk yang lepas.
Nyahsulit kod sumber Go1.0Salah satu cara untuk kita memahami sesuatu adalah dengan melihat kod sumber Mari kita lihat langkah utama kod sumber penjadual Go1.0.1 Jianyu:
static void schedule(G *gp) { ... schedlock(); if(gp != nil) { ... switch(gp->status){ case Grunnable: case Gdead: // Shouldn't have been running! runtime·throw("bad gp->status in sched"); case Grunning: gp->status = Grunnable; gput(gp); break; } gp = nextgandunlock(); gp->readyonstop = 0; gp->status = Grunning; m->curg = gp; gp->m = m; ... runtime·gogo(&gp->sched, 0); }
Panggil jadual
kaedah untuk mendapatkan Kunci global.schedlock
方法来获取全局锁。获取全局锁成功后,将当前 Goroutine 状态从 Running(正在被调度) 状态修改为 Runnable(可以被调度)状态。 调用 gput
方法来保存当前 Goroutine 的运行状态等信息,以便于后续的使用。调用 nextgandunlock
方法来寻找下一个可运行 Goroutine,并且释放全局锁给其他调度使用。获取到下一个待运行的 Goroutine 后,将其运行状态修改为 Running。 调用 runtime·gogo
Panggil
nextgandunlock
kaedah untuk mencari Goroutine seterusnya boleh dijalankan dan kunci global dikeluarkan untuk digunakan oleh penjadual lain. 
Panggilruntime·gogo
kaedah , jalankan Goroutine seterusnya untuk dilaksanakan yang baru diperolehi dan masukkan pusingan penjadualan seterusnya.
Memikirkan model GM
Dengan menganalisis kod sumber penjadual Go1.0.1, kita boleh menemui satu perkara yang menarik. Itu adalah penjadual itu sendiri (kaedah jadual di bawah proses biasa, ia tidak akan kembali, iaitu, ia tidak akan menamatkan proses utama).
🎜🎜🎜G-M Model Diagram 🎜🎜🎜 Dia akan terus menjalankan proses penjadualan. GoroutineB mula menjadi Penjadualan, iaitu berjalan. 🎜🎜Sudah tentu ada juga G yang disekat (Blocked). Katakan G sedang membuat beberapa sistem atau panggilan rangkaian, yang akan menyebabkan G terhenti. Pada masa ini, M (benang sistem) akan dimasukkan semula dalam baris gilir kernel, menunggu pusingan baharu bangun. 🎜🎜🎜🎜Kelemahan model GM🎜🎜🎜🎜Pada zahirnya, model GM nampaknya tidak boleh dihancurkan dan sempurna. Tetapi mengapa mengubahnya? 🎜🎜Pada tahun 2012, Dmitry Vyukov menerbitkan artikel "Dokumen Reka Bentuk Penjadual Go Scalable", yang masih menjadi sasaran utama artikel penyelidikan utama pada penjadual Go Dia menerangkan sebab dan pertimbangan keseluruhan dalam artikel tersebut . 🎜Penjadual Goroutine semasa (merujuk kepada model GM Go 1.0) mengehadkan kebolehskalaan program serentak yang ditulis dalam Go, terutamanya pelayan berkemampuan tinggi dan program pengkomputeran selari.
Pelaksanaan mempunyai masalah berikut:
Terdapat mutex global tunggal (Sched.Lock) dan pengurusan negeri berpusat: mutex perlu melindungi semua operasi berkaitan goroutine (penciptaan semula, penyiapan, penyiapan). dll.), yang membawa kepada persaingan kunci yang serius. . - Perkara di atas mungkin mengakibatkan peningkatan kependaman dan overhed tambahan. Setiap M mesti boleh melaksanakan mana-mana G yang boleh dijalankan, terutamanya M yang baru mencipta G.
- Setiap M perlu dicache dalam ingatan (M.mcache):
akan membawa kepada penggunaan sumber yang berlebihan (setiap mcache boleh menyerap 2M cache memori dan cache lain), dan lokaliti data yang lemah. Kerap menyekat/menyahsekat benang: Benang kerap disekat dan dinyahsekat dengan kehadiran syscalls. Ini menambahkan banyak overhed prestasi tambahan. - Model GMP
- Untuk menyelesaikan banyak masalah model GM di atas, dalam Go1.1, Dmitry Vyukov menambah komponen P (Pemproses) baharu berdasarkan model GM. Dan melaksanakan algoritma Curi Kerja untuk menyelesaikan beberapa masalah yang baru dijana.
Kawan-kawan yang rasa bagus boleh ambil perhatian, saya takkan ulang kat sini.

Apakah perubahan yang akan dibawanya
Setiap P mempunyai baris gilir tempatan sendiri, yang sangat mengurangkan pergantungan langsung pada baris gilir global Hasilnya adalah pengurangan dalam persaingan kunci. Sebahagian besar overhed prestasi model GM ialah persaingan kunci.
Pada baki relatif setiap P, algoritma Work Stealing juga dilaksanakan dalam model GMP Jika baris gilir tempatan P kosong, G yang boleh dijalankan akan dicuri daripada baris gilir global atau baris gilir tempatan. P lain untuk dijalankan, mengurangkan melahu dan meningkatkan penggunaan sumber.
Mengapa kawan -kawan boleh dikelirukan pada masa ini untuk M Fungsi serupa boleh dicapai
Kenapa tambah komponen P lagi?Digabungkan dengan kedudukan M (benang sistem), jika anda melakukan ini, terdapat masalah berikut.
Secara umumnya, bilangan M akan lebih daripada P. Seperti dalam Go, had maksimum bilangan M ialah 10000, dan nombor lalai P ialah bilangan teras CPU. Di samping itu, disebabkan sifat M, iaitu jika terdapat panggilan penyekat sistem yang menghalang M dan tidak mencukupi, M akan terus meningkat.- Jika M terus meningkat, jika baris gilir tempatan dipasang pada M, bermakna baris gilir tempatan juga akan meningkat dengan sewajarnya. Ini jelas tidak munasabah, kerana pengurusan baris gilir tempatan akan menjadi rumit dan prestasi Curi Kerja akan berkurangan dengan ketara.
- M Selepas disekat oleh panggilan sistem, kami berharap dapat memperuntukkan tugas yang tidak dilaksanakan kepada orang lain untuk terus berjalan, dan bukannya menyebabkan segala-galanya terhenti sebaik sahaja ia disekat.
- Oleh itu, adalah tidak munasabah untuk menggunakan M. Kemudian memperkenalkan komponen baru P dan mengaitkan baris gilir tempatan kepada P dapat menyelesaikan masalah ini dengan baik.
Hanya apabila anda tahu apa yang sedang berlaku dan mengapa ia berlaku, anda boleh memecahkan keadaan.
Atas ialah kandungan terperinci Penemuduga Goodbye Go: Model GMP, kenapa ada P?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Golang dan C masing-masing mempunyai kelebihan sendiri dalam pertandingan prestasi: 1) Golang sesuai untuk kesesuaian tinggi dan perkembangan pesat, dan 2) C menyediakan prestasi yang lebih tinggi dan kawalan halus. Pemilihan harus berdasarkan keperluan projek dan tumpukan teknologi pasukan.

Golang sesuai untuk pembangunan pesat dan pengaturcaraan serentak, manakala C lebih sesuai untuk projek yang memerlukan prestasi yang melampau dan kawalan asas. 1) Model Concurrency Golang memudahkan pengaturcaraan konvensyen melalui goroutine dan saluran. 2) Pengaturcaraan templat C menyediakan kod generik dan pengoptimuman prestasi. 3) Koleksi sampah Golang adalah mudah tetapi boleh menjejaskan prestasi. Pengurusan memori C adalah rumit tetapi kawalannya baik -baik saja.

Goimpactsdevelopmentpositivielythroughspeed, efficiency, andsimplicity.1) Speed: goCompilesquicklyandrunsefficiently, idealforlargeproject.2) Kecekapan: ITSComprehensivestandardlibraryraryrarexternaldependencies, enhingdevelyficiency.

C lebih sesuai untuk senario di mana kawalan langsung sumber perkakasan dan pengoptimuman prestasi tinggi diperlukan, sementara Golang lebih sesuai untuk senario di mana pembangunan pesat dan pemprosesan konkurensi tinggi diperlukan. Kelebihan 1.C terletak pada ciri-ciri perkakasan dan keupayaan pengoptimuman yang tinggi, yang sesuai untuk keperluan berprestasi tinggi seperti pembangunan permainan. 2. Kelebihan Golang terletak pada sintaks ringkas dan sokongan konvensional semulajadi, yang sesuai untuk pembangunan perkhidmatan konvensional yang tinggi.

Golang cemerlang dalam aplikasi praktikal dan terkenal dengan kesederhanaan, kecekapan dan kesesuaiannya. 1) Pengaturcaraan serentak dilaksanakan melalui goroutine dan saluran, 2) Kod fleksibel ditulis menggunakan antara muka dan polimorfisme, 3) memudahkan pengaturcaraan rangkaian dengan pakej bersih/HTTP, 4) Membina crawler serentak yang cekap, 5) Debugging dan mengoptimumkan melalui alat dan amalan terbaik.

Ciri -ciri teras GO termasuk pengumpulan sampah, penyambungan statik dan sokongan konvensional. 1. Model keseragaman bahasa GO menyedari pengaturcaraan serentak yang cekap melalui goroutine dan saluran. 2. Antara muka dan polimorfisme dilaksanakan melalui kaedah antara muka, supaya jenis yang berbeza dapat diproses secara bersatu. 3. Penggunaan asas menunjukkan kecekapan definisi fungsi dan panggilan. 4. Dalam penggunaan lanjutan, kepingan memberikan fungsi saiz semula dinamik yang kuat. 5. Kesilapan umum seperti keadaan kaum dapat dikesan dan diselesaikan melalui perlumbaan getest. 6. Pengoptimuman prestasi menggunakan objek melalui sync.pool untuk mengurangkan tekanan pengumpulan sampah.

Pergi bahasa berfungsi dengan baik dalam membina sistem yang cekap dan berskala. Kelebihannya termasuk: 1. Prestasi Tinggi: Disusun ke dalam Kod Mesin, Kelajuan Berjalan Cepat; 2. Pengaturcaraan serentak: Memudahkan multitasking melalui goroutine dan saluran; 3. Kesederhanaan: sintaks ringkas, mengurangkan kos pembelajaran dan penyelenggaraan; 4. Cross-Platform: Menyokong kompilasi silang platform, penggunaan mudah.

Keliru mengenai penyortiran hasil pertanyaan SQL. Dalam proses pembelajaran SQL, anda sering menghadapi beberapa masalah yang mengelirukan. Baru-baru ini, penulis membaca "Asas Mick-SQL" ...


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa