让用户选择他希望程序使用多少个线程

2024-01-04

我想让一个程序读取 .txt 文件的每一行,并对每一行执行一些操作。

我希望用户能够选择线程,因此如果他选择 10 个线程,那么程序将能够同时在 10 行上执行某些操作。

假设文本文件包含 1 000 000 行,我该怎么办?

这就是我实际上所拥有的逐行阅读的内容:

var lines = File.ReadLines(accounts);
foreach (var line in lines)
{
    // Start a thread, but maximum 10 threads at the same if the user input is 10, for example.
}

多谢。


您无法绝对控制线程数。使用的数量取决于可用数量和其他因素。但是您可以通过指定要使用的最大数量来限制线程数量。

Using :

var options = new ParallelOptions {MaxDegreeOfParallelism = 5};
Parallel.ForEach(lines, options, line =>
{
    // do something with each line
});

MaxDegreeOfParellelism不过,这并没有讲述全部故事。它仅限制线程数量。使用的线程来自托管线程池。可以使用以下命令设置可用于启动新任务的线程数ThreadPool.SetMinThreads and ThreadPool.SetMaxThreads.

但这还没有说明全部情况。可以执行的并发操作数量受到 CPU 核心数量的限制。它还取决于这些操作的作用。例如,无论您运行多少个线程,它们都无法同时写入磁盘。将线程数增加到超过某个点可能会降低性能。

因此,虽然实验很有趣,但在大多数情况下,程序的用户不太可能知道应该同时运行多少个线程。

而这只是实现多线程的一种方式。Parellel.ForEach当您有一个IEnumerable(就像从文件中读取的行数组)并希望并行执行它们。

另一个需要考虑的因素是,当您并行执行操作时,您无法保证它们的执行顺序。他们可能看起来运行 FIFO,但当你再次运行它时,他们就不会了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让用户选择他希望程序使用多少个线程 的相关文章

随机推荐

  • UWP 应用程序安装无需管理员权限、powershell 交互且无需 Windows 应用商店?

    这里有 windows uwp 专家 吗 我已经研究下面提到的主题一天了 因为我不敢相信我们无法分发我们的 UWP 应用程序 是不是真的不可能通过以下方式分发 UWP 应用程序与商店不同的渠道无需手动运行 与powershell脚本交互 因
  • .htaccess:如何删除 URL 中的子文件夹子文件夹?

    我正在尝试重定向此网址www domain com username to www domain com username public但删除 public从网址 这是我的 htaccess file
  • 如何将 singledispatchmethod 与继承类一起使用

    在我的代码中 我有以下课程 class A functools singledispatchmethod def handle arg pass 我想要其他类继承A并重载泛型方法handle像这样 class B A handle regi
  • 使用 SWT 时的 Java SwingWorker

    我有一个问题如下 我编写了一个简单的简约应用程序 它使用 SWT 作为 GUI 在特定选项卡中 它显示一个通过 REST Api 调用填充信息的表格 另外 我还有另一种方法将此表导出到 CSV 文件中 这绝对没问题 现在我需要某种自动更新
  • Adobe After Effects 扩展脚本 - 如何从命令行运行脚本并传入参数?

    我正在尝试从命令行运行 Adob e AE 扩展脚本 我使用 r 参数 可以很好地运行脚本 但是 是否可以向脚本传递参数 就像 如果我从命令行运行这个 C gt C Program Files Adobe Adobe After Effec
  • NSMutableArray containsObject 返回 true,但它不应该

    我发现了类似的问题 但是 containsObject没有像我预期的那样工作 我的问题是NSMutableArray containsObject方法在不应该返回 true 时返回 true 当尝试生成随机唯一颜色并添加到数组时 检查是否存
  • 如何以编程方式将 Factor-bundle 与 browserify 一起使用?

    我想使用 Factor bundle 来查找 browserify 入口点的公共依赖项并将它们保存到单个公共包中 https www npmjs org package factor bundle https www npmjs org p
  • 如何使用 servlet 中的保存文件对话框?

    我试图让用户将 servlet 中的数据保存为 CSV 文件 最初我只是找到他们的桌面来放置文件 但此路线的权限会被拒绝 所以我想询问用户他们想要将文件保存在哪里 据我所知 我无法在 servlet 中使用 Swing API 因为 Tom
  • 点在函数中获取“脚本”

    我的 PowerShell 配置文件变得有点麻烦 我发现我并不总是使用其中的所有内容 我想减小我的个人资料的大小并加快启动时间 但我仍然希望能够访问这些功能相对地当我需要它们时很快 有没有办法 点源 https en wikipedia o
  • Cuda char* 变量赋值

    这是本文所选答案的后续问题 cuda程序的输出不是预期的 https stackoverflow com questions 6561005 output of cuda program is not what was expected 6
  • 清除 HTML 画布中形状下的像素

    我正在使用 HTML 画布和 javascript 并且需要清除通过关闭路径创建的形状下方的所有像素 例如 我正在使用flot http code google com p flot 并且我想制作圆角 为此 我首先需要通过在角的顶部绘制一条
  • Maven 创建一个空文件夹而不是获取适当的 .jar

    Maven 创建一个空文件夹而不是获取适当的 jar 我有一个由 3 个模块组成的项目 其中一个模块是其他两个模块的公共部分 当两个模块生成 WAR 文件时 第三个模块必须生成一个 JAR 该 JAR 应该嵌入到其他两个 WEB INF l
  • Magento CMS 错误:前端控制器达到 100 次路由器匹配迭代

    当我通过 CMS 在管理中 创建页面时 一切看起来都很好 但是当我尝试访问前端中的页面时 我得到一个带有错误的空白页面 Front controller reached 100 router match iterations 0 app c
  • NoSQL 的用例[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 NoSQL 最近在我们行业受到了广泛的关注 我真的很感兴趣人们对它在关系数据库存储上的最佳用例的看法 什么会促使开发人员认为特定数据集更适合 N
  • 在 Git 中的根提交之前插入非空提交?

    我有一个问题 请各位好心人指教 我有一个现有的 git 存储库 并且由于各种原因 我不会在这里讨论 我正在尝试创建一个 ROOT 提交 假设这是我的 git 提交历史记录 ROOT C1 lt C2 lt C3 lt C4 lt C5 lt
  • jQuery:如何制作一个清晰的按钮?

    我有一个搜索字段 我需要一个清晰的按钮 我目前有按钮 但我不知道该怎么做 我有 6 个文本字段 2 个组合框和 2 个多选列表 如何在一个清除函数中清除所有这些 我知道 HTML 方式 但我使用 Grails 并且 type reset 不
  • 如何使用 Chart.js 更改 Barchart 中仅一列的颜色

    js http www chartjs org docs bar chart http www chartjs org docs bar chart 我正在使用基本示例 HTML
  • 是否可以在单手柄 jQuery UI 滑块上设置固定的静态范围?

    本质上我要做的是一个用于一堆日期的单句柄 jQuery UI 滑块 选择的日期范围始终为两周 我想做的只是显示从两周范围的开始日期 即句柄驻留的日期 开始的一个范围 该范围不必是功能性的 只是显示 向前两周 这个范围是固定的 例如 如果句柄
  • 从 Eclipse 远程部署 Tomcat Web 应用程序

    出于开发和测试目的 我想将我的 web 应用程序从 eclipse 部署到远程 tomcat 服务器 这可能吗 如果没有 我应该如何设置我的开发环境以实现顺利 轻松的远程部署 如果您可以远程访问 Tomcat 管理器应用程序 那么您可以使用
  • 让用户选择他希望程序使用多少个线程

    我想让一个程序读取 txt 文件的每一行 并对每一行执行一些操作 我希望用户能够选择线程 因此如果他选择 10 个线程 那么程序将能够同时在 10 行上执行某些操作 假设文本文件包含 1 000 000 行 我该怎么办 这就是我实际上所拥有