理解python协程

图片对应的draw.io xml文件如下

<mxfile host="Electron" modified="2025-05-09T08:56:04.082Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/22.1.2 Chrome/114.0.5735.289 Electron/25.9.4 Safari/537.36" etag="ekmL__WJO0oPHW5pRCdp" version="22.1.2" type="device">
  <diagram name="第 1 页" id="_hLd2Z6HqDHoUFEu-CP_">
    <mxGraphModel dx="1434" dy="844" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="nlGv0qIozWvfW1e3vJw6-1" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
          <mxGeometry x="450" y="50" width="770" height="650" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-2" value="进程" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
          <mxGeometry x="450" y="50" width="50" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="nlGv0qIozWvfW1e3vJw6-3" target="nlGv0qIozWvfW1e3vJw6-14">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1010" y="277" />
              <mxPoint x="1010" y="370" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-3" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
          <mxGeometry x="500" y="110" width="450" height="334" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="nlGv0qIozWvfW1e3vJw6-4" target="nlGv0qIozWvfW1e3vJw6-14">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1010" y="525" />
              <mxPoint x="1010" y="370" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-4" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
          <mxGeometry x="500" y="480" width="450" height="90" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="nlGv0qIozWvfW1e3vJw6-5" target="nlGv0qIozWvfW1e3vJw6-14">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1010" y="630" />
              <mxPoint x="1010" y="370" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-5" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
          <mxGeometry x="500" y="590" width="450" height="80" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-6" value="线程" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
          <mxGeometry x="500" y="110" width="50" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-7" value="线程" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
          <mxGeometry x="500" y="480" width="50" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-8" value="线程" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
          <mxGeometry x="500" y="590" width="50" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-24" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
          <mxGeometry x="530" y="147.5" width="290" height="270" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-9" value="协程任务1&lt;br&gt;代码块1&lt;br&gt;a = yield xxx()&lt;br&gt;代码块2" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
          <mxGeometry x="650" y="170" width="140" height="65" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-12" value="协程任务2&lt;br&gt;代码块3&lt;br&gt;a = yield xxx()&lt;br&gt;代码块4" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
          <mxGeometry x="650" y="250" width="140" height="65" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-13" value="协程任务3&lt;br&gt;代码块5&lt;br&gt;a = yield xxx()&lt;br&gt;代码块6" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
          <mxGeometry x="650" y="330" width="140" height="65" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-14" value="&lt;font style=&quot;font-size: 30px;&quot;&gt;CPU&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#CCFFE6;" vertex="1" parent="1">
          <mxGeometry x="1070" y="220" width="120" height="300" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-19" value="&lt;font style=&quot;font-size: 19px;&quot;&gt;GIL&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
          <mxGeometry x="1010" y="334" width="50" height="40" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-27" value="事件循环" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
          <mxGeometry x="530" y="147.5" width="70" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-29" value="yield、await会导致协程任务进入阻塞状态,、等待yield、await对应的任务结束时,结束后自动重新将协程任务变成就绪状态" style="rounded=0;whiteSpace=wrap;html=1;align=left;strokeColor=none;fillColor=none;" vertex="1" parent="1">
          <mxGeometry x="540" y="190" width="90" height="180" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-108" value="整个任务执行顺序为:&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;&lt;span style=&quot;&quot;&gt;代码块1&lt;/span&gt;&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;&lt;span style=&quot;&quot;&gt;代码块3&lt;/span&gt;&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;&lt;span style=&quot;&quot;&gt;代码块5&lt;/span&gt;&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;&lt;span style=&quot;&quot;&gt;代码块4&lt;/span&gt;&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;&lt;span style=&quot;&quot;&gt;代码块2&lt;/span&gt;&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;&lt;span style=&quot;&quot;&gt;代码块6&lt;br&gt;&lt;br&gt;具体执行顺序参考右边&lt;br&gt;&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;fillColor=none;strokeColor=none;" vertex="1" parent="1">
          <mxGeometry x="840" y="207.5" width="80" height="150" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-112" value="" style="group" vertex="1" connectable="0" parent="1">
          <mxGeometry x="1280" y="50" width="620" height="1080" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-109" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry width="620" height="1080" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-46" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="50" width="320" height="70" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-41" value="协程任务1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FF0000;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="68.75" y="80" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-42" value="协程任务2" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#66FF66;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="166.25" y="80" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-43" value="协程任务3" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#66FF66;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="266.25" y="80" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-47" value="时间点1,执行协程任务1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="20" width="160" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-55" value="事件循环" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="50" width="70" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-60" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="160" width="320" height="70" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-61" value="协程任务1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6E6E6;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="68.75" y="190" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-62" value="协程任务2" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FF0000;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="166.25" y="190" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-63" value="协程任务3" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#66FF66;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="266.25" y="190" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-64" value="时间点2,协程任务1出现yield,进入阻塞状态,让出CPU,CPU执行下一个就绪状态的协程任务2" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="130" width="540" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-65" value="事件循环" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="160" width="70" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-66" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="280" width="320" height="70" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-67" value="协程任务1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6E6E6;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="68.75" y="310" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-68" value="协程任务2" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6E6E6;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="166.25" y="310" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-69" value="协程任务3" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FF0000;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="266.25" y="310" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-70" value="时间点3,协程任务2出现yield,进入阻塞状态,让出CPU,CPU执行下一个就绪状态的协程任务3" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="250" width="540" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-71" value="事件循环" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="280" width="70" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-72" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="410" width="320" height="70" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-73" value="协程任务1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6E6E6;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="68.75" y="440" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-74" value="协程任务2" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6E6E6;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="166.25" y="440" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-75" value="协程任务3" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6E6E6;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="266.25" y="440" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-77" value="事件循环" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="410" width="70" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-78" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="540" width="320" height="70" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-79" value="协程任务1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6E6E6;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="68.75" y="570" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-80" value="协程任务2" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#66FF66;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="166.25" y="570" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-81" value="协程任务3" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6E6E6;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="266.25" y="570" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-83" value="事件循环" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="540" width="70" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-84" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="650" width="320" height="70" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-85" value="协程任务1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6E6E6;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="68.75" y="680" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-86" value="协程任务2" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FF0000;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="166.25" y="680" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-87" value="协程任务3" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6E6E6;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="266.25" y="680" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-88" value="时间点6,CPU扫描事件循环,执行第一个就绪的协程任务2" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="620" width="340" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-89" value="事件循环" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="650" width="70" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-90" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="760" width="320" height="70" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-91" value="协程任务1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#66FF66;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="68.75" y="790" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-92" value="协程任务2" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FF0000;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="166.25" y="790" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-93" value="协程任务3" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#66FF66;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="266.25" y="790" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-94" value="时间点7,协程任务1、写成任务3重新进入就绪状态" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="730" width="300" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-95" value="事件循环" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="760" width="70" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-96" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="870" width="320" height="70" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-97" value="协程任务1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FF0000;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="68.75" y="900" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-99" value="协程任务3" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#66FF66;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="266.25" y="900" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-100" value="时间点8,协程任务2执行结束,CPU从头开始执行第一个就绪的协程任务1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="840" width="420" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-101" value="事件循环" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="870" width="70" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-102" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="980" width="320" height="70" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-104" value="协程任务3" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FF0000;strokeColor=#d79b00;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="266.25" y="1010" width="75" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-105" value="时间点9,协程任务1执行结束,CPU执行下一个就绪的协程任务3" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="950" width="370" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-106" value="事件循环" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="980" width="70" height="30" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-110" value="时间点4,协程任务3出现yield,进入阻塞状态,让出CPU,CPU发现发现没有就绪的任务,则整个该线程让出CPU,CPU可以去执行其他线程的任务" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;fillColor=none;align=left;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="350" width="530" height="60" as="geometry" />
        </mxCell>
        <mxCell id="nlGv0qIozWvfW1e3vJw6-111" value="时间点5,CPU执行完了其他线程的任务,处于空闲状态,刚好该线程的协程任务2重新就绪了,整个线程重新进入就绪状态,则CPU进入这个线程进行处理" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;fillColor=none;align=left;" vertex="1" parent="nlGv0qIozWvfW1e3vJw6-112">
          <mxGeometry x="45" y="480" width="530" height="60" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
posted @ 2025-05-09 16:59  yury757  阅读(3)  评论(0)    收藏  举报