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



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

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

我假设当我启动一个主线程时,它绑定到一个端口,当我启动第二个线程时,它也绑定到另一个端口。这是对的吗?如果是这样,那么我如何在它们之间进行通信。就像在运行时交换某些变量的值一样。

Clojure 中的通道是否表现得像端口?如果是这样,那么我在哪里提供有关端口号的信息?我首先如何获得这些?除了在 repl 开始时查看详细内容...

每个进程只有一个主线程,除非通过某种进程间通信,否则进程无法通信。网络,套接字,文件,类似的东西。Clojure 通道与 clojure core.async 中一样,用于同一进程中线程之间的通信(甚至只是用作线程中的队列(。我认为你想要的是创建一个单独的主函数,创建一个在 reward-module.cli 中运行函数的线程,一个在 nelson_clojure.cli 中运行函数的线程,并在它们之间建立某种通信,即与 core.async。

clojure为勇敢和真实的人准备的core.async部分可能会帮助你。 https://www.braveclojure.com/core-async/

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

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

相关内容

最新更新