Выбор и реализация типа многопоточности, пул потоков, поток на соединение или один поток |
Здравствуйте, гость ( Вход | Регистрация )
Выбор и реализация типа многопоточности, пул потоков, поток на соединение или один поток |
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 |
|
|
Алексей1153 |
28.11.2012, 6:29
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
можно попробовать так:
1) поток с GUI (основной) 2) поток сервера - слушает соединения, подключает 3)а) поток обслуживания клиентов - работает с массивом клиентов. Перебирает по очереди подключения, опрашивает, исполняет, отсылает 3)б) либо каждого клиента обрабатывать отдельным потоком (но это более морочно, и вряд ли понадобится) и не забывать про синхронизацию, конечно Сообщение отредактировал Алексей1153 - 28.11.2012, 6:30 |
|
|
Текстовая версия | Сейчас: 23.11.2024, 2:12 |