Информация об изменениях

Сообщение Re[6]: 10K problem for keep-alive utility от 09.11.2023 22:23

Изменено 09.11.2023 22:30 avovana

Re[6]: 10K problem for keep-alive utility
Здравствуйте, reversecode, Вы писали:

R>так что делайте в лоб на epoll

R>максимум еще можете какуюто mutex+cv очередь на воркерах накидать
R>и сойдет

Да. Это самое понятное решение. Можно 1 воркер сделать, можно по числу ядер. Тред пул с очередь, mutex, cv, как Вы подметили и я привёл код.
Я сейчас задумался над предложением watchmaker. Он писал про буфер, а не соединяющую поток очередь. Что у каждого потока по буферу. Когда epoll считывающий поток получает набор фд он закидывает их в буфер.
Логгер поток, к примеру, по cv просыпается и всё что делает — swap указатели. Отдаёт указатель на буфер что у него есть(к примеру, такого же размера), забирает указатель на буффер с заполненными данными.
Это кажется быстро и кэш френдли.

Нюанс в том, что не понятно какой этот буфер делать. Если чтобы влезло 5000 fd, то может придти 7000 fd, не влезут в этот буфер. Или же логгер поток еще не записал данные в файл/консоль. Что делать epoll потоку? А ему надо быстро откинуть данные, чтобы epoll'ить снова.
malloc'ом каждый раз не хочется пользоваться. Системными функциями в целом не хочется пользоваться. Чтобы не давать повод ОС к выгрузки процесса.

Что можно с этим буфером сделать? Есть идеи? Какой-то циклический прикрутить? Но там проблема с набеганием указателя писателя.
Re[6]: 10K problem for keep-alive utility
Здравствуйте, reversecode, Вы писали:

R>так что делайте в лоб на epoll

R>максимум еще можете какуюто mutex+cv очередь на воркерах накидать
R>и сойдет

Да. Это самое понятное решение. Можно 1 воркер сделать, можно по числу ядер. Тред пул с очередью, mutex, cv, как Вы подметили и я привёл код.
Я сейчас задумался над предложением watchmaker. Он писал про буфер, а не соединяющую поток очередь. Что у каждого потока по буферу. Когда epoll считывающий поток получает набор фд он закидывает их в буфер.
Логгер поток, к примеру, по cv просыпается и всё что делает — swap указатели. Отдаёт указатель на буфер что у него есть(к примеру, такого же размера), забирает указатель на буффер с заполненными данными.
Это кажется быстро и кэш френдли.

Нюанс в том, что не понятно какой этот буфер делать. Если чтобы влезло 5000 fd, то может придти 7000 fd, не влезут в этот буфер. Или же логгер поток еще не записал данные в файл/консоль. Что делать epoll потоку? А ему надо быстро откинуть данные, чтобы epoll'ить снова.
malloc'ом каждый раз не хочется пользоваться. Системными функциями в целом не хочется пользоваться. Чтобы не давать повод ОС к выгрузки процесса.

Что можно с этим буфером сделать? Есть идеи? Какой-то циклический прикрутить? Но там проблема с набеганием указателя писателя.