Выполнение двух кодов замыкания путем последовательного вызова основной функции и последующего обмена данными между ними - PullRequest
0 голосов
/ 19 октября 2019

У меня есть два пространства имен clojure в двух разных папках с их собственной главной функцией (поскольку я хочу генерировать классы и в конечном итоге создать jar)

(ns reward-module.cli) и (ns nelson_clojure.cli) у них обоих есть свои собственные главныефункции и так работают на отдельных основных потоках. Я хочу отправить некоторые значения из одного кода в другой и наоборот во время выполнения. Меня смущает использование и документирование каналов в clojure.

Я предполагаю, что когда я запускаю основной поток, он связан с портом, а когда я запускаю второй поток, который также связан с другим портом. Это правильно? и если да, то как мне общаться между ними. Как обмен значениями некоторых переменных во время выполнения.

Каналы в clojure ведут себя как порты? Если так, то где я даю информацию о номерах портов? Как мне получить их в первую очередь? За исключением просмотра подробного текста, когда начинается repl ...

Ответы [ 2 ]

1 голос
/ 19 октября 2019

Существует только один основной поток на процесс, и процессы не могут взаимодействовать, кроме как с помощью какого-либо межпроцессного взаимодействия. Сеть, сокеты, файлы, что-то в этом роде. Каналы Clojure, как и в clojure core.async, предназначены для связи между потоками (или даже просто для использования в качестве очередей внутри потока) в одном и том же процессе. Я думаю, что вы хотите создать отдельную основную функцию, которая создает поток, который выполняет функцию в reward-module.cli, поток, который запускает функцию в nelson_clojure.cli, и устанавливает какую-то связь между ними, т.е. с core.async.

Часть core.async clojure для храброго и правдивого может помочь вам. https://www.braveclojure.com/core-async/

0 голосов
/ 29 октября 2019

Внутри одного процесса JVM потоки разделяют память. Конструкции параллелизма Clojure предоставляют множество способов безопасного совместного использования значений в этой памяти и взаимодействия / координации между потоками внутри одной JVM .

Отдельные процессы JVM (читай: экземпляры процессов операционной системы) делаютне делить память, поэтому вам нужно явно настроить средства для их общения, например, через сокеты, используя один из многих установленных протоколов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...