纤程和协程理解

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

纤程

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

纤程的特点包括:

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

协程

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

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

协程的特点包括:

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

应用场景

  • 纤程:纤程适用于需要高并发但又不希望创建过多系统级线程的场景。通过纤程,可以在不增加系统级线程数量的情况下,提高程序的并发处理能力。
  • 协程:协程特别适用于IO密集型任务和高并发场景。它们可以在单线程内实现多个独立的执行流,通过非阻塞的挂起和恢复机制来提高程序的响应速度和吞吐量。由于协程的跨平台性好且易于编程,因此在现代并发编程中得到了广泛的应用。

相关推荐

  1. 理解

    2024-07-10 21:04:03       28 阅读
  2. c# FiberTaskScheduler

    2024-07-10 21:04:03       50 阅读
  3. 线

    2024-07-10 21:04:03       45 阅读
  4. python理解笔记,

    2024-07-10 21:04:03       39 阅读
  5. 简单理解Lua (coroutine)

    2024-07-10 21:04:03       24 阅读
  6. C++线的区别?详细介绍一下C++

    2024-07-10 21:04:03       68 阅读
  7. Linux的进程,线

    2024-07-10 21:04:03       67 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 21:04:03       100 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 21:04:03       107 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 21:04:03       90 阅读
  4. Python语言-面向对象

    2024-07-10 21:04:03       98 阅读

热门阅读

  1. 几款常见的数字孪生引擎

    2024-07-10 21:04:03       22 阅读
  2. C++:cv.absdiff函数含义

    2024-07-10 21:04:03       29 阅读
  3. 自动回复机器人:源码搭建与智能化客户服务

    2024-07-10 21:04:03       27 阅读
  4. 社群管理新助手:导航群机器人的智能化功能

    2024-07-10 21:04:03       30 阅读
  5. STAR 命令参数解释

    2024-07-10 21:04:03       27 阅读
  6. hid-ft260驱动学习笔记 4 - ft260_uart_ops

    2024-07-10 21:04:03       23 阅读
  7. Git详解

    Git详解

    2024-07-10 21:04:03      21 阅读
  8. Android12上实现双以太网卡共存同时访问外网

    2024-07-10 21:04:03       27 阅读