1.进程与线程
1.1 进程
进程是资源分配的单位,系统在运行时会为每个进程分配不同的内存区域
1.2 线程
线程是调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(pc),线程切换的开销小。
一个Java应用程序java.exe,其实至少有三个线程:main()主线程(受异常影响),gc()垃圾回收线程,异常处理线程。
进程是程序的一次执行过程,或是正在运行的一个程序
一个进程中的多个线程共享相同的内存单元/内存地址空间。它们从同一堆中分配对象,可以访问相同的变量和对象。这就使得线程间通信更简便、高效。但多个线程操作共享的系统资源可能就会带来安全的隐患。
2.单核CPU与多核CPU
单核CPU,是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务。Windows这种操作系统是把CPU的时间划分成长短基本相同的时间区间,即”时间片”,通过操作系统的管理(操作系统的时间片分时调度),把这些时间片依次轮流地分配给各个应用使用,CPU是在多个进程之间来回切换执行的。
举个例子:收费站只有收了费才能通过。此时有多个车道,但只有一个工作人员在收费。那么CPU就好比收费人员。如果有某个人磨磨蹭蹭不想交钱,那么收费人员可以把他“挂起”(晾着他,等他想通了,准备好了钱,再去收费)。但是因为CPU时间单元特别短,因此感觉不出来。
多核CPU,那就是在一个时间单元内,能真正的同时执行多个线程的任务。就好比有多个收费人员在同时收费。
3.并行与并发
并行:多个CPU同时执行多个任务,并行的多个任务之间是不互相抢占资源的。比如:多个人同时做不同的事。
并发:一个CPU(采用时间片)同时执行多个任务,并发的多个任务之间是互相抢占资源的。比如:多个人做同一件事
在有多个CPU的情况下,才会出现真正意义上的同时进行(即并行)。
以单核CPU为例,使用单个线程先后完成多个任务(调用多个方法),肯定比用多个线程来完成用的时间更短,为何仍需多线程呢?
提高程序的效率和响应速度。
同时执行多个任务、实现一些需要等待的任务时,可以拆分成多个线程同时执行