线程和进程

文章为在阅读线程和进程过程中整理的笔记,可能不够严谨,仅用于方便查找,如有问题请留言

什么是进程

  • 计算机中的进程是指在系统中正在运行的一个应用程序,它是一个具有一定独立功能的程序,是系统进行资源分配和调度的一个独立单位。
  • 进程是操作系统进行资源分配和调度的一个独立单位,是操作系统结构的基础。
  • 单核CPU永远只能执行一个应用程序,多个进程切换,造成了多个进程同时运行的假象
  • 进程调度是指操作系统根据进程的优先级和调度算法,将CPU分配给进程的过程
  • 进程、线程的切换 开销很大。原因是要保存当前进程的状态,然后加载新进程的状态

线程的概念

  • 线程是进程的一部分,一个进程可以只有一个线程。可以访问进程的资源。CPU粒度太大
  • 线程是操作系统能够进行 运算调度的最小单位
  • 线程的切换开销小,因为线程共享内存空间,进程不共享内存空间
  • 线程和进程分工不同
  • 进程是资源分配的最小单位,是分配资源的 比如内存资源
  • 线程是利用CPU执行代码的最小单位
  • 代码 指令 CPU执行 资源(材料)

多线程的优势与好处

  • 对于单核CPU 多线程没有优势,因为CPU同一时间只能处理一个线程
  • 多核CPU 多线程有优势,因为CPU同一时间可以处理多个线程
  • Python的多线程是假的,因为GIL锁的存在,同一时间只能有一个线程执行,不能充分利用多核CPU的优势

全局解释器锁GIL

  • Python不能利用多核CPU
  • 锁 线程安全
  • 内存资源 一个进程 有多个线程 共享内存资源

CPU密集型

CPU密集型也叫计算密集型,是指I/O在很短的时间就可以完成,CPU需要大量的计算和处理,特点是CPU占用率相当高 例如:压缩解压缩、加密解密、正则表达式搜索

IO密集型

IO密集型指的是系统运作大部分的状况是CPU在等I/O(硬盘/内存)的读写操作,CPU占用率任然较低。 例如:文件处理程序、网络爬虫程序、读写数据库程序

对于IO密集型程序,多线程是有意义的

  • Node遵循的是单线程,单进程的模式,node的单线程是指js的引擎只有一个实例,且在nodejs的主线程中执行,同时node以事件驱动的方式处理IO等异步操作。 node的单线程模式,只维持一个主线程,大大减少了线程间切换的开销,但是会有多个worker线程,用于执行异步操作
  • node.js单线程只是一个js主线程与ui渲染共享一个线程,本质上的异步操作还是由线程池完成的,node将所有的阻塞操作都交给了内部的线程池去实现,本身只负责不断的往返调度,并没有进行真正的I/O操作,从而实现异步非阻塞I/O,这便是node单线程和事件驱动的精髓之处了
  • 多线程的优势在于IO密集型程序,因为IO密集型程序的特点是CPU的利用率很低,大部分时间都在等待IO操作,比如网络请求,文件读写,请求数据库等
  • 多线程的优势在于CPU密集型程序,因为CPU密集型程序的特点是CPU的利用率很高,大部分时间都在执行计算操作
  • IO密集型 等待IO操作,不需要CPU参与计算,等待的时候就可以干别的去 所以适合Python
  • CPU密集型 需要CPU参与计算 所以不适合Python,Node.js

补充

Python语言本身并不适合处理CPU密集型的项目。这是因为Python的全局解释器锁(GIL)的存在,使得Python在同一时间只能执行一个线程,这对于CPU密集型的任务来说,无法充分利用多核CPU的优势,效率相对较低 然而,Python提供了一些方法来处理CPU密集型的任务:

  • 使用多进程:Python的多进程库multiprocessing可以创建多个进程,每个进程有自己的Python解释器和内存空间,可以充分利用多核CPU。
  • 使用C扩展:Python可以通过C/C++扩展来执行CPU密集型的任务,这样可以绕过GIL,提高执行效率。
  • 使用NumPy、SciPy等科学计算库:这些库的底层是用C或Fortran编写的,可以高效地处理CPU密集型的任务。
  • 使用PyPy解释器:PyPy是一个Python解释器,它使用JIT(Just In Time)编译技术,可以显著提高Python代码的执行效率。

总的来说,虽然Python本身不适合处理CPU密集型的任务,但是通过一些方法还是可以在Python中处理这类任务的

相关推荐
盼小辉丶14 分钟前
PyTorch强化学习实战——融合人类示范数据的高效强化学习
人工智能·pytorch·python·深度学习·强化学习
聪明蛋子哟27 分钟前
MCP协议深度落地:如何用Python/Java双语言实现统一的工具调用网关?
java·开发语言·python
李妍.41 分钟前
PyTorch GPU 版安装记录(RTX 5060 + Python 3.14)
人工智能·pytorch·python
90后的晨仔1 小时前
Python 基础语法完整汇总
python
广慈新医知1 小时前
当健康问题越来越复杂,AI更适合先帮我们“把问题问清楚”
人工智能·python
一晌小贪欢1 小时前
python-第27天:Python面向对象详解
开发语言·python·数据可视化·面向对象·python办公
青 春 记 忆1 小时前
LeetCode 350. 两个数组的交集 II|Python 解法详解
python·算法·leetcode
智购科技自动售卖机厂家2 小时前
2026自动售货机库存热力图分析:从设备分布到补货优先级的数据可视化实践~YH
大数据·python·信息可视化
鹿鹿学长3 小时前
微软把语音转写打到 0.1 美元/小时:5 个月降价 72%,AI 音频进入地板价时代
python·自动化
weixin_440730503 小时前
使用pytest中方法控制执行步骤(test_begin.py、test_end.py,@pytest.mark.run(order=1))
开发语言·python·pytest