操纵系统级线程(Kernel Threads)
   实现方式: 操作系统内核直接管理线程,支持多核处理器的并行执行

   优点:
          - 真正的并行: 可以利用多核处理器的能力,实现真正的并行执行
          - 线程管理: 操作系统负责线程调度和管理,简化了开发者的工作
   缺点:
          - 上下文切换开销: 线程切换时需要保存和回复上下文,开销较大
          - 资源真用: 每个线程都有自己的栈和资源,消耗较多内存
用户级线程(User Threads)
   实现方式: 在用户空间实现线程,线程的管理和调度由用户级库负责
              
   优点:
          - 轻量级: 线程的创建和切换开销较小,无法是实现真正的并行
          - 灵活性: 开发者可以自由实现调度策略
   缺点:
          - 无法利用多核: 操作系统只识别进程,无法实现真正的并行
          - 阻塞问题: 如果一个线程阻塞,整个进程都会被阻塞
线程池(Thread Pool)
   实现方式: 预先创建一定数量的线程,重复利用这些线程来执行任务。

   优点:
          - 减少开销:避免频繁创建和销毁线程的开销
          - 资源管理:可以限制同时运行的线程数,避免资源耗尽
   缺点:
          - 灵活性不足:线程池的大小固定,可能导致资源浪费或不足
          - 复杂性:需要管理线程的生命周期和任务队列
协程(Coroutines)
   实现方式: 在单线程中实现的轻量级线程,允许在执行过程中主动让出控制权

   优点:
          - 高效: 切换开销小,适合 I/O 密集型任务
          - 简单: 编程模型简单,易于理解
   缺点:
          - 无法利用多核:通常在单线程中执行,无法实现真正的并行
          - 复杂的调试:调试协程可能较为复杂
异步编程(Async Programming)
   实现方式: 通过事件循环和回调机制实现并发,通常用于处理 I/O 操作

   优点:
          - 非阻塞:可以在等待 I/O 的同时执行其他任务。
          - 资源占用少:不需要创建多个线程,节省资源。
   缺点:
          - 回调地狱:代码可读性差,难以维护。
          - 调试困难:异步代码的调试和错误处理较为复杂。