На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! В разделе обсуждаются следующие темы:
1) Процесс разработки программного обеспечения.
2) Определение требований к программному обеспечению.
3) Составные части и процесс проектирования (см. Шаблоны проектирования).
4) Документирование программного продукта(проекта).
5) Руководство разработкой программного обеспечения.
6) Проектирование пользовательского интерфейса.
7) Контроль версий проекта (см. Управление версиями в Subversion, Стратегии использования svn).
Модераторы: ElcnU
  
> Конкурентность (через обмен сообщениями)
    Допустим имеется несколько датчиков: D1, D2, D3 и контроллер C, который должен реагировать на сообщения датчиков (D1.M1, D1.M2, D2.M1, ...).

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

    1) контроллер имеет три входных канала: C.D1, C.D2, C.D3, каждый из которых связан с определенным датчиком, и соответственно на каждом этапе цикла прослушивания проверяет каждый из каналов на наличие новых сообщений. Примерно так:
    ExpandedWrap disabled
      select
        D1 ?=> message : case message of
          M1 : do_something
          M2 : do_something_else
        end case
        D2 ?=> message : case message of
          M1 : do_other_thing
          M2 : do_another_thing
          ...
        end case
        ...
      end select


    или

    2) контроллер имеет один входной канал C.in, а "одноименные" сообщения разделяет, например, по типу отправителя/сообщения или какому-нибудь префиксу, т.е. примерно так:
    ExpandedWrap disabled
      select
        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


    ?

    Или, если выбор стиля зависит от ситуации, то в каких ситуациях какой вариант предпочтительней?
      А вообще какая платформа или язык разработки у этой задачи?
        Цитата deil @
        А вообще какая платформа или язык разработки у этой задачи?

        Платформа никакая, вопрос общий по диспетчеризации сообщений; язык любой, имеющий непосредственную или при помощи дополнительных библиотек поддержку CSP-подобной конкурентности.
        Сообщение отредактировано: korvin -
          ИМХО выбор варианта зависит от того, что важнее: сообщение или датчик. Если от разных датчиков летит одно и то же сообщение и нам не так важен отправитель - то я бы использовал общий канал. Если смысл одноименных сообщений от разных датчиков - разный, то делал бы по каналу на датчик. Хотя, по сути, это просто вопрос кол-ва кода, нежели его наглядности или сложности.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0659 ]   [ 16 queries used ]   [ Generated: 19.04.24, 01:58 GMT ]