Greenlets nasıl çalışır?
Nasıl greenlets uygulanır? Python kullanır C yığın için yorumlayıcı ve yığın ayırır Python yığın çerçeveler, ama bunun ötesinde, nasıl tahsis/takas yığınları, nasıl kanca içine sözlü ve işlev çağrısı mekanizmaları, ve nasıl bu etkileşim ile C uzantıları? (Herhangi bir tuhaflıklar)?
Greenlet üst kısmında bazı açıklamalar vardır.c kaynağı, ama biraz donuk. FWIW geliyorum açısından biri yabancı ile CPython iç ama çok tanıdık ile düşük seviye sistem programlama, C, konuları, olayları, coroutines/kooperatif konuları, çekirdek programlama, vb.
(Bazı veri noktaları: don't use ucontext.h do 2x memcpy, alloc, and free on every context switch.)
CEVAP
Ve greenlet olsun çalışma sources, greenlet.c
en üstünde aşağıdaki Özet doğrultusunda 16 yaşında başlayan uzun bir yorum göreceksin.:
Bir PyGreenlet C yığın bir dizi. bu kaydedilmiş olması gerekir ve adresleri tam böyle bir şekilde restore yığın aralığı geçerli veriler içeriyor bunu geçiyoruz.
82, tam olarak ne sorduğunu özetleyen çizgi devam ediyor. Bu satırları çalışmalar var (ve şu 1000 uygulama;-)...? Hala mantıklı, ne de kopyalama herhangi bir katma değer verme ve onları buraya yapıştırarak süre daha bu 66 satır aşağı sıkmak için bir yol göremiyorum.
Temelde, göreceksin orada gerçek bir "çengel" konuş (C seviye yığın özelliğinin ileri bir geri "altında tercüman burnu", tabiri caizse) hariç hassas ilişkiler ile iş parçacığı durumu çok iş parçacıklı kod ve kurtarmak ve geri yüklemek için bir greenlet devlet/yığın dayanır memcpy
çağrıları artı bazı aramalar için Python bellek yöneticisi ayırmak/tahsis ve boş alan geliyor, ya da geri gitmek için yığın. Sıradaki üç fonksiyonları 227-295 zor bir iş kolu ve C 298-310 de makrolar birkaç sarmış durumdalar "bakım kolaylaştırmak için", olarak yorum yazıyor.
Arabirimi üzerinden diğer C uzantıları olabilir etkileşim ile greenlet uzantısıdır uygulanmaktadır hatları 956-1045 ve maruz aracılığıyla "CObject API" () greenlet.h
elbette) belgelenmiş here.
JavaScript kilitler nasıl çalışır?...
CSS üçgenler nasıl çalışır?...
Veri bağlama Nasıl çalışır?AngularJS :...
Nasıl veritabanı indeksleme çalışır?...
Bit shift (bit-shift) operatörleri ned...