理解两个概念(两种技术)协程和超线程

首先,这两个概念应该没什么联系,只是在同一时间遇到了,就写进了一篇中。

1.协程

协程不是线程,更不是进程,协程本质上就是在一个线程内执行的一个函数,这个函数比较特殊,可以执行到某处挂起,随后可在被挂起的地方继续执行。

协程仅仅是一个特殊的函数,与进程、线程不是同一维度。

一个进程可包含多个线程,一个线程也可包含多个协程。也就是一个线程内可以有多个特殊的函数(协程)。但一个线程内的这些协程一定是串行的,因为一个线程只能在一个CPU上运行,因此多协程不能利用CPU多核能力。一个线程中,当一个协程在运行时,其他协程必须挂起。

协程间切换也存在上下文切换。进程和线程的上下文切换由操作系统完成,而协程的上下文切换由用户实现。协程间切换时机由用户决定,切换过程完全在用户态下完成,因此切换效率高。

协程的使用场景:

由于协程不能利用CPU多核,因此不适宜做计算密集型的场景。协程适宜I/O密集型场景,而I/O操作相对于CPU速率而言是阻塞型的,因为I/O太慢了。因此当一个I/O操作在进行时,CPU是空闲的。

如果一个线程内有多个I/O操作(可以是子程序)要进行,可以用多协程来实现以加速响应。当第一个协程在进行I/O时,因CPU空闲,因此可被挂起(I/O操作继续),切换去执行第二个协程继续执行,...依次执行。使得多个I/O操作可并发。

如果不采用多协程,多个I/O操作(子程序)必须完全串行,一个I/O操作完再去执行下一个,效率低下。因此多协程可得到相对较高的效率。

2.超线程

每个单位时间内,一个单运行管线的CPU只能处理一个线程,以这样的单位进行,如果想要在一单位时间内处理超过一个线程是不可能的。通过超线程,可在一个实体CPU(一个核)中,实现两个逻辑线程。让两个线程同时运行,在同一时刻执行两个线程。提高了CPU利用率。

 

posted @ 2019-07-01 15:26  大白的攻城狮  阅读(561)  评论(0编辑  收藏  举报