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

Здесь есть возможность читать онлайн «Майкл Джонсон - Разработка приложений в среде Linux. Второе издание» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2007, ISBN: 2007, Издательство: Вильямс, Жанр: ОС и Сети, Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

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

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Разработка приложений в среде Linux. Второе издание»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет собой отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из других операционных систем. Подробно рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование свободно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Изобилие хорошо документированных примеров кода помогает лучше усвоить особенности программирования в Linux.
Книга рассчитана на разработчиков разной квалификации, а также может быть полезна для студентов и преподавателей соответствующих специальностей.

Разработка приложений в среде Linux. Второе издание — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Разработка приложений в среде Linux. Второе издание», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Отличия в производительности двух методов поразительны. Чтобы продемонстрировать, насколько лучше масштабируется epoll, в коде poll-vs-epoll.сизмеряется количество системных вызовов poll()и epoll_wait(), которые можно создать за одну секунду для наборов файловых дескрипторов разных размеров (количество файловых дескрипторов для помещения в набор задается в командной строке). Каждый файловый дескриптор ссылается на считывающую часть канала, и они создаются с помощью dup2().

В табл. 13.1 суммируются результаты запуска poll-vs-epoll.сдля установленных размеров диапазоном от одного до 100 000 файловых дескрипторов [82] Эту программу необходимо запускать от имени root для наборов, содержащих более 1000 дескрипторов. . В то время как количество системных вызовов в секунду резко падает для poll(), оно остается почти постоянным для epoll [83] Настоящее тестирование не гарантирует статистическую точность. Был проведен лишь один тестовый прогон, поэтому результаты поначалу будут неустойчивыми, что, однако, исчезнет после большого количества повторов. . Как поясняет эта таблица, epollдобавляет в систему намного меньше нагрузки, чем poll(), и в результате гораздо лучше масштабируется.

Таблица 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

4: #include

5: #include

6: #include

7: #include

8: #include

9: #include

10: #include

11: #include

12: #include

13:

14: #include

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] Сохранение копии памяти может показаться не столь важным, но благодаря эффективному механизму кэширования Linux, эти задержки копий являются самой медленной частью записи в файлы данных, в которых нет набора O_SYNC . .

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

Представляем Вашему вниманию похожие книги на «Разработка приложений в среде Linux. Второе издание» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Геше Джампа Тинлей - Лоджонг (второе издание)
Геше Джампа Тинлей
Алексей Филатов - Люди «А». Второе издание
Алексей Филатов
Отзывы о книге «Разработка приложений в среде Linux. Второе издание»

Обсуждение, отзывы о книге «Разработка приложений в среде Linux. Второе издание» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x