(四)线程 和 进程 及相关知识点

目录

一、线程和进程

(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/diannao/68488.shtml

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

相关文章

python爬虫入门(一) - requests库与re库,一个简单的爬虫程序

目录 web请求与requests库 1. web请求 1.1 客户端渲染与服务端渲染 1.2 抓包 1.3 HTTP状态代码 2. requests库 2.1 requests模块的下载 2.2 发送请求头与请求参数 2.3 GET请求与POST请求 GET请求的例子: POST请求的例子: 3. 案例:…

Luzmo 专为SaaS公司设计的嵌入式数据分析平台

Luzmo 是一款嵌入式数据分析平台,专为 SaaS 公司设计,旨在通过直观的可视化和快速开发流程简化数据驱动决策。以下是关于 Luzmo 的详细介绍: 1. 背景与定位 Luzmo 前身为 Cumul.io ,专注于为 SaaS 公司提供嵌入式分析解决方案。…

在虚拟机里运行frida-server以实现对虚拟机目标软件的监测和修改参数(一)(android Google Api 35高版本版)

frida-server下载路径 我这里选择较高版本的frida-server-16.6.6-android-x86_64 以root身份启动adb 或 直接在android studio中打开 adb root 如果使用android studio打开的话,最好选择google api的虚拟机,默认以root模式开启 跳转到下载的frida-se…

C#编译报错: error CS1069: 未能在命名空间“System.Windows.Markup”中找到类型名“IComponentConnector”

文章目录 问题现象解决方案 问题现象 一个以前使用.NET Framwork 3.0框架开发的项目,在框架升级到.NET Framwork 4.7.2后, 如下代码: #pragma checksum "..\..\XpsViewer.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}&qu…

能源新动向:智慧能源平台助力推动新型电力负荷管理系统建设

背景 国家能源局近日发布《关于支持电力领域新型经营主体创新发展的指导意见》,鼓励支持具备条件的工业企业、工业园区等开展智能微电网建设,通过聚合分布式光伏、分散式风电、新型储能、可调节负荷等资源,为电力系统提供灵活调节能力&#x…

用WinForm如何制作简易计算器

首先我们要自己搭好页面 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace _7_简易计算…

论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(四)

Understanding Diffusion Models: A Unified Perspective(四) 文章概括学习扩散噪声参数(Learning Diffusion Noise Parameters)三种等效的解释(Three Equivalent Interpretations) 文章概括 引用&#xf…

【数据结构】(1)集合类的认识

一、什么是数据结构 1、数据结构的定义 数据结构就是存储、组织数据的方式,即相互之间存在一种或多种关系的数据元素的集合。 2、学习数据结构的目的 在实际开发中,我们需要使用大量的数据。为了高效地管理这些数据,实现增删改查等操作&…

Java 实现Excel转HTML、或HTML转Excel

Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,以便更好地利用和展示数据。本文将介绍如何通过 Java 实现 E…

【C语言】结构体与共用体深入解析

在C语言中,结构体(struct)和共用体(union)都是用来存储不同类型数据的复合数据类型,它们在程序设计中具有重要的作用。 推荐阅读:操作符详细解说,让你的编程技能更上一层楼 1. 结构体…

思维练习题

目录 第一章 假设法1.题目1. 如何问问题2. 他们的职业是分别什么3. 谁做对了4. 鞋子的颜色 2.答案 空闲时间写一些思维题来锻炼下思维逻辑(题目均收集自网上,分析推理为自己所写)。 第一章 假设法 一个真实的假设往往可以让事实呈现眼前&…

【C++高并发服务器WebServer】-10:网络编程基础概述

本文目录 一、MAC地址二、IP地址三、子网掩码四、TCP/IP四层模型五、协议六、socket七、字节序 一、MAC地址 网卡是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件,又称为网络适配器或网络接口卡NIC。其拥有 MAC 地址,属于 OSI模型的第2层…

为何SAP S4系统中要设置MRP区域?MD04中可否同时显示工厂级、库存地点级的数据?

【SAP系统PP模块研究】 一、物料主数据的MRP区域设置 SAP ECC系统中想要指定不影响MRP运算的库存地点,是针对库存地点设置MRP标识,路径为:SPRO->生产->物料需求计划->计划->定义每一个工厂的存储地点MRP,如下图所示: 另外,在给物料主数据MMSC扩充库存地点时…

C++ list 容器用法

C list 容器用法 C 标准库提供了丰富的功能&#xff0c;其中 <list> 是一个非常重要的容器类&#xff0c;用于存储元素集合&#xff0c;支持双向迭代器。<list> 是 C 标准模板库&#xff08;STL&#xff09;中的一个序列容器&#xff0c;它允许在容器的任意位置快速…

C++ | 红黑树

前言 本篇博客讲解c中数据结构红黑树&#xff0c;看这篇博客之前请先去看&#xff1a; C | AVL树_c avl树能有重复节点吗-CSDN博客 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青…

C语言从入门到进阶

视频&#xff1a;https://www.bilibili.com/video/BV1Vm4y1r7jY?spm_id_from333.788.player.switch&vd_sourcec988f28ad9af37435316731758625407&p23 //枚举常量 enum Sex{MALE,FEMALE,SECRET };printf("%d\n", MALE);//0 printf("%d\n", FEMALE…

WebSocket 详解:全双工通信的实现与应用

目录 一、什么是 WebSocket&#xff1f;&#xff08;简介&#xff09; 二、为什么需要 WebSocket&#xff1f; 三、HTTP 与 WebSocket 的区别 WebSocket 的劣势 WebSocket 的常见应用场景 WebSocket 握手过程 WebSocket 事件处理和生命周期 一、什么是 WebSocket&#xf…

一文讲解Java中Object类常用的方法

在Java中&#xff0c;经常提到一个词“万物皆对象”&#xff0c;其中的“万物”指的是Java中的所有类&#xff0c;而这些类都是Object类的子类&#xff1b; Object主要提供了11个方法&#xff0c;大致可以分为六类&#xff1a; 对象比较&#xff1a; public native int has…

51.和的逆运算问题|Marscode AI刷题

1.题目 问题描述 n 个整数两两相加可以得到 n(n - 1) / 2 个和。我们的目标是&#xff1a;根据这些和找出原来的 n 个整数。 按非降序排序返回这 n 个数&#xff0c;如果无解&#xff0c;输出 "Impossible"。 测试样例 样例1&#xff1a; 输入&#xff1a;n 3, …

Zemax 中的屋脊棱镜建模

光学棱镜是一种透明的光学元件&#xff0c;其表面平坦且抛光&#xff0c;可以折射光线。最常见的棱镜类型是三棱镜&#xff0c;它有两个三角形底座和三个矩形或略呈梯形的表面。棱镜通常由玻璃或丙烯酸等材料制成。当光线以一定角度进入棱镜时&#xff0c;它会在穿过棱镜时发生…