|
@@ -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);
|