一、进程
定义:进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础;“执行中的程序”
进程是线程的容器;进程是程序的实体;
特征:
动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的;
并发性:任何进程都可以同其他进程一起并发执行
独立性:进程是一个独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
异步性:由于进程间的相互制约,使进程具有执行的间断性;进程按各自独立的、不可预知的速度向前推进;
切换: 进程切换就是从正在运行的进程中收回处理器,然后再使待运行进程来占用处理器; 在切换时,一个进程存储在处理器各寄存器中的中间数据叫做进程的上下文,所以进程的切换实质上就是被中止运行进程与待运行进程上下文的切换。在进程未占用处理器时,进程的上下文是存储在进程的私有堆栈中的;
状态:
就绪状态:进程已获得除处理器外所需资源,等待分配处理器资源;只要分配了处理器进程就可执行;
运行状态:进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时,通常会自动执行系统的空闲进程;
阻塞状态:由于进程等待某种条件,在条件满足之前无法继续执行。
缺点:进程只能一个时间干一件事,如果想同时干多件事,进程就无能为力了;
进程在执行过程中如果阻塞,那么整个进程就会挂起;
切换进程时存在较大的开销;
二、线程
定义:操作系统能够记性运算调度的最小单位。程序执行的最小单位;
特征:
轻型实体:线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源;
独立调度和分派的基本单位:线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位;由于线程很“轻”,所以线程切换非常迅速且开销小;
可并发执行:一个进程中的多个线程之间,可以并发执行;不同进程之间的线程也能并发执行;
共享进程资源:同一进程中的各个线程,都可以共享该进程锁拥有的资源;
状态:
- 新线程态:生成一个新线程,此时仅仅是一个空线程对象,还没有分配到系统资源;new方法之后,start之前处于新线程状态,可以调用start启动或者stop终止方法
- 可运行态:start方法产生运行线程所必须的资源,调用线程执行,并且调用线程的run()方法;这时的线程并不总是一直占用处理机;
- 阻塞态:sleep()方法被调用、wait()等待条件变量、县城处于I/O请求的等待;
- 死亡态:run()方法返回、stop()方法调用,这两种情况线程进入死亡态;
优点:
1、提高程序的执行效率;
三、协程
-
概念
协程:是一种比线程更加轻量级的存在,协程不是被操作系统内核所管理,而完全是由程序所控制;由程序员自己写程序来管理的轻量级线程叫做用户空间线程;
自主调度来支持并发
好处就是性能得到了很大的提升,不会像线程切换那样消耗资源; -
原理:当出现IO阻塞的时候,由协程的调度器进行调度,通过将数据立刻yield掉(主动让出),并且记录当前栈上的数据,阻塞完后立刻再通过线程恢复栈,并把阻塞的结果放到这根额线程上去跑;
协程的暂停完全由程序控制,发生在用户态上;而线程的阻塞状态是由操作系统内核来进行切换,发生在内核态上; -
优点:极高的执行效率:不是线程切换,没有线程切换的开销;
在同一个线程上,可以避免竞争关系而使用锁; -
特点:有独立的栈空间;共享程序堆空间;调度由用户控制;协程是轻量级的线程
四、区别
线程和进程的区别:
1、地址空间和其他资源:进程间相互独立,同一进程的各线程 间共享。某进程内的线程在其他进程不可见;
2、通信:进程间通信IPC,线程可以直接读写进程数据段来进行通信;
3、调度和切换:线程上下文切换比进程上下文切换要快得多;
4、在多线程OS中,进程不是一个可执行的实体;
【联系】
1、一个线程只属于一个进程,而一个进程可以有多个线程;每个线程可以执行不同的任务;
2、资源分配给进程,同一进程的所有线程共享该进程的所有资源;
3、线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步;