Способ межпроцессного взаимодействия?

Только технические вопросы по ЯОС и MINOS. Терминология и прочее - в других форумах.
Ответить
БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Способ межпроцессного взаимодействия?

Сообщение БудДен » 25.07.21 18:26

Итак, нужно сделать, чтобы можно было из КуМира вызывать не только команды, но и отдельные процедуры. Скажем, выделить математический массив (вызов процедуры) и написать какое-нибудь перемножение матриц (множество операций, требующих вызова из КуМира в ЯОС).

Какой способ межпроцессного взаимодействия предпочесть?

https://github.com/goldsborough/ipc-bench Linux - самое быстрое - это shared memory и memory mapped files - 1.6 млн сообщ/сек (хотя надо проверять, ведь нужны синхронные вызовы, кто знает, как у них там в тесте). Но и сокеты - 130 тыс/сек. Во всяком случае, тест можно допилить до синхронного.

А что в Windows?


https://gamedev.ru/flame/forum/?id=169089

https://stackoverflow.com/a/7743060/9469533 - предлагают сообщение Copy_data

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Способ межпроцессного взаимодействия?

Сообщение БудДен » 26.07.21 00:05

Что-то я побоялся сообщения, посему сделал тест передачи на разделяемой памяти, синхронизация двумя семафорами. Получается порядка 40тыс вызовов в секунду, миллион вызовов выполняется 24 секунды. При том, сам Кумир в быстром режиме выполнят вот такую программу за 4 секунды:

Код: Выделить всё

алг
нач
цел а, б
б := 0;
нц для а от 0 до 1000000
б := а - б
кц
вывод б
кон
Т.е. замедление примерно в 10 раз по сравнению с КуМиром. Для начала можно было бы и смириться, но уже какой-то спортивный интерес стал возникать. Например, нельзя ли сделать семафоры на спинлоках, а сами спинлоки хранить в той же общей памяти?

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Способ межпроцессного взаимодействия?

Сообщение БудДен » 26.07.21 02:02

Сделал семафоры на спинлоках в той же разделяемой памяти, что и сами данные, теперь получается порядка 2 секунд на всё, т.е. 500тыс вызовов в секунду. Вроде соответствует по порядку величины данным для линукса. В этой ситуации замедление на саму передачу данных несущественное и, если не будет других замедлений, то скорость вызова ЯОС из КуМира будет сопоставима со скоростью работы самого КуМира. Но замедления, конечно же, будут, т.к. нужно ещё преобразовать вызовы, привести типы данных и т.п.

Ответить