爬虫基础(四)线程 和 进程 及相关知识点

目录

一、线程和进程

(1)进程

(2)线程

(3)区别

二、串行、并发、并行

(1)串行

(2)并行

(3)并发

三、爬虫中的线程和进程

(1)GIL锁

(2)爬虫的多线程

(3)Python的多进程


一、线程和进程

(1)进程

所谓进程,就是正在运行的程序,它占用独立的内存区域

用通俗的话来说:

我们打开媒体播放器,就是打开了一个媒体播放器进程,

打开浏览器,就是打开了一个浏览器进程,

打开某软件,就是打开了某软件进程。

三个进程之间,相互独立,互不影响

但是,同样的由于创建和销毁进程需要分配和回收资源,

所以他们的开销较大

(2)线程

所谓线程,就是进程内的执行单元,而多个线程共享进程的内存空间。

比如,在浏览器进程中

我们一个页面播放音乐

一个页面播放视频

一个页面正在写东西

这三个页面就是三个线程,它们共享该进程的地址空间和其他资源

(3)区别

综上,二者有不同的应用场景:

  • 进程:适合需要高度隔离的任务,比如运行不同的应用程序。

  • 线程:适合需要高效共享数据和并发执行的任务,比如多任务处理、并行计算。


所以,如果你明白了这个,就明白了单线程和多线程、单进程和多进程了。

单线程程序指的是一个进程中只有一个执行线程

多线程程序指的是在一个进程中可以同时有多个执行线程,线程共享进程的资源

单进程指的是一个程序只在一个进程中运行

多进程指的是一个程序可以启动多个独立的进程,每个进程都有自己的内存空间和资源

二、串行、并发、并行

(1)串行

任务按照一定的顺序依次执行,每个任务必须等待前一个任务完成后才能开始执行。

串行的概念很简单,不必多说。

即执行完一个任务,再执行一个任务。

(2)并行

多个任务同时运行(需要多核CPU支持)

比如,现在有三个任务a,b,c

并行就是

同时执行a,b,c三个任务

(3)并发

多个任务交替执行(单核CPU即可)

比如,三个任务a,b,c

并发就是

执行a一段时间,再执行b一段时间,再执行c一段时间

然后返回再执行a一段时间,……

这样的行为,可以让单核CPU看起来,也像是同时执行。

三、爬虫中的线程和进程

(1)GIL锁

GIL:互斥锁。作用就是限制多线程同时执行,保证同一时间内只有一个线程在执行。

最初,GIL锁发明是用来:

防止多个线程同时执行 Python 代码而造成数据不一致性的问题。

即,多个线程可能会同时修改共享数据,导致数据不一致

而GIL锁的出现,则可以解决这一问题。

但,这样同时又出现了新的问题:使得 Python 的多线程无法充分利用多核处理器。

即,限制了并行性,使得多个线程的执行还是会被串行化

举个例子:

比如三个任务a,b,c

串行的执行时间=线程A的执行时间+线程B的执行时间+线程C的执行时间。

并发的执行时间=线程A的执行时间+线程B的执行时间+线程C的执行时间+交换线程执行所需时间。

从这上面来看,Python的多线程实现反而不能提高工作效率,还会因交换线程所增加工作时间

(注:这个例子,就叫执行CPU密集型任务时的问题)

(2)爬虫的多线程

根据上文,由于GIL存在,在执行计算密集型任务时,多线程并不能发挥优势

那么它的优势到底在哪呢?

其优势在于IO密集型任务

比如:

在一个程序的进程中,

有些操作需要时间等待(如爬虫时,我们向服务器发起请求,此时遇到等待)

这时,多线程作用就发挥出来了,

它可以在等待的同时,去执行其他操作,从而提高整体效率。

(3)Python的多进程

对于多进程来说,每一个进程都有自己的GIL锁

所以在多核CPU下,多进程能更好的发挥多核优势

当然,这是针对计算密集型任务来说的,而对于IO密集型任务则差别不大

但从整体来看,python中多进程比多线程更有优势

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/894276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自签证书的dockerfile中from命令无法拉取镜像而docker的pull命令能拉取镜像

问题现象: docker pull images拉取镜像正常 dockerfile中的from命令拉取镜像就会报出证书错误。报错信息如下: [bjxtbwj-kvm-test-jenkins-6-243 ceshi_dockerfile]$ docker build . [] Building 0.4s (3/3) FINISHED …

计算机网络 IP 网络层 2 (重置版)

IP的简介: IP 地址是互联网协议地址(Internet Protocol Address)的简称,是分配给连接到互联网的设备的唯一标识符,用于在网络中定位和通信。 IP编制的历史阶段: 1,分类的IP地址: …

面对企业文件交换难题,镭速跨网文件交换系统是如何解决的?

在当今这个数字化快速发展的时代,企业越来越依赖于数据交换来维持其业务运作。无论是内部网络之间的沟通还是与外部合作伙伴的数据共享,高效且安全的跨网文件交换都显得尤为重要。然而,在实际操作中,许多企业面临着各种各样的挑战…

Many Whelps! Handle It! (10 player) Many Whelps! Handle It! (25 player)

http://db.nfuwow.com/80/?achievement4403 http://db.nfuwow.com/80/?achievement4406 最少扣你50DKP! 第二阶段 当奥妮克希亚升空后,在10秒内引出50只奥妮克希亚雏龙,随后击败奥妮克希亚。 World of Warcraft [CLASSIC][80猎人][Grandel][最少扣你5…

自制虚拟机(C/C++)(一、分析语法和easyx运用,完整虚拟机实现)

网上对虚拟机的解释很多,其实本质就一句话 虚拟机就是机器语言解释器 我们今天要实现汇编语言解释器,下一次再加上ndisasm反汇编器就是真正虚拟机了 注:这里的虚拟机指的是VMware一类的,而不是JVM,python一样的高级语言解释器 …

36. printf

1. printf 格式化函数说的是 printf、 sprintf 和 scanf 这样的函数,分为格式化输入和格式化输出两类函数。学习 C 语言的时候常常通过 printf 函数在屏幕上显示字符串,通过 scanf 函数从键盘获取输入。这样就有了输入和输出了,实现了最基本…

实验八 JSP访问数据库

实验八 JSP访问数据库 目的: 1、熟悉JDBC的数据库访问模式。 2、掌握使用My SQL数据库的使用 实验要求: 1、通过JDBC访问mysql数据,实现增删改查功能的实现 2、要求提交实验报告,将代码和实验结果页面截图放入报告中 实验过程&a…

python学opencv|读取图像(四十六)使用cv2.bitwise_or()函数实现图像按位或运算

【0】基础定义 按位与运算:全1取1,其余取0。按位或运算:全0取0,其余取1。 【1】引言 前序学习进程中,已经对图像按位与计算进行了详细探究,相关文章链接如下: python学opencv|读取图像&…

使用vhd虚拟磁盘安装两个win10系统

使用vhd虚拟磁盘安装两个win10系统 前言vhd虚拟磁盘技术简介准备工具开始动手实践1.winX选择磁盘管理2.选择“操作”--“创建VHD”3.自定义一个位置,输入虚拟磁盘大小4.右键初始化磁盘5.选择GPT分区表格式6.右键新建简单卷7.给卷起个名字,用于区分8.打开…

基于云计算、大数据与YOLO设计的火灾/火焰目标检测

摘要:本研究针对火灾早期预警检测需求,采用在Kaggle平台获取数据、采用云计算部署的方式,以YOLOv11构建模型,使用云计算服务器训练模型。经训练,box loss从约3.5降至1.0,cls loss从约4.0降至1.0&#xff0c…

计算机毕业设计Python+CNN卷积神经网络考研院校推荐系统 考研分数线预测 考研推荐系统 考研爬虫 考研大数据 Hadoop 大数据毕设 机器学习

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

小程序-基础加强-自定义组件

前言 这次讲自定义组件 1. 准备今天要用到的项目 2. 初步创建并使用自定义组件 这样就成功在home中引入了test组件 在json中引用了这个组件才能用这个组件 现在我们来实现全局引用组件 在app.json这样使用就可以了 3. 自定义组件的样式 发现页面里面的文本和组件里面的文…

docker安装emqx

emqx安装 拉取emqx镜像 docker pull emqx/emqx:v4.1.0 运行docker容器 docker run -tid --name emqx -p 1883:1883 -p 8083:8083 -p 8081:8081 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:v4.1.0 放行端口 1、如果要是自己的虚拟机,并且关闭了防火墙&a…

【4Day创客实践入门教程】Day4 迈向高手之路——进一步学习!

Day4 迈向高手之路——进一步学习! 目录 Day4 迈向高手之路——进一步学习!更多的开发板外壳制作 Day0 创想启程——课程与项目预览Day1 工具箱构建——开发环境的构建Day2 探秘微控制器——单片机与MicroPython初步Day3 实战演练——桌面迷你番茄钟Day4…

深度学习之“缺失数据处理”

缺失值检测 缺失数据就是我们没有的数据。如果数据集是由向量表示的特征组成,那么缺失值可能表现为某些样本的一个或多个特征因为某些原因而没有测量的值。通常情况下,缺失值由特殊的编码方式。如果正常值都是正数,那么缺失值可能被标记为-1…

日志收集Day007

1.配置ES集群TLS认证: (1)elk101节点生成证书文件 cd /usr/share/elasticsearch ./bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass "" --days 3650 (2)elk101节点为证书文件修改属主和属组 chown elasticsearch:elasticsearch con…

arm-linux-gnueabihf安装

Linaro Releases windows下打开wsl2中的ubuntu,资源管理器中输入: \\wsl$gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz 复制到/home/ark01/tool 在 Ubuntu 中创建目录: /usr/local/arm,命令如下: …

LabVIEW透镜多参数自动检测系统

在现代制造业中,提升产品质量检测的自动化水平是提高生产效率和准确性的关键。本文介绍了一个基于LabVIEW的透镜多参数自动检测系统,该系统能够在单一工位上完成透镜的多项质量参数检测,并实现透镜的自动搬运与分选,极大地提升了检…

【算法】动态规划专题① ——线性DP python

目录 引入简单实现稍加变形举一反三实战演练总结 引入 楼梯有个台阶,每次可以一步上1阶或2阶。一共有多少种不同的上楼方法? 怎么去思考? 假设就只有1个台阶,走法只有:1 只有2台阶: 11,2 只有3台…

C++11(中)

新增默认成员函数 C11之前,默认成员函数有六个,构造函数,析构函数,拷贝构造,拷贝赋值重载,取地址重载,const 取地址重载。 C11增加了 移动构造 和 移动赋值重载 如果类没有实现移动构造&…