2 进程与线程
2.1 进程与线程
进程
程序由指令和数据组成,程序的运行需要运行指令和加载数据,运行指令需要把指令加载到cpu、需要用到磁盘、网络等设备,数据需要加载到内存。 进程就负责加载执行、管理内存、管理IO等。
进程可以看作一个程序的实例,大多数程序可以同时运行多个实例进程。
线程
一个进程内可以有多个线程,一个线程就是一个指令流,将指令流的一条条指令以一定的顺序交给cpu执行。
进程和线程的区别
- Java中,进程是最小的资源分配的单位,线程是最小的调度单位。
- 线程共享进程的堆和方法区资源,每个线程有自己的程序计数器、虚拟机栈和本地方法栈。
- 进程之间的通信更复杂
- 进程作为资源分配的单位,内存空间相互独立,一个进程不能访问另一个进程的内存地址空间。进程的通信方式有共享内存、管道通信、消息传递、socket套接字。
- 线程共享进程的内存空间,通信高效但是需要注意同步问题。
- 线程更轻量,线程上下文切换成本比进程上下文切换成本小。
2.2 并行与并发
并行
同一时间做多件事情。
多核cpu下,每个cpu都可以调度运行线程,即线程并行处理。
并发
同一时间应对多件事情。
单核cpu下,线程实际是串行执行的。操作系统的任务调度器,将cpu的时间片分配给不同的线程使用,由于时间片很短 cpu线程切换非常快 感觉是并行执行。微观串行,宏观并行。
并发就是这种 线程轮流使用cpu的行为。
2.3 线程的应用
异步调用
- 同步:需要等待结果 才能继续运行。
- 异步:不需要等待结果 就能继续运行。
提高效率
多个任务,多核cpu多线程并行可以提高效率,单核cpu多线程是轮流执行不能提高效率。