Asynchronous 如何实现回调/生产者/消费者方案?

Asynchronous 如何实现回调/生产者/消费者方案?,asynchronous,clojure,callback,queue,Asynchronous,Clojure,Callback,Queue,我正在为Clojure热身,并开始编写一些简单的函数 我意识到这种语言显然非常适合并行计算,这让我思考。我有一个应用程序(用Java编写,但不管怎样),它的工作方式如下: 一个线程等待输入(在我的例子中是文件系统,但它可以是网络或任何东西)并在输入到达队列时放入该输入 几个使用者从该队列获取数据并并行处理数据 使输入并行处理的代码可能如下所示(这只是一个示例): 其中asynchFetchInput将生成一个线程,然后调用回调 这实际上只是一个例子,但如果有人能解释如何使用Clojure做类

我正在为Clojure热身,并开始编写一些简单的函数

我意识到这种语言显然非常适合并行计算,这让我思考。我有一个应用程序(用Java编写,但不管怎样),它的工作方式如下:

  • 一个线程等待输入(在我的例子中是文件系统,但它可以是网络或任何东西)并在输入到达队列时放入该输入

  • 几个使用者从该队列获取数据并并行处理数据

使输入并行处理的代码可能如下所示(这只是一个示例):

其中asynchFetchInput将生成一个线程,然后调用回调


这实际上只是一个例子,但如果有人能解释如何使用Clojure做类似的事情,这将极大地帮助我理解“更大的图景”。如果你必须转换数据,你可以将它转换成一个seq,然后你可以将它输入到
map
pmap
中,后者将并行处理它
filter
reduce
也都非常有用;因此,您可能想看看是否可以用这些术语表达您的逻辑


您可能还想查看基本Java中的并发实用程序,而不是生成自己的线程。

您查看了吗?@wieczo:还没有。。。我已经读了很多书,看了一些视频,但现在看到你的链接,我意识到这可能是我拼图中“缺失的部分”之一:)非常感谢你的链接,不客气!也许这些老问题可能会有帮助:,。@MichałMarczyk:当然有帮助,谢谢!
asynchFetchInput( new MyCallBack() {
    public void handle( Input input ) {
        queue.put(input)
    }
})