Выбор и реализация типа многопоточности, пул потоков, поток на соединение или один поток |
Здравствуйте, гость ( Вход | Регистрация )
Выбор и реализация типа многопоточности, пул потоков, поток на соединение или один поток |
mezmay |
27.11.2012, 23:53
Сообщение
#1
|
Активный участник Группа: Участник Сообщений: 272 Регистрация: 13.7.2009 Из: Ростов-на-Дону Пользователь №: 904 Спасибо сказали: 16 раз(а) Репутация: 1 |
Для саморазвития решил написать чат с базой данных, многопоточностью и голосовой связью. Клиенты будут подключаться к серверу и все сообщения посылать через него. Как реализовать многопоточность в данном случае? Хорошо понимаю 2 варианта:
1. Один дополнительный поток. Он все время запущен, принимает коннекты и передает/принимает данные от всех клиентов, пишет в базу. 2. Один поток на каждое соединение. Запущен пока есть коннект, обменивается данными с одним клиентом ну и пишет в общую базу. 3. Хотелось бы услышать советы, ведь оба предложенных варианта нехорошие - первый плох тем, что будет перегружен один поток, а второй плох тем, что количество потоков зависит от количества подключений и может быть неоптимальным. Изучал документацию по пулу потоков в Qt, но так и не понял как его прикрутить к данной задаче, ведь надо сделать чтобы рабочий объект существовал в потоке в течении, как минимум, одного коннекта. Или может сразу создать несколько потоков и клиентов распихивать по ним?... Сообщение отредактировал mezmay - 27.11.2012, 23:57 |
|
|
mezmay |
29.11.2012, 14:32
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 272 Регистрация: 13.7.2009 Из: Ростов-на-Дону Пользователь №: 904 Спасибо сказали: 16 раз(а) Репутация: 1 |
Ну допустим у нас по одному потоку на клиента - проблемы те же. Пользователь А шлет сообщение пользователю В. Оно приходит на сервер в поток threadA и в нем считывается. Пользователь В обрабатывается в потоке threadB (ну то есть соответствующий этому пользователю сокет QTcpSocket). Итак, сообщение от пользователя А принято в потоке threadA, а отправлено должно быть пользователю В. Как это сделать?
|
|
|
Текстовая версия | Сейчас: 26.11.2024, 14:15 |