Вот код:Гарантируется ли заказ, когда несколько процессов ожидают ввода данных в один и тот же канал?
(ns typedclj.core
(:require [clojure.core.async
:as a
:refer [>! <! >!! <!! go chan buffer close! thread
alts! alts!! timeout]])
(:gen-class))
(def mychan (chan))
(go (while true
(>! mychan "what is this?")))
(go (loop [i 0]
(>! mychan (str "msg" i))
(recur (inc i))))
(go (loop [i 0]
(>! mychan (str "reply" i))
(recur (inc i))))
(go (loop [i 0]
(>! mychan (str "curse" i))
(recur (inc i))))
Некоторые эксперименты в РЕПЛ предполагает, что канал принимает данные от каждого процесса 4, в свою очередь:
(<!! mychan)
=> "what is this?"
(<!! mychan)
=> "msg0"
(<!! mychan)
=> "reply0"
(<!! mychan)
=> "curse0"
(<!! mychan)
=> "what is this?"
(<!! mychan)
=> "msg1"
(<!! mychan)
=> "reply1"
(<!! mychan)
=> "curse1"
(<!! mychan)
=> "what is this?"
(<!! mychan)
=> "msg2"
(<!! mychan)
=> "reply2"
(<!! mychan)
=> "curse2"
Я интересно ли порядок всегда поддерживается , то есть процесс, который начался первым, также будет подаваться на канал сначала, в каждом цикле.