傻瓜线程队列

2024-01-06

我认为这是一个非常常见的线程场景:

  • 我有 100 份相同的工作需要完成
  • 所有工作都是独立的 其他
  • 我想最多处理 一次 15 个职位
  • 正如每一份工作 完成后,将开始新的工作 直到所有作业完成

如果您假设每个作业完成时都会触发一个事件(我使用的是BackgroundWorker 类),我可以想出几种方法来实现这一点,但我不确定“正确”的解决方案是什么。我希望你们中的一些专家能给我指出正确的方向。

解决方案1:有一个while(继续) { Threading.Sleep(1000); }在我的 Main() 函数中循环。 Job_Completed 事件处理程序中的代码将在以下情况下设置 continue = falseA)没有作业需要排队并且B)所有排队的作业均已完成。我以前使用过这个解决方案,虽然它似乎工作正常......对我来说似乎有点“奇怪”。

解决方案2:在我的 Main() 函数中使用 Application.Run() 。同样,Job_Completed 事件处理程序中的代码将在以下情况下调用 Application.Exit()A)没有作业需要排队并且B)所有排队的作业均已完成。

解决方案3:使用线程池,将所有 500-1000 个请求排队,让它们一次运行 10 个 (SetMaxThreads),并以某种方式等待它们全部完成。

在所有这些解决方案中,基本思想是每次完成另一个作业时都会开始一个新作业,直到没有剩余作业为止。因此,问题不仅在于等待现有作业完成,还在于等待直到不再有任何挂起的作业可以启动。如果 ThreadPool 是正确的解决方案,那么等待 ThreadPool 完成所有排队项目的正确方法是什么?

我认为我最困惑的是我不明白事件是如何从我的 Main() 函数中触发的。显然他们是这样做的,我只是从 Windows 消息循环的角度不理解它的机制。解决这个问题的正确方法是什么,为什么?


即使其他答案很好,如果您想要另一个选择(您永远不会有足够的选择),那么作为一个想法怎么样?

只需将每个作业的数据放入一个结构中,该结构位于 FIFO 堆栈中。

创建 15 个线程。

每个线程将从堆栈中获取下一个作业,并将其弹出。

当一个线程完成处理时,获取下一个作业,如果堆栈为空,则线程死亡或只是休眠,等待。

唯一的复杂性(解决起来非常简单)是在关键部分进行弹出(同步读取/弹出)。

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

傻瓜线程队列 的相关文章

  • std::list::clear 是否会使 std::list::end 迭代器无效?

    检查这个代码 include stdafx h include
  • EventHandler 应该始终用于事件吗?

    我一直在愉快地使用自定义委托类型和通用编写事件Action委托类型 没有真正考虑我在做什么 我有一些很好的扩展助手Action and EventHandler这使我倾向于使用那些预定义的委托类型而不是我自己的委托类型 但除此之外 除了惯例
  • 如何使用 C# 以编程方式编辑 Power BI Desktop 文档参数或数据源?

    我有一个在 Power BI Desktop 中内置的报告模板 并保存为 pbix 或 pbit 文件 该模板使用DirectQuery SQL数据库作为数据源 而服务器地址和数据库名称被提取到参数中 还有一个参数包含一个ReportId
  • 如何调整 Windows 窗体以适应任何屏幕分辨率?

    我知道这是重复的问题 但我检查了所有其他相关问题 他们的答案没有帮助 结果仍然与屏幕截图 2 中所示相同 我是 C Windows 窗体新手 如截图1所示 我有Form1有一些控件 每组控件都放在一个面板中 我在 PC1 中设计了应用程序
  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • 从时间列表中查找最接近的时间

    所以 这是场景 我有一个带有创建时间的文件 我想从该文件的创建时间最接近或相等的时间列表中选择一个时间 完成此操作的最佳方法是什么 var closestTime listOfTimes OrderBy t gt Math Abs t fi
  • 名称查找、实例化点 (POI) 和基本类型

    以下代码针对 X 进行编译 但不适用于 double struct X void foo double void foo X namespace NN struct A void foo A foo double error foo not
  • 检测 TextBox 中的 Tab 键按下

    I am trying to detect the Tab key press in a TextBox I know that the Tab key does not trigger the KeyDown KeyUp or the K
  • 为什么 std::function 不是有效的模板参数,而函数指针却是?

    我已经定义了名为的类模板CallBackAtInit其唯一目的是在初始化时调用函数 构造函数 该函数在模板参数中指定 问题是模板不接受std function作为参数 但它们接受函数指针 为什么 这是我的代码 include
  • 从点云检测平面集

    我有一组点云 我想测试3D房间中是否有角落 所以我想讨论一下我的方法 以及在速度方面是否有更好的方法 因为我想在手机上测试它 我将尝试使用霍夫变换来检测线 然后我将尝试查看是否有三条线相交 并且它们也形成了两个相交的平面 如果点云数据来自深
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • 当底层连接是有状态时如何使用 Apache HttpClient?

    我在谷歌上搜索了很多关于如何使用 HttpClient 进行多线程处理的信息 他们中的大多数人建议使用 ThreadSafeClientConnManager 但我的应用程序必须登录某个主机 登录表单页面 以便 HttpClient 获得底
  • 如何测试某些代码在 C++ 中无法编译? [复制]

    这个问题在这里已经有答案了 可能的重复 单元测试编译时错误 https stackoverflow com questions 605915 unit test compile time error 我想知道是否可以编写一种单元测试来验证给
  • 将日期时间显示为 MM/dd/yyyy HH:mm 格式 C#

    在数据库中 日期时间以 MM dd yyyy HH mm ss 格式存储 但是 我想以 MM dd yyyy HH mm 格式显示日期时间 我通过使用 String Format 进行了尝试 txtCampaignStartDate Tex
  • 如何调用与现有方法同名的扩展方法? [复制]

    这个问题在这里已经有答案了 我有这样的代码 public class TestA public string ColA get set public string ColB get set public string ColC get se
  • java中使用多线程调用同一类的不同方法

    我有一个类 如下所示 具有三种方法 public class MyRunnable implements Runnable Override public void run what code need to write here to c
  • PyQt5:如何使QThread返回数据到主线程

    I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr
  • 对多个对象使用事件处理程序

    我有 20 件物品List
  • IDisposable 的显式实现

    虽然有很多关于IDisposable在 SO 上找到 我还没有找到答案 我通常遵循这样的做法 当我的一个班级拥有一个IDisposable对象然后它也实现IDisposable并打电话Dispose在拥有的对象上 然而最近我遇到了一个类 它
  • 如何在c中断言两个类型相等?

    在 C 中如何断言两种类型相等 在 C 中 我会使用 std is same 但搜索 StackOverflow 和其他地方似乎只能给出 C 和 C 的结果 在C中没有办法做到这一点吗 请注意 这不是询问变量是否具有某种类型 而是询问两个类

随机推荐

  • Acumatica 中动态变化的 PXSelector

    我有以下用例 Acumatica 组合框 下拉列表 可以有 8 个左右的值 其选择决定了用于在 PXSelector 中呈现的表 DAC e g 如果用户选择选项 a 我需要在表 A 中的 PXSelector 值中显示 如果用户选择选项
  • 如何修补 Eigen 3.3.7 以解决 GCC 8.2.1 错误(arm-none-eabi 8-2018q4-major 工具链)?

    我试图用以下命令编译 Eigen 3 3 7Arm的裸机8 2018q4 major工具链 https launchpad net gcc arm embedded announcement 15181并看到完全相同的错误 请参阅x86 6
  • 如何每天自动运行带有Python代码的Jupyter笔记本?

    我在 Jupyter 笔记本中有一些 Python 代码 我需要每天自动运行它 所以我想知道是否有办法进行设置 我真的很感谢对此的任何建议 Update最近我遇到了 papermill 它用于执行和参数化笔记本 https github c
  • music21:解析每首曲目的音符和持续时间

    我正在尝试使用 music21 将多轨 MIDI 文件转换为每个轨道的音符和持续时间数组 例如 给定一个包含 16 首曲目的 MIDI 文件 test mid 我想要获得 16 个元组数组 其中包含 音高 持续时间 加上音符的位置 musi
  • 在javafx中过滤要从数据库显示的数据

    我想在表视图中仅显示某些信息 例如数据库中仅显示 男性 人员 我只擅长使用javafx 提前感谢您的帮助 This is my current table 我想过滤表 以便表中仅显示具有 订单状态 已付款 的行 如果您可以使用 java 8
  • 如何使用维基词典 API 获取发音数据? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我一直在寻找一种通过查询某种 API 来获取任何给定单词的发音的方法 作为维基词典 http en w
  • 注册表项更改与 Python winreg 不生效,但不引发错误

    对 Python 来说还是个新手 我正在尝试编写一个脚本 允许我更改远程计算机上的特定注册表项 但我遇到了一些麻烦 基本上我的代码运行没有错误 但键值也没有设置 我使用在目标计算机上具有管理员权限的帐户 以管理员身份从 Windows 命令
  • 使用 Python 请求将文件数据放入 Autodesk API

    我正在按照描述的过程进行操作here https developer autodesk com en docs data v2 tutorials upload file 但被一个人拦住了403在第 4 步 我有一个令牌data write
  • GCC优化技巧,真的有效吗?

    在查看一些有关优化的问题时 这接受的答案 https stackoverflow com questions 2074099 coding practices which enable the compiler optimizer to m
  • WPF线程和GUI如何从不同线程访问对象?

    我有一个线程调用一个从互联网获取一些东西的对象 当该对象填满所需的所有信息时 它会引发一个事件 其中对象将包含所有信息 该事件由启动线程的控制器消耗 然后 从事件返回的对象被添加到通过视图模型方法绑定到 GUI 的集合中 问题是我无法将 C
  • 从另一个jar文件访问资源

    我有一个简单的结构 一个包含一批数据的数据 jar 文件和一个使用数据运行服务的服务 jar 文件 为了使数据易于替换 我将它们分开 并且 service jar 的类路径包含 data jar 所在的目录 在 service jar 中
  • 如何在 gitlab 中为多分支管道 jenkins 添加 webhook

    我想为每次推送触发多分支管道 任何人都可以告诉我如何在 gitlab 中配置 web hooks 来实现多分支管道 如果您想知道触发器设置在多分支管道作业设置中的位置 这将回答它 与其他作业类型不同 多分支作业配置不需要 触发器 设置 只需
  • 如何从 Android 中的 PreferenceActivity 获取 SharedPreferences?

    我正在使用 PreferenceActivity 来显示我的应用程序的一些设置 我通过 xml 文件扩充设置 以便我的 onCreate 和完整的类方法 如下所示 public class FooActivity extends Prefe
  • Yolo 暗网仅检测特定类别,如人、猫、狗等

    我们使用 YOLO Darknet 进行对象检测 我们使用Python3 tensorflow 1 0 numpy opencv 3 使用yolo weight进行检测 根据下面的链接给出 https github com thtrieu
  • 如何忽略文件夹而不将其从我的存储库中删除

    我有 tmp 和 cache 目录 它们不断生成不需要提交的文件 我如何设置它以便 svn 忽略它们 但不删除它们或从存储库中删除它们 站点需要它们才能工作 cd path to app tmp svn propset svn ignore
  • 请求重试之间的超时 Apache HttpClient

    有人可以分享如何配置现代 HttpClient 4 5 3 以重试失败的请求并在每次重试之前等待一段时间吗 到目前为止看来我的理解是正确的 setRetryHandler new DefaultHttpRequestRetryHandler
  • php is_file 总是返回 false

    php is file 总是返回 false apache h185 default ls l home www default p php rwxr xr x 1 zhouhh zhouhh 50837 Aug 28 19 02 home
  • EC2 Amazon Linux AMI MySQL CPU @ 62% 空闲时?

    我在 Amazon Linux AMI 上运行 MySQL 没有任何东西与之相关 没有连接 也没有其他正在运行的使用 MySQL 的应用程序 它完全闲置了 但是 top报告 mysql 使用 62 的 CPU 为什么会发生这种情况以及如何解
  • 在android中创建全局函数

    我想要做的是创建一个具有各种功能的java文件 我想在整个项目中使用它 例如检查互联网连接 然后我想在每个活动上调用该函数 有谁知道这是怎么做到的吗 像这样创建类并在此处添加您的函数 package com mytest import an
  • 傻瓜线程队列

    我认为这是一个非常常见的线程场景 我有 100 份相同的工作需要完成 所有工作都是独立的 其他 我想最多处理 一次 15 个职位 正如每一份工作 完成后 将开始新的工作 直到所有作业完成 如果您假设每个作业完成时都会触发一个事件 我使用的是