stxxl, превышающий предел ОС числа потоков - PullRequest
0 голосов
/ 23 октября 2018

STXXL 1.4.1 в Windows 10 / VS2015.

У меня есть код, в котором я по существу использую это:

typedef stxxl::vector<RC, 4, stxxl::lru_pager<8>, 2 * 1024> TVector;
typedef stxxl::deque<RC, TVector> CellIndexList;

Это для уменьшения размера блока по умолчанию2 *1024* 1024;Я должен был сделать это, потому что у меня есть

std::vector<CellIndexList> list(400);

И так как по умолчанию stxxl :: vector выделяет буфер ~ 60 МБ, у меня было 60 * 400 МБ в моем векторе, который потерпел неудачу с bad_alloc (32 бита)- вот как я пришел к своей текущей настройке.

С этим в качестве фона я сейчас сталкиваюсь с тем, что мой код дает сбой со следующей диагностикой stxxl:

[STXXL-ERRMSG] Exception thrown in ~vector()

Икогда я добавляю дополнительную диагностику в stxxl :: vector :: ~ vector (), я получаю следующее:

Dynamic exception type: class std::system_error
std::exception::what: resource unavailable try again: resource unavailable try again

Итак, flush () в деструкторе stxxl :: vector завершается ошибкой;из поиска в Google кажется, что это исключение означает, что было достигнуто максимальное количество потоков.

Теперь я пытаюсь понять, почему при выполнении flush () создаются дополнительные потоки.Я просмотрел исходный код stxxl и нашел несколько упоминаний о различных типах дисковых очередей, а также попытался включить STXXL_HACK_SINGLE_IO_THREAD в define.h, но все это просто случайные вещи, так как мне не хватает обзорасколько потоков создает stxxl для каких целей и при каких обстоятельствах.

Я также пытался создать автономную проблему, которая обнаруживает эту проблему, но не удалась;Я легко могу сделать

std::vector<CellIndexList> d(10000);

и заполнить их большим количеством данных без проблем.Так что должно быть что-то конкретное в том, как я использую вещи в своем реальном коде, который вызывает эту проблему с потоками.Он слишком велик, чтобы начинать что-то прерывать, пока я не смогу устранить проблему.

Итак, мой вопрос: есть ли место в stxxl, где создается потенциально большое количество потоков?Могу ли я попытаться найти здесь что-нибудь еще?

...