فهرست منبع

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

Alexandre Janniaux 6 سال پیش
والد
کامیت
e91776a4f1
1فایلهای تغییر یافته به همراه23 افزوده شده و 4 حذف شده
  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
 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
 processus, on peut s'intéresser à la manière de gérer les échanges de messages
 venant potentiellement de plusieurs sources.
 venant potentiellement de plusieurs sources.
 
 
-\section{Gestion asynchrone}
-
 Linux dispose de plusieurs mécanismes pour effectuer des opérations asynchrones,
 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
 tous n'ayant pas les mêmes caractéristiques en terme de consommation mémoire ou
 complexité.
 complexité.
 
 
 \subsection{poll, select}
 \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}
 \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}
 \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}
 \begin{code}{c}{Prototype de select et macros dans man 2 select}
 int select(int nfds, fd_set *readfds, fd_set *writefds,
 int select(int nfds, fd_set *readfds, fd_set *writefds,
            fd_set *exceptfds, struct timeval *timeout);
            fd_set *exceptfds, struct timeval *timeout);