Sobes.tech
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:

  1. Bir goroutine (G) oluşturulur ve küresel veya yerel P kuyruğuna konur.
  2. Boşta olan bir M, bir P ister. Eğer P kullanılabilir ise, M ona bağlanır.
  3. M, P'den bir goroutine alır ve yürütmeye başlar.
  4. 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.
  5. Engellenmiş goroutine devam etmeye hazır olduğunda, tekrar P kuyruğuna veya küresel kuyruğa konur.
  6. 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.