Авторы: Фёдор Гончаров, Нина Челышева

Полезные ссылки

I/O Multiplexing

Запись лекции

Код с лекции

man 2 select

Мультиплексирование

Общая идея

Вспомним фильмы 50-x годов, когда были проводные телефоны. Для того, что позвонить, абонент поднимал трубку своего аппарата, телефонистка отвечала и вручную соединяла с другим абонентом, физически соединяла провода.

Выходило, что между двумя абонентами был физически непрерывный провод, по которому они общались. При этом никто другой не мог пользоваться этим проводом в это время. Получается, кто первый занял канал, того и тапки.

Хочется, чтобы одновременно много абонентов могли пользоваться этим проводом. Для этого мы можем поделить канал на мелкие промежутки по времени и каждому абоненту выдавать их так, чтобы снаружи для него выглядело бесшовно, будто ему целиком дали канал. То есть, вместо коммутации каналов мы делаем коммутацию пакетов.

Коммутация каналов — формирование непрерывных проводов между абонентами так, чтобы целиком один провод непрерывный был только на одну пару клиентов.

Коммутация пакетов — пользователи общаются через пакеты данных небольшого размера, которые мы проносим по тем же проводам, только не выделяя всю линию под них.

Последнее можно сравнить с посылками и почтой России. В самолете летит сразу много посылок, а не одна 😊

P.S. Мультиплексирование может быть не только с разделением по времени, но и по частоте, по длине волны. Но на CPU только по времени)

Телефонистка за ручным коммутатором, 1975 год

Телефонистка за ручным коммутатором, 1975 год

Множество файловых дескрипторов fd_set

Макросы для работы с fd_set

int fd - файловый дескриптор, fd_set* fdset - множество файловых дескрипторов