zoukankan      html  css  js  c++  java
  • 进程 线程 协程

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

  • 相关阅读:
    Codeforces 1005E1&2 Median on Segments (General Case & Permutations Edition)
    洛谷 P3952 时间复杂度 【模拟】【2017 noip d1t2】
    Codeforces 1000E We Need More Bosses 【无向图缩点】【树的直径】
    Codeforces 1003E Tree Constructing 【构造】【性质】
    2019年7月5日_实验室学术论文研讨
    2019年6月28日实验室学术讨论会议
    2019年6月12日实验室学术讨论
    2019年6月20日实验室学术讨论会议
    2019年5月31日实验室学术讨论会议
    2019年5月17日实验室学术讨论会议
  • 原文地址:https://www.cnblogs.com/songgj/p/13140021.html
Copyright © 2011-2022 走看看