реклама на сайте
подробности

 
 
> Вопрос ламера по Linux IPC, Inter Process Comminications
Evgeny_CD
сообщение Jan 13 2006, 20:33
Сообщение #1


Гуру
******

Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892



Есть два процесса под Linux. Им надо обмениваться пакетами данных.

Пакет представляет из себя:

* заголовок - поле фиксированной длины
* данные - поле переменой длины (<= MAX_LEN), заполненное бинарными
случайными данными.

Как лучше всего сделать такой обмен?

Я удумал следующее.

1. Канал. Пишем, читаем. Но поскольку он имеет байтный интерфейс, при
последовательном чтении непонятно, где начинается заголовок. Значит,
придется вводить какие-то механизмы для его нахождения (Escape
последовательности и пр.). Это не сложно, но совершенно лишнее действие
в контексте решаемой задачи (нужно ее решить максимально быстро по
программированию, расход памяти и процессорного времени не важен (в
разумных пределах)).

2. Разделяемая память. Наделать там кучу семафоров, и обмениться
указателями на структуры.

3. Гибрид smile.gif

Делаем разделяемую память, а там - кольцевой массив структур. Каждая
структура - это сообщение, данные пакета аппроксимированы массивом
максимальной длины (пустые места в памяти не волнуют).

2 потока для каждого направления обмена.

Передающий процесс пишет в поток send_msg char значение номера
элемента в массиве, куда он положил пакет.

Принимающий процесс пишет в поток msg_ask char значение номера элемента в
массиве, который он прочитал (освободил).

IMHO, так еще будет быстрее всего (нет лишнего копирования) и
экономнее (по памяти) всего (нет памяти для лишних копий).

Вероятно, я изобретаю велосипед. А что скажут Гуру по данному поводу?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Evgeny_CD
сообщение Jan 15 2006, 17:55
Сообщение #2


Гуру
******

Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892



Спасибо всем просветившим меня!

Из всего многообразия IPC мне приглянулись сокеты, т.к. они более
универсальны, и позволяют разнести задачи по разным машинам (сейчас
это не надо, но на следующем этапе точно потребуется). Так что
имеет смысл брать именно их.

Но они не гарантирует сохранения границ моих блоков данных.

Прикрутить формирователь фреймов из SLIP - это круто, но не хочется.
Хочется по простому...

Моя следующая идея.

Берем два совета. В один пишем блок данных. В другой - ASCII заголовок
пакета. (выделение в потоке начала заголовка - через выделенный
символ). Принимающая сторона выгребает все из сокета данных, и кидает
в ответ по контрольному сокету, что пакет считан.

Далее процесс повторяется.

Как эта идея?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Evgeny_CD   Вопрос ламера по Linux IPC   Jan 13 2006, 20:33
- - zltigo   Цитата(Evgeny_CD @ Jan 13 2006, 22:33) Ес...   Jan 13 2006, 21:49
|- - Evgeny_CD   Цитата(zltigo @ Jan 14 2006, 00:49) Самое...   Jan 13 2006, 22:47
- - zltigo   Цитата(Evgeny_CD @ Jan 14 2006, 00:47) С ...   Jan 13 2006, 23:33
|- - Evgeny_CD   Цитата(zltigo @ Jan 14 2006, 02:33) Значи...   Jan 13 2006, 23:39
- - psL   Если один процесс родительский, а второй его потом...   Jan 14 2006, 11:43
- - zltigo   Цитата(psL @ Jan 14 2006, 13:43) Если оди...   Jan 14 2006, 13:03
|- - psL   > 1. Pipe и FIFO суть одно и то-же и работают о...   Jan 14 2006, 13:56
- - zltigo   Цитата(psL @ Jan 14 2006, 15:56) > 1. ...   Jan 14 2006, 14:53
|- - psL   Цитата(zltigo @ Jan 14 2006, 17:53) ?????...   Jan 14 2006, 16:01
|- - alexr22b   Цитатая имел ввиду, что TCP - не гарантирует сохра...   Jan 15 2006, 06:23
- - Harbour   Насчет выделения пакетов из какого угодно потока (...   Jan 14 2006, 19:04
- - zltigo   Цитата(Harbour @ Jan 14 2006, 21:04) Я та...   Jan 14 2006, 20:54
- - zltigo   Цитата(alexr22b @ Jan 15 2006, 08:23) И э...   Jan 15 2006, 11:34
- - _artem_   Vikladivayu knizku na /upload/doc/Unix_Linux_books...   Jan 15 2006, 16:37
|- - Evgeny_CD   Цитата(_artem_ @ Jan 15 2006, 19:37) Vikl...   Jan 15 2006, 16:54
|- - Konst_777   Цитата(_artem_ @ Jan 15 2006, 19:37) Vikl...   Jan 18 2006, 03:14
- - nazim   Я для этой цели использовал простой "самодель...   Jan 15 2006, 19:18
|- - Evgeny_CD   Цитата(nazim @ Jan 15 2006, 22:18) ...Я д...   Jan 15 2006, 20:01
- - zltigo   Обалдеть.   Jan 15 2006, 21:36
|- - Evgeny_CD   Цитата(zltigo @ Jan 16 2006, 00:36) Обалд...   Jan 15 2006, 21:51
|- - psL   Вообще-то для обеспечения прозрачности передаваемы...   Jan 15 2006, 22:08
- - zltigo   Цитата(Evgeny_CD @ Jan 15 2006, 23:51) Ци...   Jan 15 2006, 23:05
|- - Evgeny_CD   Цитата(zltigo @ Jan 16 2006, 02:05) ...В ...   Jan 15 2006, 23:32
- - zltigo   Цитата(Evgeny_CD @ Jan 16 2006, 01:32) Вс...   Jan 15 2006, 23:55
|- - Evgeny_CD   Цитата(zltigo @ Jan 16 2006, 02:55) Ну и ...   Jan 16 2006, 00:49
- - zltigo   Цитата(Evgeny_CD @ Jan 16 2006, 02:49) Эт...   Jan 16 2006, 01:16
|- - Evgeny_CD   Цитата(zltigo @ Jan 16 2006, 04:16) 1. Ну...   Jan 16 2006, 01:31
|- - zltigo   Цитата(Evgeny_CD @ Jan 16 2006, 03:31) SO...   Jan 16 2006, 11:08
|- - Evgeny_CD   Цитата(zltigo @ Jan 16 2006, 14:08) ...На...   Jan 16 2006, 11:16
- - Harbour   Цитата(zltigo @ Jan 14 2006, 22:54) Цитат...   Jan 16 2006, 09:35
- - zltigo   Цитата(Harbour @ Jan 16 2006, 11:35) 3. С...   Jan 16 2006, 10:51
- - zltigo   Цитата(Evgeny_CD @ Jan 16 2006, 13:16) Ви...   Jan 16 2006, 11:31
|- - Evgeny_CD   Цитата(zltigo @ Jan 16 2006, 14:31) Излиш...   Jan 17 2006, 15:56
- - Harbour   Цитата(zltigo @ Jan 16 2006, 12:51) Цитат...   Jan 16 2006, 17:55
- - zltigo   Цитата(Harbour @ Jan 16 2006, 19:55) то ч...   Jan 16 2006, 18:26
- - Harbour   Пусть теоретики на своими прожектами думают - мне ...   Jan 17 2006, 07:02
- - zltigo   Цитата(Harbour @ Jan 17 2006, 09:02) Пуст...   Jan 17 2006, 11:32
- - Harbour   Даже такой отторможенный арм как 920 должон легко ...   Jan 17 2006, 20:21
|- - Evgeny_CD   Цитата(Harbour @ Jan 17 2006, 23:21) ...Д...   Jan 17 2006, 20:56
- - zaratustra   > оцифровывать входной сигнал с относительно вы...   Jan 26 2006, 12:57
|- - Evgeny_CD   Цитата(zaratustra @ Jan 26 2006, 15:57) ....   Jan 26 2006, 13:44
- - zaratustra   А вы не пробовали поискать девкиты работающие под ...   Jan 26 2006, 14:02
|- - Evgeny_CD   Цитата(zaratustra @ Jan 26 2006, 17:02) А...   Jan 26 2006, 14:27
- - zaratustra   Вам виднее, кто кроме вас вашу задачу знает? Если ...   Jan 27 2006, 08:34
|- - Evgeny_CD   Цитата(zaratustra @ Jan 27 2006, 11:34) ....   Jan 27 2006, 09:32
- - zaratustra   Линукс насколько я вижу мигрирует к десктопу быстр...   Jan 27 2006, 10:17
|- - Evgeny_CD   Цитата(zaratustra @ Jan 27 2006, 13:17) Л...   Jan 27 2006, 11:42
- - zaratustra   Самое лучшее что могу вам посоветовать - побыстрее...   Jan 27 2006, 13:00
|- - Evgeny_CD   Цитата(zaratustra @ Jan 27 2006, 16:00) ....   Jan 27 2006, 13:02
- - defunct   Я прощу прощения если не в тему, но Evgeny_CD а н...   Jan 31 2006, 01:31
- - Evgeny_CD   Цитата(defunct @ Jan 31 2006, 04:31) Я пр...   Jan 31 2006, 02:01
- - defunct   Цитата(Evgeny_CD @ Jan 31 2006, 04:01) 1....   Jan 31 2006, 02:47
- - Evgeny_CD   Цитата(defunct @ Jan 31 2006, 05:47) Опыт...   Jan 31 2006, 08:00
- - defunct   Цитата(Evgeny_CD @ Jan 31 2006, 10:00) Пр...   Jan 31 2006, 23:45
- - Evgeny_CD   Цитата(defunct @ Feb 1 2006, 02:45) ...По...   Feb 1 2006, 06:34


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 03:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01399 секунд с 7
ELECTRONIX ©2004-2016