Я пытаюсь понять, как epoll() отличается от select() и poll(). select() и poll() довольно похожи. select() позволяет отслеживать несколько файловых дескрипторов и проверяет, доступен ли какой-либо из этих файловых дескрипторов для операции (например, чтение, запись) без блокировки. Когда истекает время ожидания, select() возвращает дескрипторы файлов, которые готовы, и программа может выполнять операции над этими файловыми дескрипторами без блокировки.Что означает select() и poll(), являются апатридами?
...
FD_ZERO(&rfds);
FD_SET(0, &rfds);
/* Wait up to five seconds. */
tv.tv_sec = 5;
tv.tv_usec = 0;
retval = select(1, &rfds, NULL, NULL, &tv);
/* Don’t rely on the value of tv now! */
if (retval == -1)
perror("select()");
else if (retval)
printf("Data is available now.\n");
/* FD_ISSET(0, &rfds) will be true. */
else
printf("No data within five seconds.\n");
...
опроса() является немного более гибким в том, что он не опирается на растровом изображении, но массив дескрипторов файлов. Кроме того, поскольку poll() использует отдельные поля для запрошенных (событий) и результатов (revents), вам не нужно беспокоиться о пополнении наборов, которые были перезаписаны ядром.
...
struct pollfd fds[2];
fds[0].fd = open("/dev/dev0", ...);
fds[1].fd = open("/dev/dev1", ...);
fds[0].events = POLLOUT | POLLWRBAND;
fds[1].events = POLLOUT | POLLWRBAND;
ret = poll(fds, 2, timeout_msecs);
if (ret > 0) {
for (i=0; i<2; i++) {
if (fds[i].revents & POLLWRBAND) {
...
Однако, я прочитал, что есть проблема с опросом() тоже, так как выбор() и опрос() являются лицами без гражданства; ядро не внутренне поддерживает запрошенные наборы. Я прочел следующее:
Предположим, что существует 10 000 одновременных соединений. Как правило, только небольшое количество файловых дескрипторов среди них, скажем 10, готовы к . Остальные 9,990 файловых дескрипторов копируются и сканируются без причины , для каждого вызова select()/poll(). Как упоминалось ранее, эта проблема возникает из-за того, что эти интерфейсы select()/poll() являются stateless.
Я не понимаю, что подразумевается под файловыми дескрипторами, «скопировано» и «отсканировано». Скопировано где? И я не знаю, что означает «без гражданства». Спасибо за разъяснение.