问题标签 [stxxl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
66 浏览

c++ - stxxl 超出线程 nr 的操作系统限制

Windows 10 / VS2015 上的 STXXL 1.4.1。

我有一些代码,我基本上使用它:

这是从默认的 2*1024*1024 降低块大小;我必须这样做,因为我有

由于默认的 stxxl::vector 分配了一个 ~60MB 的缓冲区,我的向量中有 60*400 MB,它因 bad_alloc(32 位)而崩溃 - 所以这就是我现在的设置。

以此为背景,我现在遇到的是我的代码因以下 stxxl 诊断而崩溃:

当我向 stxxl::vector::~vector() 添加一些额外的诊断时,我得到以下信息:

因此, stxxl::vector 析构函数中的 flush() 失败并出现此异常;从谷歌搜索看来,此异常意味着已达到最大线程数。

现在我很难理解为什么在执行 flush() 时会创建额外的线程。我查看了 stxxl 源代码,发现了一些不同类型的磁盘队列的提及,我还尝试在 define.h 中启用 STXXL_HACK_SINGLE_IO_THREAD 但所有这些都只是尝试随机的事情,因为我缺乏概述stxxl 为什么目的和在什么情况下创建了多少线程。

我也尝试过提出一个独立的问题来展示这个问题但失败了;我可以轻松做到

并毫无问题地用大量数据填充它们。因此,我在真实代码中使用事物的方式必须有一些特定的东西导致这个线程问题。在我可以解决问题之前,它太大了,无法开始切割。

所以,我的问题是:在 stxxl 中是否有可能创建大量线程的地方?还有什么我可以尝试在这里找到问题的吗?