Здравствуйте, OdesitVadim, Вы писали:
OV>Доброго дня.
OV>Ищется библиотека либо академическая статья, по которой можно написать такое.
OV>есть тред, который читает с сокета и складывает задания в очередь.
OV>Есть какой то пул тредов, которые с очереди забирают, выполяют и отдают результат в основной тред.
OV>Интересует либо реализация под Linux+gcc или хорошая статья с теорией правильной реализации.
Можешь попробовать мой вариант —
thread_pool.hpp
Работает под Win/Linux.
Использовать примерно так (код не рабочий, только идея):
void threadProc(int n){
std::cout << "processed: " << res << std::endl;
}
ThreadPool<int> threadPool(threadProc, 20);
// main work cycle
while (true)
{
...
socket_type clientSock = accept (serverSock, (sockaddr* ) &clientAddr, &clientAddrLen);
int command = util::readInt (clientSock);
util::closeSocket (clientSock);
if (command == EXIT_COMMAND)
break;
threadPool.process (command);
}
...
threadPool.stop(true);
...
util::closeSocket (serverSock);
...
Рабочий пример:
thread_pool