跳至内容
1. 协程与线程

1. 协程与线程

Q: 协程、进程、线程的区别?

进程(Process)

  • 每个进程有独立的内存空间,属于"重量级"
  • 上下文切换(栈、寄存器、虚拟内存、文件句柄等)开销较大
  • 相对稳定、安全

线程(Thread)

  • 线程是进程中的一个执行单元,线程间主要通过共享内存通信
  • 上下文切换快、资源占用相对较小
  • 但相比进程稳定性差,更容易出现数据丢失等问题

协程(Coroutine)

  • 协程是用户态的轻量级线程,拥有自己的寄存器上下文和栈
  • 协程调度切换时,将寄存器上下文和栈保存到别处,切回来时再恢复之前保存的上下文和栈
  • 直接操作栈,几乎没有内核切换开销,可以无锁访问全局变量,上下文切换非常快

Q: 协程和线程的详细对比?

对比项线程Goroutine
创建开销MB 级栈初始 2KB,动态增长
切换开销内核态切换,微秒级用户态切换,纳秒级
数量千级别百万级别
调度OS 调度Go Runtime 调度

Q: Go语言的优点?

  • 并发优化:Golang 针对并发进行了优化,支持协程,并且实现了高效的GMP调度模型
  • 高效GC:有高效的垃圾回收机制,支持并行垃圾回收,垃圾回收效率比 Java 或 Python 更高