进程 线程 协程

进程(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. 上下文切换更快,这也是最重要的一点,因为协程在上下文切换中,比线程切换少了一个步骤,线程在申请内存是需要经过系统内核的,而协程不需要。这样少了一个流程自然就更快了。

 

posted @ 2020-06-16 11:24  songguojun  阅读(234)  评论(0编辑  收藏  举报