Pourquoi utiliser doit-on pas async (evented) IO
-
30-09-2019 - |
Question
Je suis en train d'écrire en train d'écrire un code evented (en python utilisant gevent) et j'utiliser le nginx comme serveur web et je me sens les deux sont grands. On m'a dit qu'il ya un compromis avec les événements, mais a été incapable de le voir. Quelqu'un peut-il s'il vous plaît faire la lumière?
James
La solution
Le plus gros problème est que, sans fils, un bloc pour un client fera un bloc pour tous les clients. Par exemple, si un client demande une ressource (fichier sur le disque, la mémoire paginée-out, etc.) qui nécessite le système d'exploitation pour bloquer le processus de demande, tous les clients devront attendre. Un serveur multithread peut bloquer tout le seul client et de continuer à servir les autres.
Cela dit, si le scénario ci-dessus est peu probable (qui est, tous les clients demanderont les mêmes ressources), puis évènementielle est la voie à suivre.
Autres conseils
La seule difficulté de programmation evented est que vous ne devez pas bloquer, jamais. Cela peut être difficile à réaliser si vous utilisez des bibliothèques qui ont été conçus avec des fils à l'esprit. Si vous ne contrôlez pas ces bibliothèques, une fourchette () + un message est ipc le chemin à parcourir.