纤程和协程理解

admin2024-07-07  5

进程是系统分配资源的最小单位,一个进程包含多个线程,那么纤程和协程又是啥呢?

纤程

多线程编程时,如果线程数过多,就会导致频繁的上下文切换,这对性能是一种额外的损耗。
纤程是由操作系统(特别是在Windows平台上)实现的一种轻量级线程上的执行结构。它允许多个fiber共享一个固定的线程,并通过主动切换到其他fiber来交出线程的执行权。纤程的切换在用户态完成,不涉及内核态的切换,因此切换速度快且开销小。一个进程可以创建成千上万个纤程,以实现高并发。(纤程是比线程更小的一个运行单位。一个线程可以拆分为多个纤程,然后通过人工转换,从而让各个纤程工作)

纤程的特点包括:

  • 轻量级:相对于线程而言,纤程的创建和销毁开销更小。
  • 用户态切换:纤程之间的切换在用户态完成,不需要操作系统的介入,因此切换速度快。
  • 共享线程:多个纤程共享同一个线程的资源,如内存和文件描述符等。
  • 主动切换:纤程之间的切换需要用户代码显式地进行,如通过SwitchToFiber函数进行切换。

协程

协程是一种并发编程模型,它允许程序在单线程内实现多个独立的执行线程(这里的“线程”是逻辑上的,并非操作系统层面的线程)。协程可以非阻塞地挂起和恢复,以实现协作式多任务处理。协程的核心思想是让程序员能够控制执行的流程,而不是完全交给操作系统或线程调度器来控制。

协程全称为协同程序,又称作微线程。它与多线程情况下的线程比较类似。协程有自己的堆栈、局部变量和指令指针,通常,多个协程共享全局变量等很多信息。其思想是,一系列相互依赖的协程依次使用CPU,每次只有一个协程运行,其他协程处于休眠状态。协程实际上是在一个线程当中,每个协程对CPU进行分时访问。

协程的特点包括:

  • 单线程内并发:协程在单线程内实现并发,避免了多线程编程中的锁竞争和上下文切换开销。
    非阻塞挂起和恢复:协程可以在执行到一定点时主动挂起自己,并将执行权还给其他协程或线程。然后,它可以在稍后的时间点恢复执行,而不需要创建新的线程或进程。
  • 协作式调度:协程的调度是协作式的,即只有在主动挂起时才会切换到其他协程,而不是由操作系统或调度器强制进行的。
  • 用户态管理:协程通常在用户态管理,不需要操作系统的线程或进程切换,这使得协程的切换速度非常快。

应用场景

  • 纤程:纤程适用于需要高并发但又不希望创建过多系统级线程的场景。通过纤程,可以在不增加系统级线程数量的情况下,提高程序的并发处理能力。
  • 协程:协程特别适用于IO密集型任务和高并发场景。它们可以在单线程内实现多个独立的执行流,通过非阻塞的挂起和恢复机制来提高程序的响应速度和吞吐量。由于协程的跨平台性好且易于编程,因此在现代并发编程中得到了广泛的应用。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!