2013-10-09 2 views
0

On dit que select() n'est pas évolutif car il doit aller au-dessus d'un tableau avec la taille maximum de num des fichiers (FD): complexité O (max_num_FD). Et il est dit que poll() est meilleur parce qu'il ne dépasse qu'un tableau avec la taille de num de FD active(): complexité O (num de FD actif) que signifie FD actif?Pourquoi poll() est-il meilleur que select()?

poll() est un moyen populaire utilisé par les serveurs à grande échelle avec de nombreuses données disponibles à la fois? Habituellement, quelle approche de socket un serveur à grande échelle utilise-t-il habituellement dans la réalité?

+0

Est-ce que c'est pour une langue spécifique? –

+0

@Edgar C est brut en utilisant les appels système Unix bruts. – SzG

+1

@SzG Non, c'est n'importe quelle langue utilisant les appels système Unix. 'select' et' poll' sont directement disponibles dans un certain nombre de langues. Le langage n'a pas d'importance, la sauce de performance magique et la définition d'un "fd actif" sont dans le noyau, pas dans la langue. – delnan

Répondre

1

Active FD désigne un descripteur de fichier ouvert.

A la fois select() et poll() sont des programmes monothread mono-thread qui leur permettent de gérer plusieurs connexions en même temps. Par exemple, le serveur Web uhttpd d'OpenWRT est comme ça. Select() et poll() sont disponibles sur tous les Unix. Les versions O (1) de meilleure mise à l'échelle sont epoll sous Linux et kqueue sous BSD. Moins portable, cependant. Mais vous pouvez installer libkqueue0 sur Debian Linux.

De nombreux programmes utilisent d'autres approches. Par exemple sshd, le démon SSH, génère un processus fils pour chaque connexion. D'autres gèrent chaque connexion dans un thread.

+0

Voulez-vous dire utiliser ssh pour un serveur à grande échelle? comme connexion http ssh? – user389955

+0

Non. Je viens de donner des exemples de fonctionnement de certains services bien connus. – SzG

+0

Merci pour la réponse. avez-vous entendu put_getn? J'ai entendu dire que c'est aussi évolutif. Comment est-ce comparé avec epoll() et kqueue? – user389955

Questions connexes