Middle+
Go dilində goroutine idarəetmə modeli (GMP) haqqında danış.
sobes.tech Süni İntellekt
AI-dan cavab
Go planlayıcısı GMP modelini kullanarak goroutine'leri, işletim sistemi ipliklerini ve mantıksal işlemcileri yönetir:
- G (Goroutine): Hafif, bağımsız yürütme birimi. Bir yığın, talimat gösterici ve diğer durum bilgilerini içerir. Birden fazla goroutine, tek bir işletim sistemi ipliği üzerinde çalışabilir.
- M (Machine): İşletim sistemi ipliği. Goroutine kodunu başlatan yürütücü görevi görür. Bir M kümesi, planlayıcı tarafından kullanılabilir.
- P (Processor): Mantıksal işlemci. Goroutine'un yürütülmesi için bağlam sağlar. Bu işlemci üzerinde çalışmaya hazır goroutine'lerin yerel kuyruğunu içerir. Varsayılan P sayısı
runtime.NumCPU()'ya eşittir.
İşlem:
- Bir goroutine (G) oluşturulur ve küresel veya yerel P kuyruğuna konur.
- Boşta olan bir M, bir P ister. Eğer P kullanılabilir ise, M ona bağlanır.
- M, P'den bir goroutine alır ve yürütmeye başlar.
- Eğer goroutine engellenirse (örneğin, I/O beklerken), M P'den ayrılır ("hand off"). P, başka bir M veya kendi kuyruğundaki başka bir goroutine için kullanılabilir kalır.
- Engellenmiş goroutine devam etmeye hazır olduğunda, tekrar P kuyruğuna veya küresel kuyruğa konur.
- Gerekirse, planlayıcı tarafından M oluşturulabilir (örneğin, tüm mevcut M'ler engelliyse) veya kullanılmadığında kaldırılır.
Preemption (zorla zaman dilimi değiştirme): Planlayıcı, adil bir işlemci zamanı dağılımını sağlamak için belirli bir süre sonra (zaman dilimi) goroutine yürütmesini durdurabilir.
Work Stealing (iş çalma): P, yerel kuyruğundaki goroutine'leri tükettiğinde, küresel kuyruktan veya diğer P'lerin kuyruklarından goroutine'leri "çalmak" isteyebilir.