当线程数超过 32705 时 boost::thread_resource_error

2024-04-05

我正在实现消息传递算法。消息通过图的节点传播,阻塞直到它们收到足够的信息(来自其他邻居)来发送消息。

如果我将每条消息放入其自己的线程中并使用 boost::condition 来暂停线程,直到所有必需的信息可用,则该算法很容易编写。我创建了数千个线程,但大多数时候只有少数线程处于活动状态。这似乎运作得很好。

我的问题是,当单元测试时,我发现如果我创建超过 32705 个线程,我会得到

未知位置(0):致命错误 “Tree_test”:std::异常: boost::thread_resource_error

我不知道是什么原因导致这个问题,也不知道如何解决它。

似乎有足够的可用内存(每个线程只保存两个指针 - 消息在其之间传递的对象)。

从这个问题来看:Linux 中每个进程的最大线程数? https://stackoverflow.com/questions/344203/maximum-number-of-threads-per-process-in-linux我认为以下信息是相关的(尽管我真的不知道其中的任何含义......)

~> cat /proc/sys/kernel/threads-max
1000000

(我从 60120 增加了这个 - 我需要重新启动吗?)

 ~>ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 20
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

我尝试摆弄待处理的信号(我的限制非常接近 2* 该数字) 和堆栈大小ulimit -S -i 8191-(我无法增加它)但这些更改似乎根本没有效果)

我使用的是 64 位 Ubuntu-10-10 如果这有帮助的话......


我认为对于系统上的 32K 线程,您应该考虑潜在的解决方案,而不是如何拥有更多线程。例如,线程池(Boost 有一些用于此的东西)。

无论如何,在您的系统上,PID 不限制为 32768 或类似的值吗?我想,你迟早会用完的,不妨设计系统以允许处理比最大线程数更多的项目。

也就是说,查看 /proc/sys/kernel/pid_max 来查看你的最大 PID——并尝试增加它。这可能会让您超过 32K(但也可能会导致不是为异常大的 PID 设计的程序出现意外行为,因此要小心)。

然后您可能会受到堆栈空间(而不是虚拟内存空间)的限制。如果您愿意,可以尝试创建具有较小堆栈的线程。

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

当线程数超过 32705 时 boost::thread_resource_error 的相关文章

随机推荐

  • XPath 中字符串的连接函数

    我正在尝试使用 XPath 获取完整的地址 我是 XPath 新手 这是我到目前为止所做的 p class adr span class street address 2222 Warnar Ave span span class coun
  • FacebookDisplayName 有何用途?

    我们目前正在更改使用 Facebook SDK 进行登录的应用程序的名称 实际上没有其他任何操作 这意味着对于未更新的用户 Facebook 应用程序的名称将与FacebookDisplayName 在我的测试过程中 我找不到对价值的任何影
  • 将 Access-Control-Allow-Origin 添加到 PHP 标头

    我正在尝试解决 WebGL 应用程序上的 CORS 限制 我有一个可以解析 URL 并返回图像的 Web 服务 由于此 Web 服务未启用 CORS 因此我无法使用返回的图像作为纹理 我本来打算 编写 PHP 脚本来处理图像请求 图像请求将
  • Java 中的树实现

    我得到了以下树 然后我们被告知使用last child previous sibling方法来改变这三个的实现 结果如下 我现在正在研究 Java 实现 以在这棵树上执行不同的功能 我们有一个 Tree 接口和一个 TreeNode 接口
  • 如何在java中查找自1970年以来的秒数

    我正在处理一个实时项目 其中我需要查找自 1970 年 1 月 1 日以来的秒数 我使用以下代码来查找秒数 但给出了错误的结果 代码如下 public long returnSeconds int year int month int da
  • 自定义Zuul异常

    我在 Zuul 中有一个场景 其中 URL 路由的服务也可能已关闭 因此 响应正文会在 JSON 正文响应中抛出 500 HTTP Status 和 ZuulException timestamp 1459973637928 status
  • Node webpack 开发服务器在 vuejs 项目中失败“无法获取/”

    当我通过 webpack 运行节点开发服务器时 我的浏览器上收到一条非常无用的消息 Cannot GET 我正在使用以下内容构建 Vuejs 应用程序 Vue Js 的结构是由这个决定的Vue模板 http vuejs templates
  • 相当于python3中的python2 chr(int)

    python2 print chr 174 python3 print chr 174 我正在寻找 python2 中 chr 的等效项 我相信这是由于 python 3 返回 unicode 字符而不是 ASCII 实际上 在Py3中ch
  • C 如何计算没有浮点精度的百分比(千)

    如何将 2 个 int 值的百分比计算为表示百分比的 int 值 更精确的是千分之一 背景 目的 使用没有 FPU 的处理器 浮点计算所需的时间要长 100 倍 int x 25 int y 75 int resultPercentage
  • Ionic APP 中的 Disqus

    我正在尝试在我的 ionic 应用程序中实现 disqus 评论 我知道我必须将其托管在其设置的域上 我相信我已正确配置该域 欢迎任何帮助 这是我的 app js 中离子应用程序的代码 scope showComments function
  • 为什么我可以使用 bot.get_user 函数获取一些用户,但不能获取其他用户? [不和谐.py]

    我当时正在忙着一天的事情并做学校作业 我去了我的不和谐服务器来检查一天中声誉和排行榜进度如何变化 当我使用该命令时 我收到错误 Nonetype object has no attribute display name 所以我很自然地转到运
  • 从另一个类访问静态成员函数

    我在 C 类中有一个静态 stl 映射 并且有另一个静态成员函数来返回指向映射中对象的常量指针 该映射对于该类中的所有对象都是通用的 唯一的问题是 我需要搜索这个映射并从另一个类 位于不同的 cpp h 文件中 设置它 当我尝试在 vs20
  • 是否有一种无点方法将条件检查转换为输入的 Maybe 类型?

    我只是在 haskell 中完成一些简单的练习 想知道是否有一种无点的方法将 if then else 语句转换为Maybe type Nothing如果条件为假则返回 并且Just如果条件为真则输入 简而言之 给出一些 maybeIf a
  • 将我现有的富文本 UI 与 CKEditor API 结合使用

    我有一个现有的富文本 UI 我想将其与 CKEditor 一起使用 基本上 我希望 CKEditor 能够处理应用样式 格式 过滤和规范化插入内容的复杂部分 我现有的 UI 需要驱动交互并根据选择显示状态 即 选择粗体文本应反映在 UI 中
  • 如何在不使用 Github 的情况下使用 Git 在项目中进行协作?

    我是 Git 和 Github 的初学者 但仍然对它们感到困惑 据说我们在与其他人协作时可以不用Github而使用Git 然而 也有人说 Git 可以在本地计算机上运行 如果我们不使用 Github Git 只能在本地运行 我们如何进行协作
  • 比较字符串的瓶颈

    这是一个后续问题C 中的 Char 与 String Speed https stackoverflow com q 3989111 363829 我声明了以下变量 std vector
  • 在 BroadcastReceiver 扩展类中使用 getContentResolver

    我必须在扩展 BroadcastReceiver 的类中使用 getContentResolver 方法 并且我发现 getContentResolver 只能在扩展 Activity 的类中使用 我尝试在扩展活动的类中执行静态方法 但无法
  • 错误 CS7036 没有给出与“SpecflowBaseTest.SpecflowBaseTest(IWebDriver)”所需的形式参数“driver”相对应的参数

    我正在创建一个新框架 因为 PageFactory 已被弃用 我收到错误 Error CS7036 There is no argument given that corresponds to the required formal par
  • 录制视频时将动态文本渲染到 CVPixelBufferRef 上

    我正在使用录制视频和音频AVCaptureVideoDataOutput and AVCaptureAudioDataOutput并在captureOutput didOutputSampleBuffer fromConnection 委托
  • 当线程数超过 32705 时 boost::thread_resource_error

    我正在实现消息传递算法 消息通过图的节点传播 阻塞直到它们收到足够的信息 来自其他邻居 来发送消息 如果我将每条消息放入其自己的线程中并使用 boost condition 来暂停线程 直到所有必需的信息可用 则该算法很容易编写 我创建了数