netch: (Default)
[personal profile] netch
Вот натеоретизировалось.

IPC надо строить в двух принципиально различных направлениях: "быстрый" IPC - для передачи уже договоренных данных по установленному каналу, и "богатый" - для первичного установления или связи без постоянного канала.
"Быстрый" - на сейчас это традиционные пайпы-сокеты. К средствам "богатого" IPC следует отнести
- выставки (для оповещения о своих способностях)
- очереди (для разовых передач и хэндшейкинга)
- проброс хэндла (для установления канала "быстрого" IPC)

Последовательно с конца:

Проброс хэндла - метод известен - recvmsg()+cmsg в Unix, что-то было в Windows. При этом принимающий процесс должен явно согласиться на приём хэндла; Windows, кажется, это не умеет. Хороший вариант - один процесс запускает что-то типа CatchHandle() в отдельной нити и ждёт приёма.

Очереди - неплохой вариант выглядит так: у процесса может быть несколько очередей обозначенных целыми числами. Очередь 0 предназначена (но не ограничена) для сообщений от системных средств, 1 - для произвольного первичного обмена, 2 и далее - для целей определяемых владельцем. На каждую очередь назначаются права на запись сообщений (acl'ем или хотя бы на уровне owner/group/other), читать может только данный процесс. Процесс определяет предельный размер очереди как сумму размеров сообщений и предельный размер одного сообщения. API процесса-владельца включает: создание/уничтожение; регулирование размера; чтение/удаление сообщений; атомарные чтение и сброс флага случившегося переполнения (попытка записи сообщения при разрешении правами доступа, не состоявшаяся по ограничению размера). API стороннего процесса состоит из одной функции записи (параметры: PID/handle процесса-получателя, номер очереди, адрес и размер сообщения) и возвращает шмогла/почему_не_шмогла.
Сообщение - массив байт (размером например до 64KB). Рекомендованная структура сообщения - в начале два UUID'а (тип и подтип сообщения), дальше в зависимости от этих параметров.

Выставка - набор параметров имя=значение. API процесса-владельца - добавление, удаление, замена, чтение, перебор. API стороннего процесса - поиск процессов с параметрами: только по конкретному имени; по конкретным имени и значению.

Очереди и выставки хранят свои данные в памяти ядра, на что выставляется ограничение ulimit'ами или аналогичными средствами в пределах виртуальной памяти процесса.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

netch: (Default)
netch

December 2023

S M T W T F S
     12
3456789
10111213141516
171819 20212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 5th, 2026 11:16 am
Powered by Dreamwidth Studios