c# - 将大量工作分派给后台工作人员
问题描述
使用 C#。
我有 100,000 多条测试数据需要进行一些计算。我的实际数据集将在数百万条数据中。测试数据当前按顺序运行,处理时间约为一分钟。我想把这项工作分开,让后台工作人员处理背靠背,所以我希望能更快地完成处理。
我想到的是用数据做一个 foreach 循环,并用每条数据启动一个后台工作程序。我知道我需要将 bw 的数量限制为三个,因为我在这台机器上有 4 个内核。我用简单的 bw 做了一些测试,但不是同时用三个。
我不知道该怎么做。如何执行三个后台工作人员来处理这些数据?
解决方案
BackgroundWorker 主要用于早期学习工作。也许是奇怪的替代线程场景。你在做什么听起来像是一个非常先进的操作。您仍然可以使用 BGW,但此时原始线程、任务、线程池等会更好。
还有一个普遍的问题是这个操作是否可以用多线程加速。我喜欢说“多线程必须仔细挑选它的问题”。在错误的情况下选择它,你会得到一个需要更多内存的程序,更容易出错并且比单个 BGW 或顺序程序慢。
您的案例可能是令人愉悦的并行操作的罕见案例之一。或者它可能主要受内存限制。这意味着您几乎会立即遇到并行减速。抵制硬编码线程数的尝试。通常,您可以将负载平衡工作留给 ThreadPool。要获得更好的答案,您需要获得更具体的答案。
推荐阅读
- go - Gorilla mux 不能分开两条路线
- node.js - 使用 NodeJS 客户端检索 Elastic 搜索的 GET /stats
- java - 使用 GSON 从文件中读取 JSON
- c++ - C++如何找到外部程序指针地址中的值?
- html - DataTables 导出按钮与右下角对齐
- kotlin - Kotlin - 在初始化 lateinit 属性之前不要运行单元测试
- r - R: quantmod - getSymbols 参数
- python - Python 瓶为所有不同的用户提供相同的输出
- python - 从json格式中提取数据并粘贴到column_python
- informatica - 如何将特定记录类型从源映射到目标中的特定记录类型