基本概念
进程
1、程序由指令、数据组成,但指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存
(1)在指令运行过程中,需要用到磁盘、网络等设备
(2)进程用来加载指令、管理内存、管理 IO
2、当一个程序被运行,从磁盘加载程序代码至内存,此时开启一个进程
3、进程可以视为程序的一个实例
(1)大部分程序可以同时运行多个实例进程
(2)有的程序只能启动一个实例进程
线程
1、一个进程之内可以分为一到多个线程
2、一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给 CPU 执行
3、Java 中,线程作为最小调度单位,进程作为资源分配的最小单位
4、在 Windows 中进程是不活动的,只是作为线程的容器
进程、线程对比
1、进程基本上相互独立,而线程存在于进程内,是进程的一个子集
2、进程拥有共享的资源,如内存空间等,供其内部的线程共享
3、进程间通信较为复杂
(1)同一台计算机的进程通信称为 IPC(Inter-process communication)
(2)不同计算机之间的进程通信,需要通过网络,并遵守共同的协议,例如 HTTP
4、线程通信相对简单,因为它们共享进程内的内存,多个线程可以访问同一个共享变量
5、线程更轻量,线程上下文切换成本,一般上要比进程上下文切换低
并行、并发
1、单核 CPU 下,线程实际为串行执行
2、操作系统中有一个组件叫做任务调度器,将 CPU 的时间片(Windows 下时间片最小约为 15 毫秒)分给不同的程序使用
(1)由于 CPU 在线程间(时间片很短)的切换非常快,感官上同时运行
(2)微观串行,宏观并行
(3)一般将线程轮流使用 CPU 的做法称为并发(concurrent)
3、多核 CPU 下,每个核(core)都可以调度运行线程,这时线程可以并行
4、引用 Rob Pike 描述
(1)并发(concurrent):同一时间应对(dealing with)多件事情的能力
(2)并行(parallel):同一时间动手做(doing)多件事情的能力
应用
1、异步调用
(1)同步:需要等待结果返回,才能继续运行
(2)异步:不需要等待结果返回,就能继续运行
2、单核 CPU 下,多线程不能实际提高程序运行效率,只是为了能够在不同的任务之间切换,不同线程轮流使用CPU,不至于一个线程总占用 CPU,其他线程 STW
3、多核 CPU 可以并行跑多个线程,但能否提高程序运行效率需要分情况
4、IO 操作不占用 CPU,只是一般拷贝文件使用阻塞 IO,线程虽然不用 CPU,但需要一直等待 IO 结束,不能充分利用线程
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战