23、Clojure并发与宏编程深度解析

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 的原生线程、原始锁机制及其非常有用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值