线程与进程的区别
简介
前面两篇文章已经介绍了线程与进程,我们知道计算机程序是可执行的二进制程序,它们只有加载到内存中,被操作系统调用才开始它们的生命周期,进程(有时被称为重量级进程)是程序的一次执行。每个进程都有自己的地址空间、内存、数据栈及其它记录其运行轨迹的辅助数据,正是因为独立,进程间只能使用进程间通信,无法直接使用共享信息;线程是进程中执行运算的最小单位,是进程中的一个实体,不直接拥有系统资源,一个进程可以创建多个线程,一个线程也可以创建多个线程, 同一进程间的线程可以并发执行并共享数据。下面我们来对比一下对于python来说,线程与进程之间的联系与区别
联系
- 一个程序由多个进程组成,一个进程由一个或多个线程组成,一个线程只能属于一个进程
- 系统资源都会分配给进程,线程不拥有资源,同一进程的多个线程共享进程的资源
- 不同进程之间的线程需要利用消息通信实现同步
区别
- 调度:线程是资源调度与分配的基本单位,进程是拥有资源的基本单位,是操作系统调度的最小单位
- 并发:不同进程之间可以并发执行,同一进程的多个线程也可以并发执行
- 资源:进程拥有独立的地址、数据栈,系统资源,线程不具有资源,但共享访问同一进程的资源
- 创建:由于进程创建时需要系统分配地址空间、系统资源等,创建进程会比线程系统开销大
详细区别
- 线程共享创建它的进程的地址空间;进程有自己的地址空间。
- 线程可以直接访问其进程的数据段(资源);进程有自己的资源(地址、数据栈等)。
- 线程可以直接通过共享变量的方式与进程中的其他线程通信;进程必须使用进程间通信来与同级进程通信。
- 新线程很容易创建;新进程需要复制父进程。
- 线程可以对同一进程的线程进行相当大的控制;进程只能对子进程进行控制。
- 主线程的改变(取消,优先级的改变,等等)可能会影响进程中其他线程的行为;对父进程的更改不会影响子进程。
总结
单位:线程是资源分配的单位,进程是操作系统调度的单位
资源开销:进程由于需要系统分配资源,相对于线程开销较大
通信:同一进程间的不同线程可以直接共享进程的资源,进程间只能使用进程间通信(队列、Manager等)
资源访问:同一进程的多个线程可以访问进程的资源,进程间默认无法访问资源,只能通过进程间通信
进程与线程的使用场景
由于python线程的GIL锁的存在,导致python线程只能运行在一个cpu上,因此python的线程适用于io密集型程序,由于文件读写需要时间,cpu可以在多个线程间快速切换
与此相比,进程则是可以运行在多个cpu上,加快了效率,适用于计算密集型程序,即需要进行逻辑处理、运算的程序。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现