|
|
|
Concurrency
|
|||
|---|---|---|---|
|
#18+
Здравствуте, допустим имеется несколько датчиков: 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. или 2) контроллер имеет один входной канал C.in, а "одноименные" сообщения разделяет, например, по типу отправителя/сообщения или какому-нибудь префиксу, т.е. примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Или никакой принципиальной разницы нет? Или, если выбор стиля зависит от ситуации, то в каких ситуациях какой вариант предпочтительней? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2012, 11:35 |
|
||
|
Concurrency
|
|||
|---|---|---|---|
|
#18+
Я не думаю что стоит заморачиваться прямой связью между аппаратурой и тем как выбирать (или правильнее хранить измерения в БД). Если интервал между замерами - нулевой или можно за 1 обращение (условно) к контроллеру снять сразу все 3 измерения то можно сделать пакетом. А если каждый замер датчика достаточно дорог то лучше их разделять в отдельных строках (тразнакциях). Или я не так понял вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2012, 13:16 |
|
||
|
Concurrency
|
|||
|---|---|---|---|
|
#18+
maytonЯ не думаю что стоит заморачиваться прямой связью между аппаратурой и тем как выбирать (или правильнее хранить измерения в БД). Если интервал между замерами - нулевой или можно за 1 обращение (условно) к контроллеру снять сразу все 3 измерения то можно сделать пакетом. А если каждый замер датчика достаточно дорог то лучше их разделять в отдельных строках (тразнакциях). Или я не так понял вопрос. Эм... Это никакого отношения к оборудованию/БД не имеет. Наверное зря я использовал слово "датчик". =) Имеется в виду межпотоковое взаимодействие в стиле CSP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2012, 14:08 |
|
||
|
Concurrency
|
|||
|---|---|---|---|
|
#18+
т.е. вот, например, первый вариант: http://paste.lisp.org/display/130268 вот второй: http://paste.lisp.org/display/130269 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2012, 15:08 |
|
||
|
Concurrency
|
|||
|---|---|---|---|
|
#18+
k0rvin, тихо ответ зависит от того, насколько одинакова обработка сигналов датчиков. Если нужно обобщение, то делать один поток событий, если не нужно, то несколько, а если где-то нужно, а где-то нет, то разветвитель. Это ведь некая реализация ФРП? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2012, 16:00 |
|
||
|
Concurrency
|
|||
|---|---|---|---|
|
#18+
F#Это ведь некая реализация ФРП? если ты про это , то нет, это CSP -подобное "конкурентное" программирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2012, 16:16 |
|
||
|
Concurrency
|
|||
|---|---|---|---|
|
#18+
F#ответ зависит от того, насколько одинакова обработка сигналов датчиков. Если нужно обобщение, то делать один поток событий, если не нужно, то несколько, а если где-то нужно, а где-то нет, то разветвитель. Если контроллер может принимать какое-нибудь сообщение, например "abort", и при этом для него не важно из какого оно источника, то это понятно, что используется один канал. Однако меня интересует случай когда источник имеет значение. Опять же, при смешаной ситуации (когда часть сообщений -- общая, а часть -- "источникозависимая") что лучше: использовать один канал для всех сообщений, разделяя сообщения по типам (как во втором примере), или использовать по каналу на источник + общий канал. С одним общим каналом сложнее протокол, с разными каналами... много каналов. =) В примерах использования каналов для взаимодействия с клавиатурой/мышью/интерфейсом в Limbo используется первый вариант (разные каналы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2012, 16:36 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=37855378&tid=1342209]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
211ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 228ms |
| total: | 553ms |

| 0 / 0 |
