【发布时间】:2008-12-19 22:54:54
【问题描述】:
我最近阅读了很多关于编写多线程应用程序如何令人头疼的文章,并且已经对该主题了解得足够多,至少在某种程度上可以理解为什么会这样。
我读过使用函数式编程技术可以帮助减轻这种痛苦,但我从未见过一个简单的并发函数式代码示例。那么,使用线程有哪些替代方法?至少,有什么方法可以将它们抽象出来,这样您就不必考虑诸如锁定之类的事情以及特定库的对象是否是线程安全的。
我知道 Google 的 MapReduce 应该可以帮助解决这个问题,但我还没有看到一个简洁的解释。
虽然我在下面给出了一个具体的例子,但我对一般技术比解决这个具体问题更感兴趣(虽然使用这个例子来帮助说明其他技术会很有帮助)。
我在编写一个简单的网络爬虫作为学习练习时提出了这个问题。它工作得很好,但速度很慢。大多数瓶颈来自下载页面。它目前是单线程的,因此一次只能下载一个页面。因此,如果可以同时下载页面,即使爬虫在单处理器机器上运行,它也会显着加快速度。我研究过使用线程来解决问题,但它们吓到了我。有关如何在不引发可怕的线程噩梦的情况下为此类问题添加并发性的任何建议?
【问题讨论】:
标签: multithreading language-agnostic concurrency