面试题答案
一键面试资源占用
- 协程:协程属于用户态线程,创建开销小,内存占用低。一个进程内可创建大量协程,如可轻松创建上万甚至更多协程,而线程受限于系统资源,创建数量有限,一般几百到几千个。
- 传统线程:线程是内核态的执行单元,创建线程时,操作系统需为其分配栈空间等资源,栈空间默认一般为几MB,大量线程会消耗大量内存等系统资源。
上下文切换开销
- 协程:协程的上下文切换在用户态进行,不涉及系统调用,切换成本低,仅需保存和恢复少量寄存器等数据,切换速度快。
- 传统线程:线程上下文切换由操作系统内核管理,涉及从用户态到内核态的切换,需要保存和恢复较多的内核状态和寄存器数据,开销较大,且会导致 CPU 缓存命中率降低。
编程模型
- 协程:编程模型更简洁直观,基于单线程通过协作方式实现并发,避免了多线程编程中的锁竞争、死锁等复杂问题,代码逻辑更清晰,易于理解和维护。
- 传统线程:多线程编程需考虑线程同步与互斥,如使用锁、信号量等机制来保护共享资源,编程复杂度高,容易出现死锁、竞态条件等问题,调试和维护困难。