Valery Solovey писал(а):
Что значит "своя очередь"? Это очередь, из которой поток выбирает сообщения для их обработки.
Да
Valery Solovey писал(а):
А значит, очередь - это ресурс, который находится в сфере влияния нескольких потоков.
Только если его рассматривать, как неблокирующую очередь (не просто неблокирующую, а еще с гарантией
без ожиданий) с правом на запись многими и на чтение только одним. Что, согласитесь, является весьма частным случаем.
Valery Solovey писал(а):
Можно сказать, что он "глобальный". И влияние на него оказывают оба потока, только влияние это находится в разных плоскостях.
Именно. И эту разницу необходимо отразить при описании алгоритма. Иначе человек, который пришел из «классической» школы, в которой все построено на мьютексах, локах и доступе к разделяемым данным, увидя такую глобальную переменную в алгоритме, будет думать о мьютексах, локах и разделяемых данных. И, соответсвенно, у него будет другой подход к алгоритму, потому что он будет считать эту глобальную переменную/очередь бутылочным горлышком. А она таковой не является.
То есть с точки зрения именно алгоритма очереди сообщений в Erlang'е полезно считать локальными для процесса, а не разделяемыми между несколькими процессами, потому что у нас есть возможность реализовать несколько вариантов:
- локальные очереди процессов (неблокирующие, не требующие мьютексов и т.п.)
- разделяемые данные (блокирующие, требующие мьютексы и т.п.)
- синхронные сообщения, использующие неблокирующие очереди (см.
call)
- асинхронные сообщения, использующие те же неблокирующие очереди (
cast)
И было бы хорошо иметь возможность указать эту разницу при создании алгоритма.
Да, вот только что в голову пришло.
Тут можно посмотреть, как выглядят типичные системы, написанные на Erlang'е «изнутри» (со всеми процессами и т.п.). Если мы будем использовать только глобальные переменные для описания взаимодействия процессов, то можно будет запутаться во всех этих переменных и кто и когда их изменяет.
То есть хотелось бы иметь более наглядную систему для описания взаимодействия разных процессов/потоков.