线程与进程
-
进程
具有一定独立功能的程序在一个数据集上的一次动态执行的结果,是操作系统进行资源分配和调度的一个独立单位,是应用程序进行的载体,进程一般由程序,数据集合,进程控制块三个部分组成
- 程序:进程要完成的功能
- 数据集合:在执行时需要的数据和工作区
- 程序控制块:进程的描述信息和控制信息
进程的特性
1. 动态性 进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的
2. 并发性 任何进程都可以和其他进程一起并发执行
3. 独立性 是系统进行资源分配和调度的一个独立单位
4. 结构性 由程序,数据集合,进程控制块三部分组成
-
线程
早期的操作系统并没有线程的概念,进程是拥有资源和独立运行的最小单位,也是程序执行的最小单位,后来因为程序的复杂程度增加,进程切换开销大,发明了线程,线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单位,是处理器调度和分派的基本单位,一个进程可以有一个或者多个线程。
进程与线程的区别
- 线程是程序执行的最小单位,进程是OS分配资源的最小单位
- 一个进程由一个或者多个线程组成,线程是一个进程中代码的不同执行线路
- 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间以及一些进程级别的资源,某进程内的线程在其他进程内不可见
-
调度和切换:线程上下文切换比进程要快
总之,线程与进程都是一种抽象的概念,线程是一种比进程小的抽象,线程和进程都可以用于实现并发
为何不使用多进程而使用多线程
多进程的意义:提高CPU的使用率
多线程的意义:提供应用程序的使用率
使用多线程的原因:
线程廉价,启动与退出快,对系统资源的冲击小,而且线程之间彼此共享了大部分核心对象的拥有权
并行与并发
-
并行
当系统有一个以上CPU时,当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)
-
并发
在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,这种方式我们称之为并发(Concurrent)
并发不是真正意义上的同时进行,只是CPU把一个时间段划分为几个时间片段,来回切换运行
-
并行与并发的区别
1. 并行指的是一个时间点同时发生多个事情
并发指的是一个时间段同时发生多个事情
2. 并行的多个任务不互相抢占资源
并发的多个任务互相抢占资源
3. 只有在多CPU或者一个CPU多核的情况中,才会发生并行
JVM的多线程
JVM启动至少启动了垃圾回收线程和主线程,所以是多线程的