2016-03-11 19 views
8

Ben süreçleri ve zamanlayıcı konusunda eylem kitap iksir bir makale okumak ve bazı sorular var ettik:Yürütme pencere süresi

  • Her süreç küçük yürütme pencere, ne demek olduğunu?
  • Yürütme pencereleri yaklaşık 2000 işlev çağrısı midir?
  • Bir işlem, dolaylı olarak yürütmeyi nasıl gerçekleştirir?

cevap

16

10.000 Erlang/Elixir işleminizin çalıştığını varsayalım. Basitlik için, bilgisayarınızın tek bir çekirdeğe sahip tek bir işlemi olduğunu da söyleyelim. İşlemci, her seferinde sadece bir şey yapabiliyor, bu yüzden herhangi bir anda sadece tek bir işlem gerçekleştirilebiliyor.

Bu işlemlerden birinin uzun süren bir görevi olduğunu varsayalım. Erlang VM sürecini kesintiye uğratabilecek durumda değilse, diğer tüm süreçler bu süreç görevini yerine getirene kadar beklemek zorunda kalacaktı. On binlerce istekle uğraşmaya çalıştığınızda bu durum iyi ölçeklenmez.

Neyse ki, Erlang VM çok naif değil. Bir işlem başladığında, 2.000 redüksiyon (işlev çağrısı). Süreç tarafından her seferinde bir işlev çağrıldığında, azaltma sayısı 1 azalır. Reddetme sayısı sıfıra düştüğünde, işlem kesintiye uğrar (örtülü olarak yürütme işlemi) ve dönüşünü beklemek zorundadır.

Erlang/Elixir'in döngüleri olmadığından, yinelenen büyük bir veri yapısı üzerinde yineleme yapılmalıdır. Bu, döngülerin sistem darboğazları haline geldiği çoğu dilden farklı olarak, her yinelemenin sürecin “azaltımlarından” birini kullandığı ve sürecin idam edilemeyeceği anlamına gelir.

Bu yanıtın geri kalanı sorunun kapsamı dışındadır, ancak tamlık için dahil edilmiştir.

Şimdi diyelim ki 4 çekirdekli bir işlemciniz var. Sadece 1 programlayıcısına sahip olmak yerine, VM 4 zamanlayıcı ile başlayacaktır (her çekirdek için 1). İlk programlayıcının yükü makul bir süre içinde işleyemediğine dair yeterli süreçler varsa, ikinci zamanlayıcı, birinci programlayıcıya paralel olarak yürüten fazla işlemlerin kontrolünü ele alacaktır.

Bu iki zamanlayıcı, yükü makul bir süre içinde işleyemezse, üçüncü programlayıcı yükün bir kısmını üstlenir. Bu, tüm işlemciler tamamen kullanılıncaya kadar devam eder. Ayrıca, VM, boşta kalan süreçlerde zaman kaybetmemek için yeterince akıllıdır - yani sadece iletileri beklemek.

Mükemmel bir blog yazısı JLouis tarafından How Erlang Does Scheduling var. Okumanı tavsiye ederim.

+0

Cevabınız için çok teşekkürler. Bir domuz idam nedir? Kesintili süreçte ne olacak? Daha sonra devam edecek misin? –

+0

Çalıştırmak için tüm CPU döngülerini kullanmak gerekir. Durdurulan süreç söz konusu olduğunda, gelecekte bir süre sonra tekrar çalıştırılacaktır. Zamanlayıcı her işlemden geçiyor ve üzerinde zaman harcıyor, ve sonra hala canlı olan herhangi bir işlem için tekrar başlıyor. – asonge

+1

Evet, kesintiye uğrayan süreçler, programlayıcı tekrar sıralandıklarını söylediğinde çalışmaya devam edecektir. –

İlgili konular