学习目标

  1. 进程

  2. 线程

  3. 并发

  4. 并行


内容

一、进程与线程

“专业”点的说法就是:进程是资源分配的最小单位,线程是CPU调度的最小单位

JAVA进阶系列 - 并发编程 - 第1篇:进程&线程&并发&并行_java大哥,我错了,别打脸!

进程

线程就是用来加载指令、管理内存、管理IO的,可以说它是一个“执行中的程序”。程序由指令和数据组成,在程序未被运行时,就是一堆存放在磁盘中的二进制数据。只有当我们运行该程序,通过CPU去执行它里面的指令,将数据加载到内存中,这时才算是开启了一个线程。
例如:我们在windows系统中启动了一个浏览器,此时我们打开任务管理器,则可以在进程栏中查看到该进程。

JAVA进阶系列 - 并发编程 - 第1篇:进程&线程&并发&并行_java_02任务管理器

线程

一个进程中可以分为一到多个线程。它是操作系统能够进行运算调度的最小单位,是允许应用程序并发执行多个任务的一种机制。
一个线程对应一条指令流,将指令流中的一条条指令以一定的顺序交给CPU执行。同一个程序中的所有线程均会独立执行相同程序,且共享同一块内存区域。
例如:我们启动一个播放器程序来播放视频,这个程序就会创建两条线程同时运行,一条线程负责播放画面,另一条线程负责播放声音。两条线程同时进行,这样就不会导致我们只能看到画面听不到声音等情况出现。


二、并发与并行

这两个概念反映的是操作系统利用自身CPU资源来处理程序运行请求的两种不同方式。

并发

在上面我们说到线程中的指令都是交由CPU来执行的。如果将CPU的核数比喻为管道,那么在单核CPU中,我们多个线程是如何通过一个管道实现同时输出的呢?
这里就涉及到了一个时间片的概念。时间片,又称为“量子”或“处理器片”,它是操作系统分配给每个正在运行的进程微观上的一段CPU时间(windows下时间片最小约为15ms,linux上约为5ms)。
由于CPU在线程间的切换(时间片很短)速度非常快,用户是察觉不到线程的切换的,因此会给人一种多线程同时运行的感觉,而实际上线程还是串行执行的。
一般称呼这种线程轮流使用CPU的方式为并发(concurrent)

JAVA进阶系列 - 并发编程 - 第1篇:进程&线程&并发&并行_java_03轮流运行

并行

由于时代的发展,单核的CPU已经远远无法满足人们的使用需求,因此又有了多核CPU。多核CPU即多个CPU组成,这些CPU集成在一个芯片里,可以通过内部总线来交互数据,共享数据。在CPU的多个核心同时执行的多个任务就是并行任务

JAVA进阶系列 - 并发编程 - 第1篇:进程&线程&并发&并行_java_04同时运行

总结

  • 进程:资源分配的最小单位,加载指令、管理内存、管理IO的。
  • 线程:CPU调度的最小单位,指令流。
  • 并发:同一时间应对(dealing with)多件事情的能力。
  • 并行:同一时间动手做(doing)多件事情的能力。

今天的文章到这里就结束了,小伙伴们有什么建议或者意见请联系我改进哦,你们的支持是我最大的动力!!!