Skip to content

Commit b5514e0

Browse files
committed
Site updated: 2025-03-31 22:01:56
1 parent d925ec1 commit b5514e0

File tree

2 files changed

+3
-3
lines changed

2 files changed

+3
-3
lines changed

2025/03/31/fiber_pool/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
<meta property="og:description" content="Acl 协程池使用指南一、说明相对于线程而言,协程更加轻量,占用更少的资源,但协程也是有成本的,如果频繁地创建与释放协程,也会占用大量的CPU,而使用协程池便可以有效地解决这一问题;Acl协程模块提供了协程池功能,采用C++11语法,简单易用,下面是Acl协程池的功能要点: 动态性: 这就意味着池子的大小在最小值与最大值之间浮动,按需创建与使用; 半驻留: 协程池中的协程空闲一段时间后,如果没有">
2525
<meta property="og:locale" content="zh_CN">
2626
<meta property="article:published_time" content="2025-03-31T13:00:00.000Z">
27-
<meta property="article:modified_time" content="2025-03-31T13:27:46.770Z">
27+
<meta property="article:modified_time" content="2025-03-31T14:01:21.774Z">
2828
<meta property="article:author" content="zsxxsz">
2929
<meta property="article:tag" content="协程编程">
3030
<meta name="twitter:card" content="summary_large_image">
@@ -298,7 +298,7 @@ <h1 id="Acl-协程池使用指南"><a href="#Acl-协程池使用指南" class="h
298298
<li><strong>同步异步:</strong> 通过调整任务缓冲大小,实现任务以同步或异步执行,同步模式使任务执行更具实时性,而异步模式则可以提升并行执行效率;</li>
299299
<li><strong>共享栈:</strong> 可以使协程池中的协程以“共享栈”模式运行,当池子中数量非常多时,可以有效地减少内存占用。</li>
300300
</ul>
301-
<h2 id="二、使用举例"><a href="#二、使用举例" class="headerlink" title="二、使用举例"></a>二、使用举例</h2><h3 id="2-1-一个简单的示例"><a href="#2-1-一个简单的示例" class="headerlink" title="2.1 一个简单的示例"></a>2.1 一个简单的示例</h3><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><code class="hljs c++"><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">mytest</span><span class="hljs-params">(<span class="hljs-type">int</span> i)</span> </span>&#123;<br> <span class="hljs-built_in">printf</span>(<span class="hljs-string">&quot;Task %d is running\n&quot;</span>, i);<br>&#125;<br><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">test</span><span class="hljs-params">()</span> </span>&#123;<br> <span class="hljs-comment">// 创建一个协程对象,各个参数如下:</span><br> <span class="hljs-comment">// 最小协程数:1</span><br> <span class="hljs-comment">// 最大协程数:20</span><br> <span class="hljs-comment">// 协程空闲退出时间:60秒</span><br> <span class="hljs-comment">// 协程池中任务队列的缓冲区大小:500</span><br> <span class="hljs-comment">// 每个协程栈大小:64000字节</span><br> <span class="hljs-comment">// 协程池中的协程是否采用共享栈模式:否</span><br> <span class="hljs-function">acl::fiber_pool <span class="hljs-title">pool</span><span class="hljs-params">(<span class="hljs-number">1</span>, <span class="hljs-number">20</span>, <span class="hljs-number">60</span>, <span class="hljs-number">500</span>, <span class="hljs-number">64000</span>, <span class="hljs-literal">false</span>)</span></span>;<br> <span class="hljs-type">int</span> i = <span class="hljs-number">0</span>;<br><br> <span class="hljs-comment">// 在协程池中执行第一个任务,捕获外部变量.</span><br> pool.<span class="hljs-built_in">exec</span>([i]() &#123;<br> <span class="hljs-built_in">printf</span>(<span class="hljs-string">&quot;Task %d is running\n&quot;</span>, i);<br> &#125;);<br> i++;<br><br> <span class="hljs-comment">// 在协程池中执行第二个任务,通过变参方式传递参数.</span><br> pool.<span class="hljs-built_in">exec</span>([](<span class="hljs-type">int</span> i) &#123;<br> <span class="hljs-built_in">printf</span>(<span class="hljs-string">&quot;Task %d is running\n&quot;</span>, i);<br> &#125;, i);<br> i++;<br><br> <span class="hljs-comment">// 在协程池中执行第三个任务,将变参传递给普通函数.</span><br> pool.<span class="hljs-built_in">exec</span>(mytest, i);<br><br> <span class="hljs-comment">// 开始协程调度过程.</span><br> acl::fiber::<span class="hljs-built_in">schedule</span>();<br>&#125;<br></code></pre></td></tr></table></figure>
301+
<h2 id="二、使用举例"><a href="#二、使用举例" class="headerlink" title="二、使用举例"></a>二、使用举例</h2><h3 id="2-1-一个简单的示例"><a href="#2-1-一个简单的示例" class="headerlink" title="2.1 一个简单的示例"></a>2.1 一个简单的示例</h3><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><code class="hljs c++"><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">mytest</span><span class="hljs-params">(<span class="hljs-type">int</span> i)</span> </span>&#123;<br> <span class="hljs-built_in">printf</span>(<span class="hljs-string">&quot;Task %d is running\n&quot;</span>, i);<br>&#125;<br><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">test</span><span class="hljs-params">()</span> </span>&#123;<br> <span class="hljs-comment">// 创建一个协程对象,各个参数如下:</span><br> <span class="hljs-comment">// 最小协程数:1</span><br> <span class="hljs-comment">// 最大协程数:20</span><br> <span class="hljs-comment">// 协程空闲退出时间:60000毫秒</span><br> <span class="hljs-comment">// 协程池中任务队列的缓冲区大小:500</span><br> <span class="hljs-comment">// 每个协程栈大小:64000字节</span><br> <span class="hljs-comment">// 协程池中的协程是否采用共享栈模式:否</span><br> <span class="hljs-function">acl::fiber_pool <span class="hljs-title">pool</span><span class="hljs-params">(<span class="hljs-number">1</span>, <span class="hljs-number">20</span>, <span class="hljs-number">60</span>, <span class="hljs-number">500</span>, <span class="hljs-number">64000</span>, <span class="hljs-literal">false</span>)</span></span>;<br> <span class="hljs-type">int</span> i = <span class="hljs-number">0</span>;<br><br> <span class="hljs-comment">// 在协程池中执行第一个任务,捕获外部变量.</span><br> pool.<span class="hljs-built_in">exec</span>([i]() &#123;<br> <span class="hljs-built_in">printf</span>(<span class="hljs-string">&quot;Task %d is running\n&quot;</span>, i);<br> &#125;);<br> i++;<br><br> <span class="hljs-comment">// 在协程池中执行第二个任务,通过变参方式传递参数.</span><br> pool.<span class="hljs-built_in">exec</span>([](<span class="hljs-type">int</span> i) &#123;<br> <span class="hljs-built_in">printf</span>(<span class="hljs-string">&quot;Task %d is running\n&quot;</span>, i);<br> &#125;, i);<br> i++;<br><br> <span class="hljs-comment">// 在协程池中执行第三个任务,将变参传递给普通函数.</span><br> pool.<span class="hljs-built_in">exec</span>(mytest, i);<br><br> <span class="hljs-comment">// 开始协程调度过程.</span><br> acl::fiber::<span class="hljs-built_in">schedule</span>();<br>&#125;<br></code></pre></td></tr></table></figure>
302302

303303
<p>上面例子展示了从协程池的创建到任务添加与执行的过程,期中任务添加方法<code>exec</code>在添加任务时,允许用户使用lambda表达式或普通函数做为执行过程,并允许捕获外部变量及传递变参。下面给出协程池创建时各个参数的含义:</p>
304304
<ul>

0 commit comments

Comments
 (0)