Чтение онлайн

на главную - закладки

Жанры

Разработка приложений в среде Linux. Второе издание

Троан Эрик В.

Шрифт:

Таблица 13.1. Результаты сравнения

poll
и
epoll

Файловые дескрипторы
poll
epoll
1
310063
714848
10
140842
726108
100
25866
726659
1000
3343
729072
5000
612
718424
10000
300
730483
25000
108
717097
50000
38
729746
100000
18
712301

1: /* poll-vs-epoll.с */

2:

3: #include <errno.h>

4: #include <fcntl.h>

5: #include <stdio.h>

6: #include <sys/epoll.h>

7: #include <sys/poll.h>

8: #include <sys/signal.h>

9: #include <unistd.h>

 10: #include <sys/resource.h>

 11: #include <string.h>

 12: #include <stdlib.h>

 13:

 14: #include <sys/select.h>

 15:

 16: int gotAlarm;

 17:

 18: void catch(int sig) {

 19: gotAlarm = 1;

 20: }

 21:

 22: #define OFFSET 10

 23:

 24: int main(int argc, const char ** argv) {

 25: int pipeFds[2];

 26: int count;

 27: int numFds;

 28: struct pollfd * pollFds;

 29: struct epoll_event event;

 30: int epfd;

 31: int i;

 32: struct rlimit lim;

 33: char * end;

 34:

 35: if (!argv[1]) {

 36: fprintf(stderr, "ожидалось
число\n");

 37: return 1;

 38: }

 39:

 40: numFds = strtol(argv[1], &end, 0);

 41: if (*end) {

 42: fprintf(stderr, "ожидалось число\n");

 43: return 1;

 44: }

 45:

 46: printf("Запуск
теста для %d файловых дескрипторов.\n", numFds);

 47:

 48: lim.rlim_cur = numFds + OFFSET;

 49: lim.rlim_max = numFds + OFFSET;

 50: if (setrlimit(RLIMIT_NOFILE, &lim)) {

 51: perror("setrlimit");

 52: exit(1);

 53: }

 54:

 55: pipe(pipeFds);

 56:

 57: pollFds = malloc(sizeof (*pollFds) * numFds);

 58:

 59: epfd = epoll_create(numFds);

 60: event.events = EPOLLIN;

 61:

 62: for (i = OFFSET; i < OFFSET + numFds; i++) {

 63: if (dup2(pipeFds[0], i) != i) {

 64: printf("сбой в %d: %s\n", i, strerror(errno));

 65: exit(1);

 66: }

 67:

 68: pollFds[i - OFFSET].fd = i;

 69: pollFds[i - OFFSET].events = POLLIN;

 70:

 71: event.data.fd = i;

 72: epoll_ctl(epfd, EPOLL_CTL_ADD, i, &event);

 73: }

 74:

 75: /* с помощью signal выяснить, когда время истекло */

 76: signal(SIGALRM, catch);

 77:

 78: count = 0;

 79: gotAlarm = 0;

 80: alarm(1);

 81: while (!gotAlarm) {

 82: poll(pollFds, numFds, 0);

 83: count++;

 84: }

 85:

 86: printf("Вызовов poll в секунду: %d\n", count);

 87:

 88: alarm(1);

 89:

 90: count = 0;

 91: gotAlarm = 0;

 92: alarm(1);

 93: while (!gotAlarm) {

 94: epoll_wait(epfd, &event, 1, 0);

 95: count++;

 96: }

 97:

 98: printf("Вызовов epoll в секунду: %d\n", count);

 99:

100: return 0;

101: }

13.2. Отображение в памяти

Операционная система Linux позволяет процессу отображать файлы в их адресное пространство. Такое отображение создает взаимно однозначное соответствие между данными в файле и в отображаемой области памяти. Отображение в памяти обладает рядом преимуществ.

Высокоскоростной доступ к файлам. Нормальные механизмы ввода-вывода, такие как

read
и
write
, вынуждают ядро копировать данные через буфер ядра, а не непосредственно между файлом, содержащим устройство, и процессом пространства пользователя. Карты памяти устраняют этот промежуточный буфер, сохраняя копию памяти [84] .

84

Сохранение копии памяти может показаться не столь важным, но благодаря эффективному механизму кэширования Linux, эти задержки копий являются самой медленной частью записи в файлы данных, в которых нет набора

O_SYNC
.

Поделиться:
Популярные книги

Часовая башня

Щерба Наталья Васильевна
3. Часодеи
Фантастика:
фэнтези
9.43
рейтинг книги
Часовая башня

Попаданка в Измену или замуж за дракона

Жарова Анита
Любовные романы:
любовно-фантастические романы
6.25
рейтинг книги
Попаданка в Измену или замуж за дракона

На границе империй. Том 9. Часть 3

INDIGO
16. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 3

Жена на пробу, или Хозяйка проклятого замка

Васина Илана
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Жена на пробу, или Хозяйка проклятого замка

Ваше Сиятельство

Моури Эрли
1. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ваше Сиятельство

Восход. Солнцев. Книга I

Скабер Артемий
1. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга I

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Надуй щеки!

Вишневский Сергей Викторович
1. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки!

Случайная свадьба (+ Бонус)

Тоцка Тала
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Случайная свадьба (+ Бонус)

Газлайтер. Том 5

Володин Григорий
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 5

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III

Наследник 2

Шимохин Дмитрий
2. Старицкий
Фантастика:
попаданцы
альтернативная история
фэнтези
5.75
рейтинг книги
Наследник 2

Неучтенный. Дилогия

Муравьёв Константин Николаевич
Неучтенный
Фантастика:
боевая фантастика
попаданцы
7.98
рейтинг книги
Неучтенный. Дилогия

Светлая тьма. Советник

Шмаков Алексей Семенович
6. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Светлая тьма. Советник