Здесь следует отметить несколько моментов.
Во-первых, пул потоков, в котором создаются потоки с помощью clojure.core.async / thread, называется так называемым кэшированным пулом потоков, то есть, хотя он будет-использовать недавно использованные потоки внутри этого пула, он по сути неограничен.Что, конечно, означает, что он может потенциально потреблять много системных ресурсов, если его не проверять.
Но, учитывая, что то, что вы делаете внутри каждого асинхронного процесса, очень легкое, потоки для меня кажутся немного излишними.Конечно, также важно учитывать количество элементов, которые вы ожидаете получить во входном потоке, если это число велико, вы можете переполнить пул потоков core.async для макросов go, потенциально до точки, в которой мы ожидаемпоток, который станет доступным.
Вы также не упомянули о том, откуда вы берете входные значения, являются ли входные данные фиксированным набором данных, который остается постоянным в начале программы, или являются входными данныминепрерывно подается во входной поток из какого-то источника с течением времени?
Если это первое, то я бы посоветовал вам больше ориентироваться на преобразователи, и я бы сказал, что модель CSP не подходит для вашей проблемы, поскольку вы не моделируете взаимодействие между отдельными компонентами в вашей программе,скорее вы просто обрабатываете данные параллельно.
Если это последнее, то я предполагаю, что у вас есть какой-то другой процесс, который прослушивает канал результатов и выполняет что-то важное с этими результатами, и в этом случае я бы сказал, что использование go-блоков вполне приемлемо.