145 votes

Greenlet Vs. Fils

Je suis nouveau sur gevents et greenlets. J'ai trouvé quelques une bonne documentation sur la façon de travailler avec eux, mais aucun ne m'a donné de justification sur comment et quand dois-je utiliser greenlets ?

  • Quels sont-ils vraiment bons ?
  • Est-ce une bonne idée de les utiliser dans un serveur proxy ou pas ?
  • Pourquoi ne pas les threads ?

J'ai ce que je ne suis pas sûr de savoir comment ils peuvent nous fournir la simultanéité si ils sont fondamentalement co-routines .

214voto

Matt Joiner Points 29194

Greenlets fournir la simultanéité, mais pas de parallélisme. La simultanéité est lorsque le code peut s'exécuter indépendamment l'un de l'autre code. Le parallélisme est l'exécution de code simultané simultanément. Le parallélisme est particulièrement utile lorsqu'il y a beaucoup de travail à faire dans l'espace utilisateur, et qui est généralement CPU-lourd. La simultanéité est utile pour séparer des problèmes, permettant aux différentes parties pour être planifiée et gérée plus facilement en parallèle.

Greenlets vraiment briller dans la programmation de réseau où les interactions avec un socket peut se produire indépendamment des interactions avec d'autres supports. C'est un exemple classique de la simultanéité. Parce que chaque greenlet s'exécute dans son propre contexte, vous pouvez continuer à utiliser les Api synchrone sans filetage. C'est bien parce que les fils sont très coûteux en termes de mémoire virtuelle du noyau et des frais généraux, de sorte que la simultanéité vous pouvez atteindre avec des threads de l'est nettement moins. En outre, le filetage en Python est plus cher et plus limité que d'habitude en raison de la GIL. Des Alternatives à la simultanéité sont généralement des projets comme Tordu, libevent, libuv, node.js etc, où tous vos partages de codes le même contexte d'exécution, et d'enregistrer les gestionnaires d'événements.

C'est une excellente idée pour utiliser greenlets (avec les réseaux de soutien comme par gevent) pour la rédaction d'un proxy, comme votre traitement des demandes sont en mesure d'exécuter de manière indépendante et doit être écrit en tant que tel.

Greenlets fournir de simultanéité pour les raisons que j'ai donné plus tôt. La simultanéité n'est pas de parallélisme. En dissimulant l'enregistrement d'un événement et l'exécution de la planification pour vous sur les appels qui seraient normalement bloquer le thread en cours, des projets comme gevent exposer cette simultanéité sans avoir à modifier une API asynchrone, et nettement moins le coût de votre système.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X