返回介绍

并行执行

发布于 2025-01-25 22:50:11 字数 912 浏览 0 评论 0 收藏 0

async 不具有处理并行流的功能,其中可以找到 each()map()filter()reject()detect()some()every()concat()parallel()applyEach()times() 。它们遵循与我们已经看到的用于顺序执行的功能相同的逻辑,区别在于所提供的任务是并行执行的。

为了证明这一点,我们可以尝试应用上述功能之一来实现我们的 Web 爬虫 应用程序的第三版,即使用无限制的并行流程来执行下载。

如果我们记住我们之前使用的代码来实现 spiderLinks() 函数的顺序版本,那么调整它使其并行工作就比较简单:

function spiderLinks(currentUrl, body, nesting, callback) {
  // ...
  async.each(links, (link, callback) => {
    spider(link, nesting - 1, callback);
  }, callback);
}

这个函数与我们用于顺序下载的功能完全相同,但是使用的是 async.each() 而非 async.eachSeries() 。这清楚地表明了使用库(例如 async )抽象异步流的功能。代码不再绑定到特定的执行流程了,没有专门为此写的代码。大多数只是应用逻辑。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文