Jadual Kandungan
"Model GMP, kenapa ada P?" Soalan ini seperti pemahaman reka bentuk sistem, kerana sekarang ramai yang akan menghafal model GMP atau melaluinya dengan gaya segera untuk menghadapi temuduga. Dan memahami sebab sebenar di sebaliknya adalah apa yang perlu kita pelajari dan fahami. " >"Model GMP, kenapa ada P?" Soalan ini seperti pemahaman reka bentuk sistem, kerana sekarang ramai yang akan menghafal model GMP atau melaluinya dengan gaya segera untuk menghadapi temuduga. Dan memahami sebab sebenar di sebaliknya adalah apa yang perlu kita pelajari dan fahami.
Rumah pembangunan bahagian belakang Golang Penemuduga Goodbye Go: Model GMP, kenapa ada P?

Penemuduga Goodbye Go: Model GMP, kenapa ada P?

Aug 08, 2023 pm 04:31 PM
gmp

. daripada soalan, sebenarnya, wawancara ini Intipati soalan adalah untuk bertanya: "

Dalam model GMP, kenapa G dan M tidak boleh terikat secara langsung? Ia sangat menyusahkan. Mengapa ia sangat menyusahkan? Apa masalahnya. cuba selesaikan?"

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.0

Salah 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);
}
Salin selepas log masuk

  • Panggiljadual kaedah untuk mendapatkan Kunci global. schedlock 方法来获取全局锁。
  • 获取全局锁成功后,将当前 Goroutine 状态从 Running(正在被调度) 状态修改为 Runnable(可以被调度)状态。
  • 调用 gput 方法来保存当前 Goroutine 的运行状态等信息,以便于后续的使用。
  • 调用 nextgandunlock 方法来寻找下一个可运行 Goroutine,并且释放全局锁给其他调度使用。
  • 获取到下一个待运行的 Goroutine 后,将其运行状态修改为 Running。
  • 调用 runtime·gogo
Selepas berjaya memperoleh kunci global, tukar keadaan Goroutine semasa daripada Running (sedang dijadualkan) kepada Runnable (boleh dijadualkan).

Panggil gput kaedah untuk menyimpan Status larian Goroutine semasa dan maklumat lain untuk kegunaan seterusnya.

Panggil nextgandunlock kaedah untuk mencari Goroutine seterusnya boleh dijalankan dan kunci global dikeluarkan untuk digunakan oleh penjadual lain.
Penemuduga Goodbye Go: Model GMP, kenapa ada P?
Selepas memperoleh Goroutine seterusnya untuk dijalankan, tukar status lariannya kepada Running.

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.
Model GMP, dalam artikel sebelum ini "Go group friends bertanya: Berapakah bilangan Goroutine yang sesuai untuk dikawal, adakah ia akan menjejaskan GC dan penjadualan? telah dijelaskan dalam "."

Kawan-kawan yang rasa bagus boleh ambil perhatian, saya takkan ulang kat sini.
Penemuduga Goodbye Go: Model GMP, kenapa ada P?

Apakah perubahan yang akan dibawanya

Apakah perubahan yang akan dibawa selepas menambah P? Mari kita bincangkannya dengan lebih jelas.
  • 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.

Ringkasan

Artikel hari ini menggabungkan beberapa situasi sejarah, analisis sebab dan penerangan penyelesaian bagi keseluruhan penjadual bahasa Go.

"Model GMP, kenapa ada P?" Soalan ini seperti pemahaman reka bentuk sistem, kerana sekarang ramai yang akan menghafal model GMP atau melaluinya dengan gaya segera untuk menghadapi temuduga. Dan memahami sebab sebenar di sebaliknya adalah apa yang perlu kita pelajari dan fahami.

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!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menggunakan PHP dan GMP untuk melaksanakan penyulitan RSA dan algoritma penyahsulitan untuk integer besar Cara menggunakan PHP dan GMP untuk melaksanakan penyulitan RSA dan algoritma penyahsulitan untuk integer besar Jul 28, 2023 pm 05:25 PM

Cara menggunakan PHP dan GMP untuk melaksanakan algoritma penyulitan dan penyahsulitan RSA untuk integer besar Algoritma penyulitan RSA ialah algoritma penyulitan asimetri yang digunakan secara meluas dalam bidang keselamatan data. Ia melaksanakan proses penyulitan kunci awam dan penyahsulitan kunci persendirian berdasarkan dua nombor perdana yang sangat besar dan beberapa operasi matematik mudah. Dalam bahasa PHP, pengiraan integer besar boleh direalisasikan melalui perpustakaan GMP (GNUMultiplePrecision), dan fungsi penyulitan dan penyahsulitan boleh direalisasikan dengan menggabungkan algoritma RSA. Artikel ini akan memperkenalkan cara menggunakan perpustakaan PHP dan GMP untuk

Penemuduga Goodbye Go: Model GMP, kenapa ada P? Penemuduga Goodbye Go: Model GMP, kenapa ada P? Aug 08, 2023 pm 04:31 PM

"Model GMP, kenapa ada P?" Soalan ini seperti pemahaman reka bentuk sistem, kerana kini ramai orang akan menghafal model GMP untuk menghadapi temuduga, atau melaluinya seperti mee segera. Dan memahami sebab sebenar di sebaliknya adalah apa yang perlu kita pelajari dan fahami.

Bagaimana untuk menyusun dan memasang php gmp Bagaimana untuk menyusun dan memasang php gmp Nov 08, 2022 am 09:35 AM

Cara menyusun dan memasang php gmp: 1. Nyahmampat pakej php melalui "bzip2 -d gcc-4.1.0.tar.bz2"; 2. Jalankan "tar -xvf gcc-4.1.0.tar" atau "tar -xvf" *.tar" arahan; 3. Pasang gmp melalui "make install".

Bagaimana untuk melaksanakan pendaraban pantas nombor besar menggunakan PHP dan GMP Bagaimana untuk melaksanakan pendaraban pantas nombor besar menggunakan PHP dan GMP Jul 31, 2023 pm 01:31 PM

Cara menggunakan PHP dan GMP untuk melaksanakan pendaraban pantas nombor besar Pengenalan: Dalam sains komputer, aritmetik integer ialah salah satu operasi yang paling asas dan biasa digunakan. Walau bagaimanapun, apabila integer besar terlibat, kaedah aritmetik tradisional menjadi tidak cekap. Artikel ini akan memperkenalkan cara menggunakan perpustakaan GMP (GNUMultiplePrecision) dalam PHP untuk melaksanakan pendaraban pantas nombor besar dan menyediakan contoh kod yang sepadan. Pengenalan kepada perpustakaan GMP Pustaka GMP ialah perpustakaan pengiraan ketepatan tinggi yang menyediakan fungsi seperti penambahan, penolakan, pendaraban, pembahagian dan pengeksponenan bagi integer besar.

Bagaimana untuk melaksanakan algoritma penyulitan dan penyahsulitan RSA menggunakan PHP dan GMP Bagaimana untuk melaksanakan algoritma penyulitan dan penyahsulitan RSA menggunakan PHP dan GMP Jul 28, 2023 pm 11:54 PM

Cara menggunakan PHP dan GMP untuk melaksanakan algoritma penyulitan dan penyahsulitan RSA Algoritma penyulitan RSA ialah algoritma penyulitan asimetri yang digunakan secara meluas dalam bidang keselamatan maklumat. Dalam aplikasi praktikal, selalunya perlu menggunakan bahasa pengaturcaraan untuk melaksanakan algoritma penyulitan dan penyahsulitan RSA. PHP ialah bahasa skrip sebelah pelayan yang biasa digunakan dan GMP (GNUMultiplePrecision) ialah perpustakaan pengiraan matematik berketepatan tinggi yang boleh membantu kami melaksanakan operasi nombor besar yang diperlukan dalam algoritma RSA. Artikel ini akan memperkenalkan cara menggunakan PHP dan GMP

Cara menjana nombor perdana yang besar menggunakan PHP dan GMP Cara menjana nombor perdana yang besar menggunakan PHP dan GMP Aug 01, 2023 pm 01:37 PM

Cara menjana nombor perdana yang besar menggunakan PHP dan GMP Pengenalan: Dalam bidang kriptografi dan keselamatan, menjana nombor perdana yang besar secara rawak adalah sangat penting. Sambungan GMP (GNUMultiplePrecision) PHP menyediakan fungsi pengiraan ketepatan tinggi, yang boleh kami gunakan untuk menjana nombor perdana yang besar yang kami perlukan. Artikel ini akan memperkenalkan cara menjana nombor perdana yang besar menggunakan PHP dan GMP, dan memberikan contoh kod yang sepadan. Langkah 1: Pasang sambungan GMP Pertama, kita perlu memastikan sambungan GMP dipasang dan didayakan pada pelayan. Ini boleh dilakukan melalui perkara berikut

Dari mula hingga akhir: Cara menggunakan sambungan php GMP untuk operasi nombor besar Dari mula hingga akhir: Cara menggunakan sambungan php GMP untuk operasi nombor besar Aug 02, 2023 am 11:33 AM

Dari awal hingga akhir: Cara menggunakan PHP untuk melanjutkan GMP untuk operasi nombor besar Dengan pembangunan Internet, pemprosesan data besar telah menjadi bahagian yang sangat diperlukan dalam pembangunan harian kami. Dalam banyak senario, kita perlu beroperasi pada nombor yang lebih besar daripada julat integer PHP (-2^31-1 hingga 2^31-1). Dalam kes ini, sambungan GMP PHP berguna. GMP (GNUMultiplePrecisionArithmeticLibrary) ialah a

Tutorial PHP dan GMP: Cara Mengira Gandaan Sepunya Terkecil Nombor Besar Tutorial PHP dan GMP: Cara Mengira Gandaan Sepunya Terkecil Nombor Besar Jul 28, 2023 pm 11:51 PM

Tutorial PHP dan GMP: Cara Mengira Gandaan Sepunya Terkecil Nombor Besar Pengenalan: Dalam komputer, kita selalunya perlu berurusan dengan operasi nombor besar. Walau bagaimanapun, disebabkan oleh had storan komputer, jenis integer tradisional tidak boleh mengendalikan nombor di luar julat tertentu. Untuk menyelesaikan masalah ini, kami boleh menggunakan perpustakaan GMP (GNUMultiplePrecision) PHP untuk melaksanakan operasi nombor besar. Artikel ini akan memperkenalkan cara menggunakan PHP dan perpustakaan GMP untuk mengira gandaan sepunya terkecil mana-mana dua nombor besar. Apakah gandaan sepunya terkecil? lelaki bongsu

See all articles