|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
Малыхин СергейА как же разделяемая память? https://www.google.ru/search?q=shared memory&oq=shared &aqs=chrome.2.69i57j0l5.10823j0j7&sourceid=chrome&ie=UTF-8 Что то быстрее сложно придумать =) А есть одна в Windows ? Вместо неё Memory-mapped files. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 11:55 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
maytonДавайте в качестве пятничной темы. Рассмотрим memory-map (mmap). В качестве points: 1) Размер страницы? Везде-ли 4к? 2) Ограничения. Сколько можно выделить. 3) Реализации в Windows/Unix 4) Практическое применение кроме традиционного (загрузка кода). SQLite? Другие DBMS? 5) Бенчмарки. Оптимизации. Пока - предложения по вопросам. А топик я форкну отдельно. 1. Если не путаю это аппаратно определяется, но вроде везде страница 4К С практическим применением проблема. Лично я не могу придумать реальную задачу для межпроцессного обмена. Тут есть одно сильное ограничение: все процессы должны быть на одном компе. А при соединении через tcp или пайпы такой проблемы нет. С другой стороны если процессы должны много и часто обмениваться, то почему бы тогда не собрать их в один процесс, так гораздо быстрее будет работать. В общем круг задач очень узок для такого инструмента. Например файл-серверные СУБД используемые преимущественно в пределах одного компа, т.е. SQLite. В SQLite это уже встроено. MS SQL тоже может использовать. Я использовал мапинг для рандомного чтения файла, чтобы не заморачиваться с постоянным перемещением указателя. Но как тесты показали чтение файла классическим способом работает быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 13:29 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
Dima TС другой стороны если процессы должны много и часто обмениваться, то почему бы тогда не собрать их в один процесс, так гораздо быстрее будет работать. Например, если процессы под разные архитектуры. Пример из личной практики. Приложение десктопное x64 для обработки видео, всё как положено, поддерживает разные форматы видео. Тут вдруг появилась нужда поддержать .mov-формат (QuickTime) на Windows и macOS. Оказалось, что кодеки QuickTime являются только 32-разрядными. Запилили отдельный процесс под i386 дабы он грузил видео с помощью кодеков и уже к нему обращаться за получением конкретных фреймов видео по обычным пайпам. Уверен, что сейчас эту проблему можно решить другими средствами, без привлечения IPC. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 13:37 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
Dima TЯ использовал мапинг для рандомного чтения файла, чтобы не заморачиваться с постоянным перемещением указателя. Но как тесты показали чтение файла классическим способом работает быстрее. Это интересный для меня поинт. Вот хотелось-бы бенчмарк и обсудить. В основном в виде сравнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 14:14 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
maytonВот хотелось-бы бенчмарк и обсудить. В основном в виде сравнения. Уже Исходники 18162869 Результаты 18163841 18163854 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 14:30 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
Dima TmaytonВот хотелось-бы бенчмарк и обсудить. В основном в виде сравнения. Уже Исходники 18162869 Результаты 18163841 18163854 Это не то что я хотел. Тоесть мой юзкейс другой. Не к текстовой замене. А больше к случайному дотупу к произвольному смещению. И в разрезе чтений и записей. И чтений-записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 14:41 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
mayton1) Размер страницы? Везде-ли 4к? 2) Ограничения. Сколько можно выделить. 3) Реализации в Windows/Unix 4) Практическое применение кроме традиционного (загрузка кода). SQLite? Другие DBMS? 5) Бенчмарки. Оптимизации. 1) нет. 2) имхо упирается от процента свободной памяти на писюке... давно было дело - но около 70% кажется. это форточки. но окно делать большим - задач таких нема. везде до или после идёт фрагментация и её обработка. 3) ээээээ опыт по форточкам. в линуксе сильно не приходилось 4) а) свой движок объектной БД. б) логгирование. =анализ, поиск,фильтрация,само логирование. нужно логирование - запускается второй процесс. не нужен - не запускается. при этом тратиться в релизе только cakk/ret . Кстати говоря там stl - зло от слова совсем. Сплошной буффер, но хитро устроенный. Блокировка не на весь а только на управляющую инфу. Скорострельность самая шустрая выходит. в) предотвращение повторного запуска приложения(только если путь запуска совпадает) 5) уже выше отчасти сказал - правильный код по синхронизации, копированию и распределению данных в шаред-памяти. удачи вам (круглый) ЗЫ Тут прозвучали пайпы. Сразу предупреждаю об глюке который был на срез 2008 где то года в форточках. Как сейчас - хз, давно не проверял. Там есть один нюанс. Если пайпу планируется использовать как синхронизацию между асинхронными процессами - то там есть мёртвая зона при одновременном создании пайпы и ожидании её подъёма, когда она отвечает о создании ожидающей процессу, при этом она ещё не готова для прогона данных(будут потери). Проявляется при интенсивной нагрузке только, плавающая. Лечение - после установления физического контакта, прогнать логическую синхронизацию. От осей помойму не зависит (WIN32 имеется ввиду). ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 16:35 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
Если писать какие-то процессы в виде DLL с заранее оговорённым интерфейсом взаимодействия, которые будут крутится внутри одного EXE, как это, к примеру, происходит с некоторыми службами Windows под svchost.exe, то проблема межпроцессного взаимодействия сводится к тривиальному вызову API функции одной DLL из другой с передачей параметров. Тут надо только определить кто и как будет подчищать память и как эту память выделять в случае, когда одна DLL'ка освобождает память, запрошенную из другой DLL'ки. К примеру, для таких случаев выделением памяти может заниматься какая-то третья DLL, экспортирующая функции выделения и освобождения памяти на своей куче. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2018, 13:59 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
rdb_devЕсли писать какие-то процессы в виде DLL с заранее оговорённым интерфейсом взаимодействия, которые будут крутится внутри одного EXE ....то межпроцессные взаимодействия отсутствуют как класс. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2018, 14:05 |
|
|
start [/forum/topic.php?fid=57&startmsg=39754456&tid=2017690]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 149ms |
0 / 0 |