进程 线程 协程
进程(Process)
我们知道操作系统可以管理计算机的资源(IO,处理器,文件,存储器),那么如果没有操作系统那么该如何管理计算机?
在没有操作系统之前,计算机只能运行一个程序,所有的资源只属于当前运行的程序。但是当前程序不能完全合理的去运用资源,因此在配置操作系统之后就引入了多道程序的概念。这样可以合理的隔离资源,运行环境,提升资源利用率。在引入多道程序的概念,操作系统可以对每个程序进行资源的分配,那么进程就是资源分配的基本单位。
为什么需要进程
1. 进程是操作系统进行资源分配和调度的基本单位。
2. 进程昨晚程序独立运行的载体来保障程序的正常执行。
3. 进程可以使操作系统的利用率大大提升。
进程分类
1. 守护进程。
2. 孤儿进程。
3. 僵尸进程。
查看进程
Linux命令:ps
使用“活动监视器”来查看 Mac 上所运行进程
进程的状态
进程的状态反映进程执行过程的变化。这些状态随着进程的执行和外界条件的变化而转换。进程的状态有三态模型(运行,就绪,等待)也有五态模型(新建,就绪,运行,等待,终止)。
1. 运行:正占用处理器。
2. 就绪:只要获得处理器即可运行。
3. 等待(阻塞):正等待某个事件(如I/O完成)的发生。
4. 新建状态:一个进程刚刚建立,但还未将它送入就绪队列时的状态。
5. 终止状态:当一个进程已经正常结束或异常结束,系统已将它从就绪队列中移出,但尚未将它撤消时的状态。
线程(Thread)
线程有时被称为轻量级进程(Lightweight Process,LWP),是操作系统进行运行调度的最小单位。线程是被包含在进程中的,是进程实际运行的的工作单位。一个进程可并发多个线程,每个线程可以执行不同的任务。
进程里的资源是被线程共享的。
查看线程的方法
因为线程是从属于进程的,我们先找到一个进程的Pid,在命令行中我们可以使用命令lsof -i -P找到进程所属的Pid。我系统中火狐浏览器的Pid是1132。
在使用命令ps -M 1132查看Pid为1132下的线程情况。
协程(Coroutines)
是一种用户态下的线程,但是比线程更加轻量,也可以理解为优化过后的线程。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。进程和线程是由操作系统内核所管理,而协程不会,而是完全是由程序所控制(也就是在用户态执行)。
协程的优点:
1. 协程的内存消耗更小,举例来说,生成一个线程需要8M的内存,那么生成一个协程则只需要2kb的内存空间。
2. 上下文切换更快,这也是最重要的一点,因为协程在上下文切换中,比线程切换少了一个步骤,线程在申请内存是需要经过系统内核的,而协程不需要。这样少了一个流程自然就更快了。