|
Вопрос ламера по Linux IPC, Inter Process Comminications |
|
|
|
Jan 13 2006, 20:33
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Есть два процесса под Linux. Им надо обмениваться пакетами данных. Пакет представляет из себя: * заголовок - поле фиксированной длины * данные - поле переменой длины (<= MAX_LEN), заполненное бинарными случайными данными. Как лучше всего сделать такой обмен? Я удумал следующее. 1. Канал. Пишем, читаем. Но поскольку он имеет байтный интерфейс, при последовательном чтении непонятно, где начинается заголовок. Значит, придется вводить какие-то механизмы для его нахождения (Escape последовательности и пр.). Это не сложно, но совершенно лишнее действие в контексте решаемой задачи (нужно ее решить максимально быстро по программированию, расход памяти и процессорного времени не важен (в разумных пределах)). 2. Разделяемая память. Наделать там кучу семафоров, и обмениться указателями на структуры. 3. Гибрид  Делаем разделяемую память, а там - кольцевой массив структур. Каждая структура - это сообщение, данные пакета аппроксимированы массивом максимальной длины (пустые места в памяти не волнуют). 2 потока для каждого направления обмена. Передающий процесс пишет в поток send_msg char значение номера элемента в массиве, куда он положил пакет. Принимающий процесс пишет в поток msg_ask char значение номера элемента в массиве, который он прочитал (освободил). IMHO, так еще будет быстрее всего (нет лишнего копирования) и экономнее (по памяти) всего (нет памяти для лишних копий). Вероятно, я изобретаю велосипед. А что скажут Гуру по данному поводу?
|
|
|
|
|
 |
Ответов
|
Jan 15 2006, 23:55
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Evgeny_CD @ Jan 16 2006, 01:32)  Все-таки сохранять или не сохранять границы юзеровских пакетов - это фундаментальное отличие. Я думал в этой области все давно вылизано, и царит полнейшая гармония. Весь кайф испортился.  Я НЕ ВСТРЕЧАЛ и ДУМАЮ НЕ ВСТРЕЧУ такого безобразия - это ФУНДАМЕНТ. Все мои замечания по этому поводу относятся только к тому что где-то кто-то что-то видел/слышал и по этой причине решил добавить в механизм еще свою спичечку привязав ее веревочкой... Для _высокоуровневых_ протоколов в массовых серьезных операционках - можете считать, что царит гармония. За поведение многочисленых "микроконтроллерных" стеков сделанных кем-то для использования в каких-то определеных условиях при использовании изделия в других РАЗНООБРАЗНЫХ условиях отвечать просто НЕВОЗМОЖНО. Ну и еще замечание - если собираетесь базироваться на на *NIX ообразной открытой операционке для чего либо не являющегося настольной машиной с иксами - обратите свой взор в сторону FreeBSD. Ее по крайней мере делает поименованый управляемый коллектив. Цитата Верно! Но за два вечера, проведенных в этом топике, я узнал столько, сколько, вероятно, не узнал бы и за неделю кодинга. Это не Ваши знания :-( они разрознены и противоречивы местами. Дальше что? Монетку кидать? На здравый смысл уповать? На книжку ссылаться? Только практика критерий истины. И еще Ваш подход (это я базируясь на надбюдениях за другими темами) к делу поражает немалым размахом. Такая организация дела несомненно работает и по своему эффективна, но в БОЛЬШИХ коллективах (ну начиная с полусотни разработчиков и прочего персонала на проект) с изрядным финансированием, для содержания оных. Это Ваш случай? Если нет, то все Ваши усилия на поддержание "установленного порядка" сожрут все ресурсы разработчиков.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 16 2006, 00:49
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Цитата(zltigo @ Jan 16 2006, 02:55)  Ну и еще замечание - если собираетесь базироваться на на *NIX ообразной открытой операционке для чего либо не являющегося настольной машиной с иксами - обратите свой взор в сторону FreeBSD. Ее по крайней мере делает поименованый управляемый коллектив. Эта мысли меня уже посещала. Но стремно: * спецов по BSD очень мало * книжек тоже, хотя несколько книжек я уже утащил * книжек по NetBSD вообще нет (я не нашел). По иее это самый что ни на есть embedded BSD * хочется иметь ту же самую платфому на писюке и embedded девайсе. Хотя бы пока я учусь. Потом, очень даже возможно, будут перепрыгивать на BSD. Цитата(zltigo @ Jan 16 2006, 02:55)  Это не Ваши знания :-( они разрознены и противоречивы местами. Дальше что? Монетку кидать? На здравый смысл уповать? На книжку ссылаться? Только практика критерий истины. И еще Ваш подход (это я базируясь на надбюдениях за другими темами) к делу поражает немалым размахом. Такая организация дела несомненно работает и по своему эффективна, но в БОЛЬШИХ коллективах (ну начиная с полусотни разработчиков и прочего персонала на проект) с изрядным финансированием, для содержания оных. Это Ваш случай? Если нет, то все Ваши усилия на поддержание "установленного порядка" сожрут все ресурсы разработчиков. 1. На умении выуживать знания из противоречивых данных и мнений я всю свою сознательную жизнь живу. Надеюсь, эта функция моего BIOS меня не подведет и сейчас.  Главное, чтобы подсознание отработало. Я не будут завтра кодить сокеты. Но через пару недель, когда я этим займусь, у меня уже будет некая система реперных точек, которя сработает в нужный момент. Опытный факт, что мне это сэкономит массу времени и сил. 2. Замах большой, это так. И колектива 50 девелоперов (вместе с бюджетом) тоже нет. Но с годами я дозрел до практики downgrade. Т.е. когда задача осмысливается целиком, начиная с верхнего уровня. Потом я рисую схему сущностей проекта (листов 30 А4), и делаю безжалостную кастрацию всей красоты, оставив ГЛАВНОЕ, и "крючки" для навешивания всего остального. Потом выдаю lite версию девелоперам, и постепенно это становится философией команды. И когда новички приходят - их есть чем учить. В ходе длительных размышлений за последние полгода мне удалось нашупать контуры новой среды разработки. Там не так важен сокетный протокол, и даже embedded ось не так важна (а вот синтетически порт под Linux важен принципиально!), и важна именно идеология декомпозиции задачи и обеспечения связи между компонентами. 3. Дьявол таится в деталях. Я не сомневаюсь в этом! И проблем будет масса! Лично для меня важно понимать, что именно надо делать (иметь некое объектно-ориентированное мышление применительно к целевой задаче, когда важны методы , а вот конкретный "экземпляр класса" выстраивается по ситуации), а с самим деланием потихоньку разберемся. Мир не без добрых людей. Спасибо Вам за Ваши ценнейшие замечания!
|
|
|
|
Сообщений в этой теме
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 Evgeny_CD Спасибо всем просветившим меня!
Из всего мног... Jan 15 2006, 17:55 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, 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|