https://imgur.com/RcrmzW0.png
https://imgur.com/Z4wdNBA.png
Код простой, в простое опрашивает ивенты, больше ничего не происходит.
- запускаю 1000-3000 бинарников - всё ок
- на 7000 бинарников - картина на скрине
Возможно у кого-то есть какие-то идеи куда смотреть и почему так просходит? откуда это ограничение в 7000
код очереди
std::optional<T> pop() {
std::unique_lock<std::mutex> lock(this->mutex);
if (q.empty()) {
return std::nullopt;
}
std::optional<T> value = std::move(this->q.front());
this->q.pop();
return value;
};
код опроса инвентов (он и генерит лоад)
while (true) {
auto tick_start = std::chrono::steady_clock::now();
if (auto event = internal_events_.pop(); event) {
std::visit([this](auto &&casted_event) {
process_event(casted_event);
}, event.value());
}
if (auto event = my_events_.pop(); event) {
using namespace td::td_api;
auto &&object = event.value();
switch (object->get_id()) {
case updateMyActivity::ID:
process_event(move_object_as<updateMyActivity>(object));
break;
case updateMyActivity2::ID:
process_event(move_object_as<updateMyActivity2>(object));
break;
default:
break;
}
}
if (auto event = my_q_events_.pop(); event) {
std::visit([this](auto &&casted_event) {
process_event(casted_event);
}, event.value());
}
auto tick_end = std::chrono::steady_clock::now();
auto duration = tick_end - tick_start;
auto sleep_time = std::chrono::milliseconds(10) - duration;
if (sleep_time.count() > 0) {
std::this_thread::sleep_for(sleep_time);
}
}