协程_概述
多线程的缺陷
- 多线程是微秒级别。
- 线程数一多,CPU使用率会飙升。可扩展性比较差
- 编写异步逻辑、非阻塞事件时,函数回调方式只有编写程序的程序员才知道规则。
协程的目的
- 描述异步逻辑
- 比多线程更快
- 比函数回调更美观
协程的优势
- 性能强劲
- 协程切换实验 - 一次协程切换的开销可以达到2到3纳秒之间,单线程协程切换的时间可以达到7到8纳秒,跨线程的协程切换也只需37纳秒左右。这些时间大大快于线程切换的时间。线程切换至少需要2000个时钟周期。假设CPU为4GHz,则至少需要500ns,若考虑cache失效问题,协程效率相对于线程将会是10、100倍的数量级。
- 语法优雅
实验:测量协程切换开销
写两个协程,使其不断切换。
1 | constexpr uint32_t total_switch = 2e9; // 2 * 10^9 |
循环对计数器累加,每次都切换一次协程。