我正在使用Clojure进行热身,并开始编写一些简单的函数。
我意识到这种语言显然非常适合并行计算,这让我思考。我有一个应用程序(用Java编写,但无论如何),它的工作方式如下:
一个线程等待输入进来(在我的情况下是文件系统,但它可能是网络或其他)并在输入到达队列后放入该输入
多个消费者从该队列中获取数据并并行处理数据
将输入并行处理的代码可能如下所示(仅作为示例):
asynchFetchInput( new MyCallBack() {
public void handle( Input input ) {
queue.put(input)
}
})
其中 asynchFetchInput 会产生一个Thread,然后调用回调。
这只是一个例子,但如果有人能够解释如何使用Clojure做类似的事情,那将极大地帮助我理解“更大的图景”。
答案 0 :(得分:3)
如果您必须转换数据,可以将其转换为seq,然后您可以将其提供给map
或pmap
后者将并行处理它。 filter
和reduce
也非常有用;所以你可能想知道你是否可以用这些术语来表达你的逻辑。
您可能还想查看基本Java中的并发实用程序,而不是生成自己的线程。