Название: Многопоточный сервер. Зачем он? Отправлено: mcrads от Февраль 14, 2010, 22:00 И снова я =)
Вопрос таков. Многопоточный сервер - что это и с чем его едят? к хелпу просьба не слишком далеко отсылать - я понял что собственно это такое. вопрос в другом - в чем его плюшки, зачем это нужно и стоит ли его мастерить для максимум трех входящих подключений? Название: Re: Многопоточный сервер. Зачем он? Отправлено: voronElf от Февраль 15, 2010, 06:46 Если ты подключения обрабатываешь в основном потоке, то пока ты не обработаешь текущее подключение, ты не сможешь обрабатывать следующее. Вопрос в том, будут ли подключения одновременными (скорей всего да), и сколько времени требуется на обработку одного запроса клиентского и сколько времени второй клиент может ждать в очереди (еще вапрос как организовать обработку текущего запроса и очередь запросов одновременно в одном потоке). Даже если подключения максисмум 3, эти вапросы все-равно надо решать. Идея многопоточного сервера избавляет от массы проблемок. А если сейчас у тебя максимум 3 подключения, не факт что через полгода из не будет 300.
Название: Re: Многопоточный сервер. Зачем он? Отправлено: sne от Февраль 15, 2010, 08:40 Сколько я не работал с сетью в кьют, а работал я не много, мне показалось что тут практически все асинхронное, включая сокеты. Для эмуляции блокирующих сокетов используются функции waitFor... Так собственно вот, смысл изобретать велосипед, да еще и на трех подключениях, когда тот же Apache упрекают в использовании потоков для обработки своих подключений, и на его место, под фронтенд используют, к примеру, более экономичный по ресурсам ngix.
Я считаю что лучше оставить всю работу асинхронной, как есть. Если обрабатываемых данных много и из-за их обработки будет подвисать GUI, имеет смысл всю обработку будет просто перетащить в отдельный поток, все равно не создавая на каждое подключение своего. Название: Re: Многопоточный сервер. Зачем он? Отправлено: voronElf от Февраль 15, 2010, 09:06 Так асинхронность реализуется как раз через многопоточность. Объект отрабатывает асинхронную операцию в отдельном потоке, сообщая сигналами о результатах работы.
В своем посте я написал о принципиальных вещах, не вдаваясь в реализацию (потому как с потоками не работал плотно в Qt). PS: ngix разве не многопоточный ? Экономия по ресурсам - эт зависит от того как код пишется. Название: Re: Многопоточный сервер. Зачем он? Отправлено: BRE от Февраль 15, 2010, 10:21 Так асинхронность реализуется как раз через многопоточность. Объект отрабатывает асинхронную операцию в отдельном потоке, сообщая сигналами о результатах работы. Нет. Используется механизм не блокируемых сокетов. В цикле обработки сообщений проверяется появились ли данные для сокета, и если да - то вызывается его слот readyRead. Все это происходит в том же потоке, которому принадлежит сокет. Если в этом слоте производить продолжительные операции, то остановиться весь поток.Поэтому, при таком подходе, необходимо минимизировать время нахождения в этом слоте, для того что бы не блокировать другие соединения. PS: ngix разве не многопоточный ? Нет. Он, как раз использует этот механизм. На многопроцессорной платформе могут быть запущено несколько worker-процессов, например по количеству процессоров.Название: Re: Многопоточный сервер. Зачем он? Отправлено: voronElf от Февраль 15, 2010, 11:26 О как. :o
Молчу, каюсь, лезу в доки ... Название: Re: Многопоточный сервер. Зачем он? Отправлено: mcrads от Февраль 15, 2010, 20:48 Спасибо, будем пробовать =)
Я тоже против многопоточности - наворачивать много. |