-
一、进程与线程
-
进程
- 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来在程序运行时加载指令、管理内存、管理IO的;
- 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。
- 进程可以视为程序的一个实例。大部分程序可以同时运行多个实例进程 (eg: 记事本、画图、浏览器等),也有的程序只能启动一个实例进程(eg: 网易云音乐,360安全卫士);
-
线程
- 一个进程之内可以分为一到多个线程;
- 一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给 CPU 执行,线程是用来执行指令的;
- Java 中,线程作为最小调度单位,进程作为资源分配的最小单位。在windows中进程是不活动的,只是作为线程的容器。
-
进程vs线程
- 线程存在于进程内,是进程的子集;
- 进程拥有共享的资源如内存空间,供其内部线程共享
- 通信
- 进程:同一台计算机的进程通信成为Inter-process communication;不同计算机之间的进程通信需要通过网络并遵守协议,例如HTTP;
- 线程:由于共享进程内的内存,线程通信相对简单,多个线程可以访问同一个共享变量
- 线程更轻量,线程上下文切换的成本一般比进程低
-
-
二、并行与并发
-
并行Parallel(拥有的人力)
- 多核CPU下,多个核心可以同时运行不同线程
- 并发+并行示意图
-
并发Concurrent(一个人三心二意的能力)
- 在单核CPU中,线程通过任务调度器轮流使用CPU的行为;
- 在单核CPU下,线程实际上还是串行执行,由于CPU在此案成间的切换非常快让人感觉是同时运行,因此可以被称为微观串行,宏观并行;
- 并发示意图
-
-
三、线程的应用
-
异步调用
- 异步vs同步
- 异步调用:不需要等待结果返回就能继续运行;
- 同步调用:需要等到结果返回;
- 实现方式
- 多线程可以放将方法的执行变为异步的,不需要干等结果返回;
- 适用场景
- (1)需要进行视频格式转换的操作时,可以新开一个线程处理,避免阻塞主线程;
- (2)tomcat的异步servlet,让用户线程处理耗时较长的操作,避免阻塞tomcat的工作线程;
- (3)ui程序中,开新线程进行其他操作,避免阻塞ui线程
- 异步vs同步
-
提升效率
- 可以充分利用多核CPU的优势,提升程序执行效率
- 案例:需要执行三个计算并汇总结果(多核CPU)
- 串行时三个计算的总执行时长=t1+t2+t3
- 并行时三个计算的总执行时间=max{t1,t2,t3}
-
并发编程 - (1) 进程与线程
最新推荐文章于 2024-09-25 10:59:43 发布