Есть такой простой пример, в котором происходит использование пула на 70 потоков и создание в каждом std::promise
:
#include <boost/asio.hpp>
constexpr const int size = 70;
boost::asio::thread_pool tp{size};
int main(int argc, char *argv[]) {
int total_run = 1;
if (argc > 1)
total_run = atoi(argv[1]);
for (int i = 0; i < total_run; ++i) {
boost::asio::post(tp, [] () {
std::promise<void> voidPromise;
std::this_thread::sleep_for(std::chrono::seconds(60));
});
}
tp.join();
}
Компилирую и запускаю:
g++ bad.cpp -o bad -lboost_system -lpthread && ./bad 1000
Проверяю VSZ:
ps -o vsz= -p 4142
Результат: 4708236, то есть около 4.5 гигабайт! И это всего на 70 потоков, в которых по сути ничего не происходит.
Если убрать строку с std::promise
, то получается намного лучше, а именно 579448.
Почему так происходит? Нормально ли это? Как можно это исправить (уменьшить VSZ) ?
Обновление
Версия gcc 8.3.0, boost — 1.69.0
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
я стараюсь не использовать цикл while, потому что он мне не нравитьсяНо мне нужно вызвать функцию ReceiveAndPrint и проверить ее, не равна ли она 0, после...
Заполнить одномерный массив размером 200 элементов случайными и неповторяющимися числами в диапазоне 1 – 200
Пишу сервер на С++, отправляю ему данные вида dhw6558d5fjf48dnbp5fps5tkze5f83n{\"gl\":\"123\"} а получаю это и еще 5 непонятных символов
Конечно, согласно стандарту - cмраздел 6