1、进程与线程的概念
进程是操作系统对并发执行的程序在执行过程中进行资源分配、系统调度的基本单位,是一个动态概念。
与其对应的是程序,程序意味着一堆指令与数据的有序集合,是一个静态概念。
进程有三个基本状态:就绪、运行、阻塞。进程的状态转换图:就绪态势获得了除cpu外所有必须资源;运行态是就绪态的进程获取了cpu资源开始执行;阻塞态是运行中的程序缺乏除cpu外的某些资源,比如说等待下一个输入操作;
线程是进程的一部分,一个没有线程的进程就可以看作是单线程,因此线程可以看作轻量级的进程,此外在多线程环境下,线程是cpu调度的基本单位。
2、区别与联系
内存上来说:
同一进程中的所有线程共享本进程的资源,进程好比一辆火车,线程就是一节节车厢。线程除去共享进程的资源外,只有很少一部分的局部变量和堆栈。进程有自己的独立地址空间,而线程没有。
切换开销:
线程切换的开销要比进程切换小的多,因为进程的切换,需要加载上下文,保存上下文;上下文指的是为该进程分配除cpu以外的资源。而线程由于存在于进程之中,只保有很少量的局部变量以及堆栈,也就是其上下文的准备与保存相比进程小得多。
安全角度:
进程拥有独立的地址空间,独立的资源,如果一个进程崩溃,不会影响其他进程。而线程不同,线程共享进程内的资源,当一个线程崩溃,同进程下的所有线程均会崩溃。
执行过程:
进程拥有独立的程序入口,顺序执行序列,以及程序的出口。但线程没有,线程依赖于进程对其进行控制。
3、多线程
无论调度顺序怎样去改变,对于cpu来说就是轮流来。因为cpu相对于其他设备而言太快了,我们所能做的就是尽量的提高cpu的使用率,无论是分页调度制度,还是多线程。
多线程的意义仅仅存于单个进程之中。
可以拿qq来举例,电脑同时开qq,微信等各种软件,这就是多进程,进程之间切换比较慢,如果我们的计算机资源不足以为众多进程准备上下文,那在切换的时候就会出现卡顿。但正常来说,用户是感受不到这个切换的,而多线程之间的切换比进程之间就更快了,比如qq可以同时跟多个人聊天,以及语音。这个切换我们更是感受不到了。