Clojure并发与宏编程深度解析
1. 并发编程相关
在并发编程中,我们有一个功能完备的爬虫程序,它能完成一些有一定价值的工作。不过,它并非最优方案,只是十分基础,若要大规模使用,还需进行各种细微的改进,但它的基础架构是清晰的。
在代理操作方面,将其分为可能阻塞(由于I/O或其他等待条件)和不会阻塞(即CPU密集型处理)的操作,能使我们充分利用所有可用资源。我们可以通过以下方式进行测试:
(alter-meta! #'process assoc ::blocking true)
;= {:arglists ([{:keys [url content]}]), :ns #<Namespace user>,
;= :name process, :user/blocking true}
这一操作的实际效果是,所有与HTML解析、链接搜索以及单词频率计算相关的文本处理都将无限制地进行。如下代码展示了测试爬虫的过程:
(test-crawler 25 "http://www.bbc.co.uk/news/")
;= [573 80576]
然而,这实际上对吞吐量产生了负面影响,总体降幅接近15%。因为此时最多会有25个活跃且“贪婪”的代理争夺CPU核心,这会累积性地减慢CPU密集型工作负载。
在使用 Java 的并发原语时,虽然我们深入研究了 Clojure 广泛的并发和状态管理特性,但 Java 的原生线程、原始锁机制及其非常有用
超级会员免费看
订阅专栏 解锁全文
672

被折叠的 条评论
为什么被折叠?



