【windows 操作系统】协程
◆ 协程
由程序员手动切换。 属于线程,是在线程里面跑的,因此协程又称微线程和线程等。由于不用进行线程上下文切换,因此效率会更高。
资源:
- 拥有自己的栈空间,大小动态调整。
安全性:
- 拥有自己的寄存器上下文和栈。
上下文切换:
- 无消耗,直接操作栈。调度切换是用户(程序员)手动切换,可控的切换时机,很小的切换代价,因此又叫用户态的轻量级的线程。
协程和线程的区别
-
先理清楚一个概念:
- 一个进程可以有多个线程、一个线程可以有多个协程。
- 协程是一边吃饭一边说话。
- 线程是一边听音乐一边写作业。
协程
- 协程是用户级的,拥有自己的寄存器上下文和栈,我怀疑C#中的 迭代器和基于任务的异步编程是协程(未经过验证)
- 协程完全由用户控制,协程切换开销比较小。
- 协程是串行的,在任何一个时刻,同一线程中的协程,只有一个协程在跑。
线程
- 线程是内核级的,共享进程内寄存器上下文。
- 线程调度
- 需要操作系统进行调度,线程切换需要切换内核态,开销耗时比较大。
- 线程是并行的,多个线程可以同时运行。因为是多线程共享资源 ,所有访问全局变量的时候要加锁。