В Clojure можно построить трубопроводы с участием шагов (s
), некоторые дорогие (S
), в многостадийного процесса связаны друг с другом синхронно (->
) или асинхронно (~>
) с помощью comp
или chan
соответственно. Я пытаюсь понять, какие каналы гранулярности необходимы, чтобы избежать блокировки и повышения производительности.Clojure: сколько асинхронности необходимо в конвейере процесса?
Мы могли бы использовать каналы для подключения каждого шага, но это кажется ненужным накладными расходами.
~> s ~> s ~> S ~> s
Или мы могли бы использовать один канал спереди и синхронно составлять другие шаги. Это кажется мне достаточно, чтобы избежать блокировки основного процесса.
~> s -> s -> S -> s
Я думаю, что это то же самое, как:
~> S
бы один предпочитает более меньшее количество каналов? Зачем?
Я думаю, что второй пример похож на вызов веб-работника в браузере, поскольку когда один пересекает границу, как соединяются бэкэнд-биты, не будет сильно влиять на основной поток.