擅长:python、mysql、java
<p>对于100000个输入,代码尝试创建大约200000个线程。Python线程是真正的操作系统线程,因此您看到的50%的CPU负载可能是系统忙于处理线程。在我的系统中,大约有32000个线程出错。在</p>
<p>您编写的代码可能无法工作:</p>
<pre class="lang-py prettyprint-override"><code>from random import shuffle
#XXX won't work
numbers = xrange(0, val)
shuffle(numbers)
</code></pre>
<p><code>xrange()</code>不是可变序列。在</p>
<p>注意:排序所需的时间比数组的随机洗牌要少得多:</p>
^{pr2}$
<p>如果要使用不同的线程对数组的部分进行排序,可以执行以下操作:</p>
<pre class="lang-py prettyprint-override"><code>from multiprocessing.dummy import Pool # use threads
Pool(2).map(lambda a: a.sort(), [numbers[:N//2], numbers[N//2:]])
</code></pre>
<p><code>a.sort()</code>释放GIL,因此代码使用2个cpu。在</p>
<p>如果包含合并已排序部分所需的时间,则只需在单个线程中一次性对整个数组(<code>numbers.sort()</code>)进行排序可能会更快。在</p>