02-协程与线程
12.1.1 协程与线程
线程操作需要VM或OS的支持,通过CPU调度来执行生效;而协程主要通过编译技术来实现,通过插入代码来生效,不需要VM或OS的额外支持。简单来说,协程是编译器级的,而线程是操作系统级的。
协程可以认为是用户空间下的线程。协程实现的东西,用线程也可以完成,但通常多出了一些加锁和通信的操作。线程是抢占式的,而协程是非抢占式的,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。
协程的出现并不是为了取代线程,它抽象于线程之上。线程是被分割的CPU资源,协程是组织好的代码流程,协程需要线程来承载运行,线程是协程的资源。协程不会直接使用线程,而是利用执行器来关联线程或线程池,执行器可以调用当前线程、UI线程或新建线程。也就是说,线程是协程的资源,协程通过执行器来间接使用线程资源。