前端知识体系
GitHub (opens new window)

GuoLiBin6

程序员永不下班
GitHub (opens new window)
  • 介绍
  • 前端基础

    • CSS

    • JavaScript

      • 进程、线程、协程
        • 1. 进程
        • 2. 线程
        • 3. 协程
        • 4. 进程和线程的区别
        • 5. 三者比较
          • 进程
          • 线程
          • 协程
      • call、apply、bind
      • ES6

    • HTML

  • 浏览器基础

  • 软件开发

  • 数据结构

  • 性能优化

  • Node.js

  • 收录

  • 搞事啦

  • 前端知识体系
  • 前端基础
  • JavaScript
GuoLiBin6
2022-04-26
目录

进程、线程、协程

# 1. 进程

进程(process)是CPU资源分配的最小单位,是能拥有资源和独立内存的最小单位

程序运行时,系统会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中他的时候就会为它分配CPU时间,程序开始真正运行。

# 2. 线程

线程(thread)是程序执行时的最小单位,是进程的一个执行流,CPU调度和分派的最小单位,一个进程可以有多个线程,线程之间共享进程的所有资源,每个进程有自己的堆栈和局部变量。线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行,同样多线程也可以实现并发操作,每个请求分配一个线程来处理

当同一个进程内的两个线程需要使用同一个资源时,需要等另一个释放后才可使用

单线程和多线程的叫法,是指一个进程内的单和多

# 3. 协程

协程(coroutine)又称微线程,纤程。

协程不是进程,也不是线程,它就是一个函数,一个特殊的函数。可以在某个地方挂起,并且可以在挂起点重新恢复执行(保留其原始参数和局部变量)。所以协程和进程、线程相比,不是一个维度的概念。

一个线程内可以有多个协程,,但是一个进程内的多个协程是串行的。如果有多核CPU的话,多个进程或一个进程内的多个线程是可以并行的,但一个线程内的多个协程必须是串行的。

# 4. 进程和线程的区别

进程是资源分配的最小单位,线程是程序执行的最小单位、

进程有自己的独立地址空间,每启动一个进程,系统会为他分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是可以共享进程中的数据的,使用相同的地址空间,因此CPU切换一个进程的花费比线程小得多,同时创建一个线程的开销也比进程小很多。

线程之间通信更方便,统一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信方式(IPC)进行。不过如何处理好同步和互斥是编写多线程程序的难点。

多进程程序更健壮,多线程程序只要有一个线程死掉,整个程序也就死掉了,而一个进程死掉不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

# 5. 三者比较

# 进程

  • 操作系统负责切换,变量隔离,自动切换运行上下文,切换内容保存于内核栈中,切换过程 用户态-内核态-用户态,切换效率低

  • 切换内容包括页全局目录、内核栈、硬件上下文

# 线程

  • 操作系统负责切换,变量隔离,自动切换运行上下文,切换内容保存于内核栈中,切换过程 用户态-内核态-用户态,切换效率中

  • 切换内容包括内核栈、硬件上下文

# 协程

  • 编程者/程序负责切换,变量不隔离,不自动切换运行上下文,切换内容存于自己的变量里,切换过程 用户态(没有陷入内核态),切换效率高

  • 切换内容包括硬件上下文

上次更新: 2022-06-26 12:15:08
文字处理
call、apply、bind

← 文字处理 call、apply、bind→

最近更新
01
蛤蟆先生去看心理医生
04-12
02
梁永安:阅读、游历和爱情
03-20
03
阿甘正传
02-07
更多文章>
Theme by Vdoing | Copyright © 2022-2024 GuoLiBin6
冀ICP备2022013865号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式