<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>操作系统 on Leanku</title>
    <link>https://blog.leanku.com/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/</link>
    <description>Recent content in 操作系统 on Leanku</description>
    <image>
      <url>https://blog.leanku.com/papermod-cover.png</url>
      <link>https://blog.leanku.com/papermod-cover.png</link>
    </image>
    <generator>Hugo -- gohugo.io</generator>
    <lastBuildDate>Sun, 18 Feb 2024 20:46:01 +0800</lastBuildDate><atom:link href="https://blog.leanku.com/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>对进程、线程和协程的理解</title>
      <link>https://blog.leanku.com/post/%E8%BF%9B%E7%A8%8B%E7%BA%BF%E7%A8%8B%E5%92%8C%E5%8D%8F%E7%A8%8B/</link>
      <pubDate>Sun, 18 Feb 2024 20:46:01 +0800</pubDate>
      
      <guid>https://blog.leanku.com/post/%E8%BF%9B%E7%A8%8B%E7%BA%BF%E7%A8%8B%E5%92%8C%E5%8D%8F%E7%A8%8B/</guid>
      <description>对进程、线程和协程的理解 一、 进程 先来了解一下操作系统的进程：
操作系统对正在运行程序的抽象，这个就是进程（process）。 比如运行一个 web 浏览器，一个 text 文本，都是运行的一个一个进程。
有的人说：进程是程序运行资源的集合。进程是系统资源分配的最小单位等等。
从静态的角度来说，进程确实是运行程序的各种资源集合。
如果你进一步思考，进程里的各种资源都有哪些呢？
内存管理相关
文件系统
调度相关
信号处理
内核栈
进程各种状态
进程运行时统计信息
进程标识
等等。
可以看出，进程中的资源是相当多的。
从 Linux 操作系统对进程的定义也可以看出。
多进程：操作系统有多个程序运行，那么就有多个进程
二、 线程 《操作系统设计与实现》里说：
在传统操作系统中，每个进程中只存在一个地址空间和一个控制流（thread）。
然后，有些情况下，需要在相同地址空间中有多个控制流并行的运行，就像他们是单独的进程一样（只是他们共享相同的地址空间）。
这些控制流通常被称为线程（thread），有时也称为轻量级进程（lightweight process）。
尽管线程必须在进程中执行，但是线程和进程是可以分别对待处理的两个概念。进程用来集合资源，而线程是 CPU 调度的实体。
线程给进程模型增加的是，允许在同一个进程环境中有多个执行流，这些执行流在很大程度上相对独立。
也即是说，在进程中，程序执行的最小单位（执行流）是线程，可以把线程看作是进程里的一条执行流。
一个进程里可以有一条或多条线程。
为什么会有多线程 在一个应用程序执行过程中，应用程序里可能会有多种事件执行。
而有些事件执行一段时间后可能会被阻塞。如果把应用程序执行事件分解成多个并行运行的线程，即可以让程序设计变得简单，如果有阻塞的，
可以把这部分让出行换其他线程执行。
还有一个原因是：
线程比进程更轻量级。所以线程比进程更加容易创建，销毁。
第三个跟第一个有点关系，是关于性能的，若多线程都是 CPU 密集型的，那么不能获取性能上增强。如果有大量计算和大量 I/O 处理，那么
多线程就可以获取性能上的优势，因为允许多线程重叠执行。
多线程的缺点：
对于多线程来说，进程中的资源是共享的，所以会产生资源竞争。 当进程中的一个线程崩溃了，会导致这个进程里的其他线程也崩溃。所以有时多进程程序更好，一个进程崩溃不会导致其他进程也崩溃。 三、 进程和线程的区别 从上面进程和线程介绍知道，线程是程序执行流的最小单位，进程是操作系统分配资源的单位。
进程与进程之间关系：
进程与进程之间是相互独立的。
线程与进程关系：
线程是进程里的执行流，进程里的线程可以是一个，也可以是多个。
所有线程共享进程里一些资源，比如代码，数据，地址空间，信号处理，打开文件，全局变量等。
同时，线程也有自己的寄存器，程序计数器，堆栈，线程状态等
四、协程 协程是建立在线程之上，一般是语言级别的 ”多线程“ 模型，比线程更加的轻量级。有的叫它微线程。它是完全运行在用户态里。
协程是在线程之上在进行抽象，它需要线程来承载运行。一个线程可以有多个协程。
协程的优点：</description>
    </item>
    
  </channel>
</rss>
