缘由
在使用代码执行相同任务时,通常会发现一个现象,就是使用异步并发时,会比循环遍历的速度快,明明是同样处理器单线程?
推导
1
a
−
n
a
+
n
<
0
\frac{1}{a}-\frac{n}{a+n}<0
a1−a+nn<0
=
>
a
+
n
−
a
n
a
(
a
+
n
)
<
0
=>\frac{a+n-an}{a(a+n)}<0
=>a(a+n)a+n−an<0
设
a
,
n
a,n
a,n是自然数,有
=
>
a
<
(
a
−
1
)
n
=>a<(a-1)n
=>a<(a−1)n
=
>
n
>
a
a
−
1
>
1
=>n>\frac{a}{a-1}>1
=>n>a−1a>1
说明
当执行任务的时候,系统一直在运行,cpu处理任务时候,肯定是存在其他线程在使用cpu,所以假设
a
a
a是已经存在的线程数,在执行系统的其他任务,
n
n
n是并发执行的量,用于目标任务,并发量越大,任务相对循环执行要快。因为,
f
(
n
)
=
n
a
+
n
f(n)=\frac{n}{a+n}
f(n)=a+nn
是增函数。由于cpu性能几乎固定和io的限制,因此有上限。简而言之,人多抢的资源就越多。