官网这个例子就是通过repeat函数启动了10000个协程,然后它让我们试一试使用Thread来实现会发生什么,也就是像下面这样:
repeat(100_000){ thread{ Thread.sleep(1000L) print(""."") }}
这个例子我们不用跑也知道大概会发生什么了。
但是,我想说的是,kotlin官方用这个例子真的有点不厚道了,用java底层的Thread类,和他们造出来的一个基于Thread类封装的“工具包”进行对比。
真正要比的话,我们用java的Executor和他比比?
repeat(100_000) { val executor = Executors.newSingleThreadScheduledExecutor() val task = Runnable { print(".") } repeat(100_00) { executor.schedule(task, 1, TimeUnit.SECONDS) }}
我用上面这段程序跑了一下,用协程相对于java的线程池,并没有发现什么实质上的性能优势。感兴趣的也可以自己借助Android Studio Profiler试一试
所以,到目前为止,我们可以下一个结论。
使用Kotlin协程,本质上其实并没有比我们原先的开发模式有多大性能上的优势,因为我们所使用的的OkHttp、AsyncTask等内部都帮我们封装了线程池,而不是直接使用Thread类。
我上面还提到了一个可能有点争议的观点,Kotlin协程只是一个基于Thread类封装的”工具包“而已。但目前还没有得到证明,我们不妨继续往下看。
_3_Kotlin协程运行在单线程里面吗?</