JUC学习笔记-进程与线程

34 阅读2分钟

2 进程与线程

2.1 进程与线程

进程

程序由指令和数据组成,程序的运行需要运行指令和加载数据,运行指令需要把指令加载到cpu、需要用到磁盘、网络等设备,数据需要加载到内存。 进程就负责加载执行、管理内存、管理IO等。

进程可以看作一个程序的实例,大多数程序可以同时运行多个实例进程。

线程

一个进程内可以有多个线程,一个线程就是一个指令流,将指令流的一条条指令以一定的顺序交给cpu执行。

进程和线程的区别

  • Java中,进程是最小的资源分配的单位,线程是最小的调度单位。
  • 线程共享进程的堆和方法区资源,每个线程有自己的程序计数器、虚拟机栈和本地方法栈。
  • 进程之间的通信更复杂
    • 进程作为资源分配的单位,内存空间相互独立,一个进程不能访问另一个进程的内存地址空间。进程的通信方式有共享内存、管道通信、消息传递、socket套接字。
    • 线程共享进程的内存空间,通信高效但是需要注意同步问题。
  • 线程更轻量,线程上下文切换成本比进程上下文切换成本小。

2.2 并行与并发

并行

同一时间做多件事情。

多核cpu下,每个cpu都可以调度运行线程,即线程并行处理。

并发

同一时间应对多件事情。

单核cpu下,线程实际是串行执行的。操作系统的任务调度器,将cpu的时间片分配给不同的线程使用,由于时间片很短 cpu线程切换非常快 感觉是并行执行。微观串行,宏观并行。

并发就是这种 线程轮流使用cpu的行为。

2.3 线程的应用

异步调用

  • 同步:需要等待结果 才能继续运行。
  • 异步:不需要等待结果 就能继续运行。

提高效率

多个任务,多核cpu多线程并行可以提高效率,单核cpu多线程是轮流执行不能提高效率。