返回介绍

并发

发布于 2025-02-19 22:34:17 字数 881 浏览 0 评论 0 收藏 0

该节我们来讲讲爬虫中的一个难点,并发。并发是什么,并发即同时启动多个进程/线程来运行所给予的任务.那进程/线程又有都是什么呢?我们来简单的介绍一下。

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。

而线程,有时被称为轻量级进程 (Lightweight Process,LWP)。线程是进程中的一个实体,可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。

我们一般讲的爬虫并发,是指在同一个时间内,有 N 个爬虫同时执行者不同的链接这种情况.那么现在来看看有些语言对于并发的支持性如何.在此我拿我写过的几种语言的爬虫举个例子。

  • python 由于 GIL(Global Interpreter Lock:全局解释锁)机制的存在,导致在多线程上效率极低.因为 GIL 机制其作用简单说就是:对于一个解释器,只能有一个线程在执行 bytecode.所以,我们一般用 multiprocessing 来实现多进程。
  • javascript,由于与 golang 一样被开发时就被当作要处理高并发的需求,所以他们自身的并发都是原生支持的,我用起来很喜欢.比如 javascript 的 eventproxy 模块用来控制并发并且将串行等待变成并行等待,提升多异步协作场景下的执行效率。
  • golang 的 sync 则可以使用协程方式来进行并发。线程并发时多个线程相对独立,有自己的上下文,切换受系统控制;而协程并发时协程也相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。

很明显,语言特性决定了该语言的并发性能.你现在去翻翻你语言的文档,看看你语言对并发的支持力度有多少呢?

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

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

发布评论

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