<h2>TL;博士</h2>
<h3>做出正确的选择:</h3>
<blockquote>
<p>We have walked through the most popular forms of concurrency. But the question remains - when should choose which one? It really depends on the use cases. From my experience (and reading), I tend to follow this pseudo code:</p>
</blockquote>
<pre><code>if io_bound:
if io_very_slow:
print("Use Asyncio")
else:
print("Use Threads")
else:
print("Multi Processing")
</code></pre>
<blockquote>
<ul>
<li>CPU Bound => Multi Processing</li>
<li>I/O Bound, Fast I/O, Limited Number of Connections => Multi Threading</li>
<li>I/O Bound, Slow I/O, Many connections => Asyncio</li>
</ul>
</blockquote>
<p><a href="http://masnun.rocks/2016/10/06/async-python-the-different-forms-of-concurrency/" rel="noreferrer">Reference</a></p>
<hr/>
<p>[<strong>注意</strong>]:</p>
<ul>
<li>如果您有一个长调用方法(即包含睡眠时间或惰性i/O的方法),那么最好的选择是<a href="https://docs.python.org/3/library/asyncio.html" rel="noreferrer">asyncio</a>、<a href="https://twistedmatrix.com/trac/" rel="noreferrer">Twisted</a>或<a href="https://www.tornadoweb.org/en/stable/" rel="noreferrer">Tornado</a>方法(协程方法),该方法使用单个线程作为并发</李>
<li><a href="https://docs.python.org/3/library/asyncio.html" rel="noreferrer">asyncio</a>适用于<em>Python3.4</em>及更高版本</李>
<li><a href="https://www.tornadoweb.org/en/stable/" rel="noreferrer">Tornado</a>和<a href="https://twistedmatrix.com/trac/" rel="noreferrer">Twisted</a>已准备就绪,因为<em>Python2.7</em></li>
<li><a href="https://github.com/MagicStack/uvloop" rel="noreferrer">uvloop</a>是超快的<code>asyncio</code>事件循环(<a href="https://github.com/MagicStack/uvloop" rel="noreferrer">uvloop</a>使<code>asyncio</code>快2-4倍)</李>
</ul>
<hr/>
<p>[更新(2019)]:</p>
<ul>
<li>Japranto<sup>(<a href="https://github.com/squeaky-pl/japronto" rel="noreferrer">GitHub</a>)</sup>是一个基于<a href="https://github.com/MagicStack/uvloop" rel="noreferrer">uvloop</a>的非常快速的流水线HTTP服务器</李>
</ul>