Почему количество созданных потоков меньше, чем thread-max?
С этим кодом:
void yield_sleep(void)
{
using namespace std::chrono;
static size_t thread_num;
auto start{high_resolution_clock::now()};
std::this_thread::yield();
auto end{high_resolution_clock::now()};
std::cout << thread_num++
<< "|Waiting for: "
<< duration_cast<microseconds>(end - start).count()
<< " ms."
<< std::endl;
}
int main(void)
{
std::vector<std::thread> tp(62434);
std::generate(tp.begin(), tp.end(), []() { return std::thread(yield_sleep); });
std::for_each(tp.begin(), tp.end(), [](auto& t) { t.join(); });
}
Программа создает поток ~32718 и генерирует исключение:
terminate called after throwing an instance of 'std::system_error'
what(): Resource temporarily unavailable
Но в /proc/sys/kernel/threads-max
значение 62434. В чем проблема? почему моя программа выдает исключение во время создания потоков?
1 ответ
Решение
Как упоминали 1201ProgramAlarm и François Andrieux в комментариях. Вthread-max
value - это системный предел, и для создания гораздо большего количества потоков нам необходимо внести некоторые изменения в настройки ядра: