通过顺序调用main函数并在它们之间通信来运行两个clojure代码

通过顺序调用main函数并在它们之间通信来运行两个clojure代码,clojure,port,publish-subscribe,channels,Clojure,Port,Publish Subscribe,Channels,我在两个不同的文件夹中有两个clojure名称空间,它们有自己的主函数(因为我想生成类并最终创建一个jar) (ns reward module.cli)和(ns nelson\u clojure.cli)它们都有自己的主功能,因此在不同的主线程上运行。我想在运行时将一些值从一个代码发送到另一个代码,反之亦然。我对clojure中通道的用法和文档感到困惑 我假设当我启动一个主线程时,它绑定到一个端口,当我启动第二个线程时,它也绑定到另一个端口。对吗?如果是这样的话,我该如何在他们之间沟通呢。比如

我在两个不同的文件夹中有两个clojure名称空间,它们有自己的主函数(因为我想生成类并最终创建一个jar)

(ns reward module.cli)
(ns nelson\u clojure.cli)
它们都有自己的主功能,因此在不同的主线程上运行。我想在运行时将一些值从一个代码发送到另一个代码,反之亦然。我对clojure中通道的用法和文档感到困惑

我假设当我启动一个主线程时,它绑定到一个端口,当我启动第二个线程时,它也绑定到另一个端口。对吗?如果是这样的话,我该如何在他们之间沟通呢。比如在运行时交换一些变量的值


clojure中的通道是否像端口一样工作?如果是,那么我在哪里提供有关端口号的信息?我首先要怎么得到这些?除了在repl启动时查看详细信息之外…

每个进程只有一个主线程,进程只能通过某种进程间通信进行通信。网络、套接字、文件等等。Clojure core.async中的Clojure通道用于同一进程中线程之间的通信(甚至用作线程内的队列)。我认为您需要创建一个单独的主函数,该函数创建一个在reward-module.cli中运行函数的线程,一个在nelson_clojure.cli中运行函数的线程,并在它们之间建立某种通信,即使用core.async


clojure for The brave and true的core.async部分可能会对您有所帮助

在单个JVM进程中,线程共享内存。Clojure的并发构造提供了多种方法来安全地共享内存中的值,并在同一JVM内的线程之间进行通信/协调

单独的JVM进程(读:操作系统进程实例)不共享内存,因此您需要显式地为它们设置一种通信方式,例如使用许多已建立的协议之一通过套接字进行通信