Продолжаем осваивать курс «Сетевое программирование в UNIX», подготовленный специалистами SkyDNS и компании «Айдеко». Сегодня мы публикуем шестую лекцию.
В прошлый раз мы рассматривали программы, основанные на использовании конечного автомата. Теперь пойдем дальше и расскажем, как «научить» программу в автоматном стиле обрабатывать несколько одновременных соединений в одном процессе/потоке.
Ранее автор курса Александр Патраков уже затрагивал тему обработки более одного клиента одновременно. Тогда он предложил пойти путем создания нескольких процессов. Но этот способ не подходит для астрологического сервера, так как его состояние является общим для нескольких процессов (при использовании потоков такого ограничения нет).
Существует способ обработки более одного клиента одновременно, не основанный на создании множества процессов или потоков. Это цикл обработки сообщений на основе функции select(), которой и посвящена данная лекция.
«Этот способ подходит, если ограничивающим фактором не является производительность процессора или диска, а программа занята, в основном, сетевым вводом-выводом», — поясняет Александр Патраков.
На этом занятии студентам было дано задание добавить к существующей автоматной программе вызов функции select() и тем самым научить ее обрабатывать нескольких клиентов.
Советуем и вам попробовать свои силы! Смотрите видео и не забывайте оставлять комментарии!
Предыдущие лекции:
1. Курс для тех, кто не боится UNIX и C
2. Каждому клиенту по процессу
3. Реализуем протокол или как работают астрологи
4. О том, как читать до конца
5. Программы в автоматном стиле — трудности перевода