增强线程池

2024-01-06

我的应用程序需要一个线程池,并且我想尽可能依赖标准(C++11 或 boost)的东西。我意识到有一个非官方的(!)boost线程池类,它基本上解决了我所需要的,但是我宁愿避免它,因为它不在boost库本身中 - 为什么它仍然不在核心库中很多年?

在此页面和其他地方的一些帖子中,人们建议使用 boost::asio 来实现类似线程池的行为。乍一看,这看起来像是我想要做的,但是我发现我所见过的所有实现都无法加入当前活动的任务,这使得它对我的应用程序毫无用处。为了执行连接,它们向所有线程发送停止信号,然后连接它们。然而,这完全抵消了我的用例中线程池的优势,因为这使得新任务需要创建新线程。

我想做的是:

ThreadPool pool(4);
for (...)
{
    for (int i=0;i<something;i++)
        pool.pushTask(...);
    pool.join();
    // do something with the results
}

谁能提出一个解决方案(除了使用 sourceforge 上现有的非官方线程池)? C++11 或 core boost 中有什么可以帮助我的吗?


乍一看,这看起来像是我想要做的,但是我发现我所见过的所有实现都无法加入当前活动的任务,这使得它对我的应用程序毫无用处。为了执行连接,它们向所有线程发送停止信号,然后连接它们。然而,这完全抵消了我的用例中线程池的优势,因为这使得新任务需要创建新线程。

我认为您可能误解了 asio 示例:

IIRC(已经有一段时间了)线程池中运行的每个线程都调用了io_service::run这意味着实际上每个线程都有一个事件循环和一个调度程序。然后要让 asio 完成任务,您将任务发布到io_service使用 io_service::post 方法和 asio 的调度机制来处理剩下的事情。只要你不打电话io_service::stop,线程池将继续使用与您开始运行一样多的线程运行(假设每个线程都有工作要做或已分配了一个io_service::work目的)。

So you don't需要为新任务创建新线程,这违背了线程池的概念。

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

增强线程池 的相关文章

随机推荐

  • C++:a 的 b 次幂模 k [重复]

    这个问题在这里已经有答案了 a b 模 k问题 编写一个程序来计算模 k 的 b 次幂 例如 如果要求您计算 2 6 mod 7 2 的 6 次方是 64 因此 64 模 7 是 1 输入规格您将得到 3 个整数 a b 和 k 其中 b
  • heroku db:push 显示无效的数据库 url

    我正在尝试使用以下方法将数据推送到 heroku 应用程序 heroku db push 但它吐出了这个错误 root ubuntu lappy rails soft heroku db push Invalid database url
  • MongoDB。 BadValue:使用副本集启用授权时需要 security.keyFile

    我正在尝试配置副本集Mongo in a Docker容器 我已将副本集添加到mongod conf file replication replSetName rs0 但在启动过程中我遇到了下一个异常 BadValue security k
  • 使用 ADO.NET 管理数据库连接

    我们有一个基于 ADO NET 构建的应用程序 我们遵循一些简单的最佳实践 使我们能够利用连接池 例如 使用数据库的代码块可能如下所示 using DbConnection dbConnection GetDatabaseConnectio
  • scrollOverflow 在 fullPage.js 中不起作用

    我最近开始在一个项目中使用 fullPage js 但我不知道如何让溢出滚动起作用 我的页面中的最后一个 部分 很长 因此需要垂直滚动 这是我里面的代码 tags
  • 在 JAR 中指定 JVM 堆大小

    我正在尝试编写一个游戏引擎 但它需要比默认设置更多的内存 我知道如果您双击一个 jar 则会使用默认设置 那么我是否可以指定 JAR 在其清单文件 或其他地方 中需要自定义堆大小 此外 引擎位于它自己的 jar 中 游戏位于另一个 jar
  • 在 Python 包中包含 *.pyd 文件

    我有一个 python 模块模块 pyd一旦手动将其放入 python 安装文件夹的站点包中 它就可以正常工作 当我将解决方案上传到云环境时 问题就开始了 构建包要求我将每个模块作为要安装的包传递pip install module 我创建
  • 如何覆盖Resources.Designer.cs中默认的System.Resources.ResourceManager?

    我想覆盖System Resources ResourceManager from Resources Designer cs文件来实现自定义 ResourceManager GetString 方法功能 这可能吗 我创建了一个Custom
  • 在任何其他方法调用之前自动调用方法

    我有大量的类继承大量的接口 这些类正在实现的接口不共享任何公共方法 但它们都共享一个公共的第一步 一个例子是 A类看起来像这样 class A InterfaceA GetFoo Database db PerformSetup db Th
  • python 如何打印压缩文件的百分比

    我想获取压缩文件时的百分比 例如它会打印 1 2 3 等 我不知道从哪里开始 我现在只有压缩文件的代码 该怎么做呢 Code zipPath zipfile ZipFile Files Zip pic zip w for root dirs
  • JavaScript域从子域读取cookie

    我有一个简单的问题 有没有办法通过 JavaScript 读取主域上的子域 cookie 例如 我在子域 yes something com 中设置了值为 2 的 cookie hello 之后我想在 Something com 上读取它
  • 如何在android中使用GSON解析以下JSON?

    As keysArray A B C 是dynamic and cores具有相同的对象名称 请帮忙 result success keysArray A B C D E cores A key value B key value C ke
  • Appium:在开始 appium-testng 测试运行之前,如何使用 java 在 aws device farm 设备上以编程方式创建 google 帐户

    我想在 aws 设备场上运行我的自动化 Android 套件测试用例 大部分脚本是使用 gmail 登录创建的 在实时设备上 可以手动配置 Gmail 帐户 因此每当脚本运行时 都会弹出已配置的 Gmail 帐户以供登录 但对于 aws 设
  • Pycharm:通过鼠标悬停启用变量/名称/标记的工具提示?

    我正在寻找类似于 Visual Studio 将鼠标悬停在编辑器中的任何内容 类型信息 方法详细信息 其他有用信息等 上时显示工具提示的方式 这是 PyCharm 中的可配置选项吗 我还没有找到它 Thanks 仅可通过快速文档热键使用 对
  • 错误:eglSurfaceAttrib 未实现

    我正在尝试使用 aChartEngine 显示折线图 但是 页面显示为空白 并且我收到错误 eglSurfaceAttrib 未实现 进度 显示 页面代码
  • 如何比较批处理文件中的两个文件?

    如何比较批处理文件中的两个文件 并根据它们是否匹配执行操作 我尝试过类似的事情 if file1 txt NEQ file2 txt goto label 但它比较实际的字符串 file1 txt 而不是文件 我读过有关 COMP 命令的内
  • 我应该何时保存 Windows Phone 7 上的设置?

    我有一个调用的设置保存方法 但我尝试卸载 并且失去焦点 应用程序将关闭并且在使用这两种方法之前不会保存 我应该什么时候保存应用程序设置以避免这种情况发生 我应该使用计时器并每 30 秒保存一次 还是什么 您保存的频率取决于您的应用程序 然而
  • 创建 MySQL 表时出现语法错误

    也许我太习惯 Postgres 但为什么我会收到此错误 您的 SQL 语法有错误 检查手册 与您的 MySQL 服务器版本相对应 以便使用正确的语法 靠近 id int not null AUTO INCRMENT 电子邮件 varchar
  • Gradle 可以按特定顺序运行两个测试吗?

    我们正在将一些 ant 构建脚本迁移到 gradle 并在此过程中诊断问题 出现的一个问题是 在 CI 服务器 运行 gradle 的 jenkins 上 我们偶尔会遇到测试失败的情况 我们认为该问题与测试执行顺序有关 因为失败的测试之一在
  • 增强线程池

    我的应用程序需要一个线程池 并且我想尽可能依赖标准 C 11 或 boost 的东西 我意识到有一个非官方的 boost线程池类 它基本上解决了我所需要的 但是我宁愿避免它 因为它不在boost库本身中 为什么它仍然不在核心库中很多年 在此