如何实现回调/生产者/消费者计划?

时间:2012-01-14 13:40:03

标签: asynchronous clojure callback queue

我正在使用Clojure进行热身,并开始编写一些简单的函数。

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

  • 一个线程等待输入进来(在我的情况下是文件系统,但它可能是网络或其他)并在输入到达队列后放入该输入

  • 多个消费者从该队列中获取数据并并行处理数据

将输入并行处理的代码可能如下所示(仅作为示例):

asynchFetchInput( new MyCallBack() {
    public void handle( Input input ) {
        queue.put(input)
    }
})

其中 asynchFetchInput 会产生一个Thread,然后调用回调。

这只是一个例子,但如果有人能够解释如何使用Clojure做类似的事情,那将极大地帮助我理解“更大的图景”。

1 个答案:

答案 0 :(得分:3)

如果您必须转换数据,可以将其转换为seq,然后您可以将其提供给mappmap后者将并行处理它。 filterreduce也非常有用;所以你可能想知道你是否可以用这些术语来表达你的逻辑。

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