Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Concurrency / 8 сообщений из 8, страница 1 из 1
26.06.2012, 11:35
    #37854557
k0rvin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Concurrency
Здравствуте, допустим имеется несколько датчиков: D1, D2, D3 и контроллер C, который должен реагировать на сообщения датчиков (D1.M1, D1.M2, D2.M1, ...).

Каким образом лучше организовать связь контроллера с датчиками:

1) контроллер имеет три входных канала: C.D1, C.D2, C.D3, каждый из которых связан с определенным датчиком, и соответственно на каждом этапе цикла прослушивания проверяет каждый из каналов на наличие новых сообщений. Примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select
    C.D1 => message : case message of
        M1 : do_something
        M2 : do_something_else
    end case
    C.D2 => message : case message of
        M1 : do_other_thing
        M2 : do_another_thing
        ...
    end case
    ...
end select

или

2) контроллер имеет один входной канал C.in, а "одноименные" сообщения разделяет, например, по типу отправителя/сообщения или какому-нибудь префиксу, т.е. примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select
    C.in => message : case message of
        D1.M1 : do_something
        D1.M2 : do_something_else
        D2.M1 : do_other_thing
        D2.M2 : do_another_thing
    ...
    end case
end select
?

Или никакой принципиальной разницы нет? Или, если выбор стиля зависит от ситуации, то в каких ситуациях какой вариант предпочтительней?
...
Рейтинг: 0 / 0
26.06.2012, 13:16
    #37854827
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Concurrency
Я не думаю что стоит заморачиваться прямой связью между аппаратурой и тем как выбирать (или правильнее
хранить измерения в БД). Если интервал между замерами - нулевой или можно за 1 обращение (условно) к
контроллеру снять сразу все 3 измерения то можно сделать пакетом. А если каждый замер датчика достаточно
дорог то лучше их разделять в отдельных строках (тразнакциях). Или я не так понял вопрос.
...
Рейтинг: 0 / 0
26.06.2012, 14:08
    #37854970
k0rvin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Concurrency
maytonЯ не думаю что стоит заморачиваться прямой связью между аппаратурой и тем как выбирать (или правильнее
хранить измерения в БД). Если интервал между замерами - нулевой или можно за 1 обращение (условно) к
контроллеру снять сразу все 3 измерения то можно сделать пакетом. А если каждый замер датчика достаточно
дорог то лучше их разделять в отдельных строках (тразнакциях). Или я не так понял вопрос.

Эм... Это никакого отношения к оборудованию/БД не имеет. Наверное зря я использовал слово "датчик". =)

Имеется в виду межпотоковое взаимодействие в стиле CSP.
...
Рейтинг: 0 / 0
26.06.2012, 15:08
    #37855168
k0rvin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Concurrency
т.е. вот, например, первый вариант: http://paste.lisp.org/display/130268
вот второй: http://paste.lisp.org/display/130269
...
Рейтинг: 0 / 0
26.06.2012, 16:00
    #37855326
F#
F#
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Concurrency
k0rvin,

тихо ответ зависит от того, насколько одинакова обработка сигналов датчиков. Если нужно обобщение, то делать один поток событий, если не нужно, то несколько, а если где-то нужно, а где-то нет, то разветвитель.
Это ведь некая реализация ФРП?
...
Рейтинг: 0 / 0
26.06.2012, 16:16
    #37855376
k0rvin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Concurrency
F#Это ведь некая реализация ФРП?

если ты про это , то нет, это CSP -подобное "конкурентное" программирование.
...
Рейтинг: 0 / 0
26.06.2012, 16:18
    #37855378
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Concurrency
Глубоко...
...
Рейтинг: 0 / 0
26.06.2012, 16:36
    #37855440
k0rvin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Concurrency
F#ответ зависит от того, насколько одинакова обработка сигналов датчиков. Если нужно обобщение, то делать один поток событий, если не нужно, то несколько, а если где-то нужно, а где-то нет, то разветвитель.

Если контроллер может принимать какое-нибудь сообщение, например "abort", и при этом для него не важно из какого оно источника, то это понятно, что используется один канал. Однако меня интересует случай когда источник имеет значение.

Опять же, при смешаной ситуации (когда часть сообщений -- общая, а часть -- "источникозависимая") что лучше: использовать один канал для всех сообщений, разделяя сообщения по типам (как во втором примере), или использовать по каналу на источник + общий канал. С одним общим каналом сложнее протокол, с разными каналами... много каналов. =)

В примерах использования каналов для взаимодействия с клавиатурой/мышью/интерфейсом в Limbo используется первый вариант (разные каналы).
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Concurrency / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]