Урок 17: Pipes и FIFO — IPC между процессами
pipe — это однонаправленный механизм связи между процессами: то, что один пишет, другой читает. Каждый shell-конвейер (cmd1 | cmd2 | cmd3) строится из анонимных pipe'ов. FIFO (named pipe) расширяет эту идею на несвязанные процессы. В NVIDIA конвейеры multi-process GPU inference передают рабочие токе
pipe похож на водопроводную трубу: один процесс наливает воду (пишет), другой её набирает (читает). Вода течёт только в одну сторону, и набрать можно лишь то, что уже налито.
- pipe
- Однонаправленный IPC-буфер, поддерживаемый ядром: один процесс пишет в него, другой читает из него. Создаётся вызовом pipe(fds), который возвращает пару FD: fds[0]=чтение, fds[1]=запись.
- FIFO (named pipe)
- pipe с именем в файловой системе. Создаётся вызовом mkfifo(path, mode). Позволяет несвязанным процессам (не связанным через fork) общаться через запись в файловой системе.
- анонимный pipe
- pipe без имени в файловой системе — может использоваться только между родительским процессом и его потомками по fork (которые унаследовали FD через fork). Именно этот pipe лежит в основе shell-конвейеров.
- именованный pipe
- Другое название FIFO — pipe, который можно открыть по имени как обычный файл. Данные проходят через ядро и не сохраняются на диске, хотя запись в каталоге существует.
- half-close
- Закрытие только одного конца из пары FD у pipe. Когда все концы для записи закрыты, чтение с конца для чтения возвращает 0 (EOF). Необходимо для корректной связи fork+pipe.