Rappels sur le multiplexage des entrées-sorties

 

Le plus simple pour expliquer le problème simplement est de prendre comme exemple un serveur web. En effet un serveur web est un processus qui gère la communication avec très souvent plusieurs clients en simultané.

Dans ce cas, on s'apperçoit que le processus du serveur web passe son temps à scruter les arrivées des requètes client afin de pouvoir y répondre.
D'ou le nom de POLLING (scrutation en anglais) qui a donné le nom à la primitive poll( ) et à /dev/poll et /dev/epoll.

Il existe plusieurs méthodes afin de scruter au mieux les entrées-sorties sans pour autant utiliser toutes les ressourses de la machine voici les principales primitives qui ont longtemps vécu dans le monde Linux : Select( ) et Poll( ).

Select( ) - page man -

En résumé, Select attend des changements d'état sur plusieurs descripteurs de fichiers. C'est la méthode la plus fiable et la moins cher en ressources avant l'arrivée de la primitive poll( ).
Linux se sépare rapidement de Select car cette fonction est limitée en nombre de descripteurs de fichier. Par défaut la constante FD_SETSIZE qui fixait cette limite valait : 8 * 8 * sizeof(unsigned long) = 512 !!! Ce qui veut dire qu'il était impossible d'avoir plus 512 descripteurs de fichiers ouverts en simultanés...

Poll( ) - page man - :

Primitive qui a remplacé Select( ) à partir du noyau 2.1.23 en Décembre 1997.
La grande différence avec son prédécesseur est le changement d'interface utilisé. En effet, Poll( ) utilise une table de structure du type :

Struct pollfd {
int fd; /* Descripteur de fichiers */
short events; /* Evénements attendus */
short revents; /* Evénements détectés */
};

Cette différence permet une utilisation plus simple de la primitive.

Mais comme nous pouvons le constater dans les tests, ces méthodes souffrent cruellement d'optimisations dès que nous surchageons le mécanisme de requètes.

- retour -