gpt4 book ai didi

c# - 在编写多线程代码之前需要了解哪些重要的线程 API 调用?

转载 作者:太空宇宙 更新时间:2023-11-03 17:28:49 40 4
gpt4 key购买 nike

最近我在博客上讨论了 .Net 中经常被过度使用的多线程概念。我为“您应该首先了解的 API”整理了一个凝视列表:

  • 话题
  • 线程池
  • 手动重置事件
  • 自动重置事件
  • 事件等待句柄
  • 等待句柄
  • 监督
  • 互斥体
  • 信号量
  • 互锁
  • 后台 worker
  • 异步操作
  • 锁定声明
  • 不稳定
  • 线程静态属性
  • 线程.MemoryBarrier
  • Thread.VolatileRead
  • Thread.VolatileWrite

然后我开始思考也许并非所有这些都很重要。例如,Thread.MemoryBarrier 可能可以安全地从列表中删除。再加上一个明显的声明,即我不是什么都知道,所以我决定转向这里。

所以这是一个广泛而自以为是的问题,但我很好奇集体对最佳实践研究列表的看法。本质上,我正在寻找一个简短的列表,供新手和/或初级开发人员开始使用 C# 编写多线程代码。

那么在没有进一步评论的情况下,应该从上面的列表中添加或删除什么?

最佳答案

我认为您需要对多线程级别进行分类,而不是对不同的 API 进行分类。根据您的线程需求,您可能需要也可能不需要了解您列出的 API 的某些子集。如果我要组织它们,我会按照以下方式进行:

  • 基本多线程:
    • 要求
      1. 需要运行并发进程。
      2. 不需要访问共享资源。
      3. 最大限度地利用可用硬件资源。
    • API 知识
      1. 话题
      2. 线程池
      3. 后台 worker
      4. 异步操作/委托(delegate)
  • 共享资源多线程:
    • 要求
      1. 基本的多线程要求
      2. 使用共享资源
    • API 知识
      1. 基本的多线程 API
      2. lock()/Monitor(它们是同一个东西)
      3. 互锁
      4. ReaderWriterLock 及其变体
      5. 不稳定
  • 多线程同步
    • 要求
      1. 基本的多线程要求
      2. 共享资源多线程需求
      3. 跨多个线程的行为同步
    • API 知识
      1. 基本的多线程 API
      2. 共享资源多线程 API
      3. 等待句柄
      4. 手动/自动重置事件
      5. 互斥体
      6. 信号量
  • 并发共享资源多线程(超线程)
    • 要求
      1. 基本的多线程要求
      2. 共享资源多线程要求
      3. 对共享集合的并发读/写访问权限
    • API 知识
      1. 基本的多线程 API
      2. 共享资源多线程 API
      3. .NET/.NET 4.0 的并行扩展

API 的其余部分我将简单地纳入一般线程知识,可以根据需要选择的东西,因为它们适合所有三个级别。像 MemoryBarrier 这样的东西非常边缘化,通常有更好的方法来完成它完成的同样的事情,并且它们的行为和含义的歧义更少。

关于c# - 在编写多线程代码之前需要了解哪些重要的线程 API 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1557538/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com