Forráskód Böngészése

chapters/linux_eventloop: écriture de la partie poll/select

Alexandre Janniaux 6 éve
szülő
commit
e91776a4f1
1 módosított fájl, 23 hozzáadás és 4 törlés
  1. 23 4
      chapters/linux_eventloop.tex

+ 23 - 4
chapters/linux_eventloop.tex

@@ -1,21 +1,40 @@
-\section{Gestion de l'eventloop}
+\section{Gestion asynchrone}
 
 Maintenant que l'on a choisi les solutions de communication entre les différents
 processus, on peut s'intéresser à la manière de gérer les échanges de messages
 venant potentiellement de plusieurs sources.
 
-\section{Gestion asynchrone}
-
 Linux dispose de plusieurs mécanismes pour effectuer des opérations asynchrones,
 tous n'ayant pas les mêmes caractéristiques en terme de consommation mémoire ou
 complexité.
 
 \subsection{poll, select}
 
+Parmis les solutions pour manipuler plusieurs descripteurs de fichier en même
+temps, les solutions classiques sont \inltype{poll} et \inltype{select}. Les
+deux fonctions marquent leur ancienneté par une mauvaise complexité
+algorithmique dans leur exploitation, c'est-à-dire un temps linéaire en le
+nombre de descripteur lors de l'attente d'un événement.
+
+Dans un premier temps, nous allons voir \inltype{poll}, à qui nous pouvons
+indiquer l'ensemble des événements à surveiller et qui nous signalera lorsque
+l'un des événements a été notifié. Le vériable descripteur ayant reçu la
+notification n'est cependant pas précisé et il faut parcourir le tableau des
+événements pour pouvoir le trouver.
+
 \begin{code}{c}{Prototype de poll dans man 2 poll}
-int poll(struct pollfd *fds, nfds_t nfds, int délai);<Paste>
+int poll(struct pollfd *fds, nfds_t nfds, int délai);
 \end{code}
 
+Cette méthode est aujourd'hui relativement remplacée pour \inltype{epoll} et ne
+nous intéressera pas.
+
+Ensuite, \inltype{select} fournit le même mécanisme en indiquant par des
+opérations bit à bit quels sont les descripteurs de fichier ayant reçu une
+notification. En plus de souffrir du problème précédent obligeant à parcourir
+l'ensemble des descripteurs, elle est donc également limitée en nombre de
+descripteur de fichier possible.
+
 \begin{code}{c}{Prototype de select et macros dans man 2 select}
 int select(int nfds, fd_set *readfds, fd_set *writefds,
            fd_set *exceptfds, struct timeval *timeout);