LINUX.ORG.RU

Что выбрать (сокеты, разделямая память или очереди сообщений)?


0

0

Hi All!
Чего посоветуете выбрать для общения нескольких процессов (совершенно не родственных) между собой при условиях:
- общение в рамках одной машины (т.е. без сети и тп)
- сообщения довольно маленькие (< 1Kбайт)
- очень-очень требовательно к ресурсам - пусть даже в ущерб сложности разработки

Склоняюсь больше к очереди сообщений, потом локальные сокеты...

Может кто тыкнет сравнение производительности или у кого есть большой опыт и по тому и под другому?

Кто что скажет? Буду рад и благодарен любой информации! ;)


Ответ на: комментарий от farisey

>Очереди сообщений Я тоже склоняюсь к этому, но вот народ еще агетирует за разделяемую память... Может скажешь на чем основан твой выбор?

Ant0
() автор топика
Ответ на: комментарий от Ant0

> народ еще агетирует за разделяемую память

и правильно агИтирует ;)

anonymous
()
Ответ на: комментарий от farisey

> Хм...надо у Стивенса на графики глянуть....

И чем тебе помогут эти древние как дерьмо мамонта данные?

anonymous
()
Ответ на: комментарий от farisey

Мда уж.....опозорился....shared memory быстрее конечно! Просто я в голове удобство держал - тут с очередями трудно тягаться. Шаред мем быстрее, но механизм контроля передачи придётся самому строить (хотя это и фигня)....

farisey
()
Ответ на: комментарий от farisey

> механизм контроля передачи придётся самому строить

Это не обязательно недостаток, потому что можно сделать что-нибудь подходящее к случаю и/или легко поддающееся мониторингу.

anonymous
()

хм...
/me задумался...
может в книжках что я читал действительно устаревшие данные по скорости...

где бы надыбать сравнение? ничего толкового гугль не сказал :-/

Ant0
() автор топика

shared mem быстрее, очереди проще но медленнее все же.

хотя в твоем случае ИМХО оправданней будут именно очереди.

alphex_kaanoken ★★★
()
Ответ на: комментарий от Ant0

Если нужна именно скорость - shared memory.
Если удобство и впадлу программить-отлаживать - очереди.

Я сделал бы с разделяемой памятью..туда семафор запихнул и up/down (или как там в юзер-спейсе) - вот и вся синхронизация.

farisey
()

забы написать еще одно важное условие :)
сообщений будет порядка 100/сек (обычно меньше)
ну мааааксимум 1000/сек

Ant0
() автор топика
Ответ на: комментарий от Ant0

> сообщений будет порядка 100/сек (обычно меньше)

> ну мааааксимум 1000/сек

И это называется требовательность к ресурсам? 8) Делай передачу указателя (или смещения) в разделяемой памяти через локальный сокет, FIFO, очередь сообщений.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>И это называется требовательность к ресурсам? 8)
А что плохого в том, что хочу чтобы ВСЕ работало максимально эффективно?! ;)

Да и на этом программа не заканчиваются, а зачем тратить ресурсы на теже сокеты или FIFO если можно реализовать через очередь сообщений/раздел-ю память и потратить освободившиееся ресурсы на что-то более полезное?! ;)

Ant0
() автор топика
Ответ на: комментарий от Ant0

>А что плохого в том, что хочу чтобы ВСЕ работало максимально эффективно?! ;)

Ничего плохого в этом нет, если умеешь вовремя остановиться ("Преждевременная оптимизация - корень всех зол" -- Д.Кнут). Например, твой максимальный поток в 1МБайт/сек можно передать локально через любой IPC с примерно одинаковыми затратами ресурсов. Ну так зачем заморачиваться на разделяемую память или вообще хоть что-нибудь, кроме FIFO? Программист - он тоже машина, которая должна работать максимально эффективно ;)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>Программист - он тоже машина, которая должна работать максимально эффективно ;)
понравилось! ;)

Ant0
() автор топика
Ответ на: комментарий от Die-Hard

>ИМХО локальные сокеты: кошерно и быстро.
>Очереди -- некошерно...
а чем кашерно и чем не кашерно?

Ant0
() автор топика
Ответ на: комментарий от Ant0

>>Очереди -- некошерно... > а чем кашерно и чем не кашерно?

Ну, например, после того, как система окажется загаженной тухлыми всеми брошенными очередями, задумаешься, а чем сокеты-то хуже?

Die-Hard ★★★★★
()
Ответ на: комментарий от tailgunner

> а чем FIFO хуже сокетов (для данного случая) ?

Да и не хуже... Вообще, лично мне FIFO больше всех симпатичны. Но немного тормознутее локальных сокетов, как я набенчмарчил. И сокеты, все же, значительно ширше -- если вдруг придется по сетке расшариваться, то от наработок вокруг FIFO к сокетам мигрировать будет слегка гемморойно.

Die-Hard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.