2013-06-15 33 views
21
Ben bu üç çerçeveler arasındaki farkları anlamak sorun biraz yaşıyorum

:Tornado/Twisted - Kereviz - Gevent Karşılaştırma

Bu üç çerçeve, kodu aynı anda çalıştırmak için kullanılabilir, ancak farklı bir miktarda iş parçacığı kullanarak bunu farklı şekilde yapar/süreçler veya codestyle. bir I/O döngü tarafından kontrol edilen

  • Tornado/Twisted kullanımı asenkron kod: Bu şu anda farklılıkları anlama ediyorum nasıl. Bu, kendi içinde kod hala kodu (olmayan engelleme kodu varsa bu gereksizdir, çünkü birden çok iş parçacığı yararsız) Kereviz uyumsuz kod çalıştırmak için bir görev tabanlı sistemi kullanır
  • tek iş parçacığı üzerinde ran izin verir senkron. Diğer çalışanlar arasındaki farklı görevleri farklı süreçlere dağıtabilen bir ana süreç vardır.
  • Gevent iş parçacığı tabanlı bir sistem kullanır ve farklı gelen bağlantı bağlantılarını işlemek için bir iş parçacığı kullanır.

şu anda yaşıyorum Sorular şunlardır:

  1. bu çerçevelerin benim anlayış doğru mu?
  2. Bir iş parçacığı ile işlem arasındaki en büyük fark, farklı iş parçacıklarının aynı belleği kullanması, ancak işlemlerin yapmamasıdır. Bir işlem normalde bir sunucu çekirdeğinde çalışır mı?/Twisted soketlerini miktarı nedeniyle (neredeyse) kabul edebiliyor musunuz

Tornado: Biz yaklaşık web uygulamaları ve prizler söz varsa

  • (Ve böylece sert kereviz yapma küçük sunucuda uygulamak) Eşzamansız kod kullanır ve I/O döngüsündeki isteği sıraya alır.

    Celery/Gevent bunu mümkün mü? Yeni bir soketi kabul edebilmek için yeni bir süreç/iplik üretmek zorundalar mı?

    Bu teknolojilerin hangisinin gerçek zamanlı bir web uygulaması oluşturmak için en uygun olduğunu bulmaya çalışıyorum.

  • +0

    Bu soruya Asyncio'yu eklemek ve başkalarına da cevap vermek için bazı cevaplar almak güzel olurdu. – chuseuiti

    cevap

    19
    1. Gevent yerine bu dolaylı bir IO döngü ipliklerinin greenlets, yani el Twtisted/Tornado'nun durumunda başlatmak için herhangi bir reaktör/IO döngü vardır. Aynı zamanda, var olan işlemleri desteklemek için varolan kitaplıklara yama yüklemek için yeteneği vardır, Tornado ve Twisted zaten var olan birçok bulabilirsiniz, ancak olay döngüleri ile çalışmak için belirli kitaplıklar gerektirir.

      Kereviz, başka bir işlem/sunucuya pahalı hesaplamaları kaldırmak için arka plan işleme için çok daha fazla yapılır.

    2. İşlemler, bellekleri paylaşabilir, ancak iş parçacıklarının yaptığı gibi değil. CPython'daki iplikler, GIL'dan muzdariptir ve CPU yoğun bir şey yapıyorsanız, genellikle dişli bir çözüm kullanmaya değmez.

      Celery'nin bellek gereksinimlerinden emin değilim, ancak 1 web işlemi ve 1 arka plan işlemi kullanıyorsanız, 256MB'lık bir VPS'de bile iyi olmanız gerekir, ancak birçok bağlantıyı destekliyorsanız daha iyi olur.

    3. Tornado/Twisted/Gevent ile işlenebilecek olan soket sayısı, soket başına yapılan IO miktarı ve sıklığı tarafından sınırlandırılacaktır. Düşük frekans/düşük bant genişliği soketleri, çoğunlukla boşta olacağı için çok sayıda eşzamanlı bağlantıyı desteklemek için çok daha kolaydır. Kereviz, soketlerin dinlenmesi ve Celery daemon'la işlenecek çağrıların yapılması için hala bir uygulama gerektirecektir. Gevent'i de destekler, böylece gerekirse birden çok görevi yönetebilirsiniz.