powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Concurrency
8 сообщений из 8, страница 1 из 1
Concurrency
    #37854557
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуте, допустим имеется несколько датчиков: 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
Concurrency
    #37854827
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не думаю что стоит заморачиваться прямой связью между аппаратурой и тем как выбирать (или правильнее
хранить измерения в БД). Если интервал между замерами - нулевой или можно за 1 обращение (условно) к
контроллеру снять сразу все 3 измерения то можно сделать пакетом. А если каждый замер датчика достаточно
дорог то лучше их разделять в отдельных строках (тразнакциях). Или я не так понял вопрос.
...
Рейтинг: 0 / 0
Concurrency
    #37854970
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ не думаю что стоит заморачиваться прямой связью между аппаратурой и тем как выбирать (или правильнее
хранить измерения в БД). Если интервал между замерами - нулевой или можно за 1 обращение (условно) к
контроллеру снять сразу все 3 измерения то можно сделать пакетом. А если каждый замер датчика достаточно
дорог то лучше их разделять в отдельных строках (тразнакциях). Или я не так понял вопрос.

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

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

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

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

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

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

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


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