编辑
2025-09-30
随笔
00
  • 协程
    • 将线程上执行的任务的过程,把这个事件从线程执行中分离出来,并加以保存为自己的寄存器上下文和栈。换句话说,复制了线程的内容,但是只有持有内容而不是执行者
    • 基于这种方式,可以解耦内核态与用户态之间的切换。因为在程序中一直都是使用一条线程,只不过运行在线程上的任务可以被程序(也就是用户态)控制,随时切换。
    • 如此一来,既保障对于线程这种敏感的资源可以被内核态管理控制保证安全,又可以实现切换任务避免用户态和内核态切换的性能损耗
    • 关于轻量级线程:个人认为将协程描述为轻量级的线程是有些不准确的。因为本质上,协程并没有执行任务的功能,只是“持有”这个任务。不同于线程池中提交的任务,协程是这个“任务”的超集,是“任务执行的整个事件本身”。
    • 被挂起的协程:协程挂起时,不占用线程,但 I/O 请求已交给操作系统处理;当数据就绪,Go 运行时通过 netpoller 监听事件,自动回调会自动唤醒协程,让它继续执行。