|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.08.2013, 04:17 | #1 |
crafter
Форумчанин
Регистрация: 03.09.2011
Сообщений: 127
|
Однопоточный сервер
Здравствуйте. Допустим, имеется:
Код:
Вопрос: возможно ли организовать ввод и отправку сообщений в том же потоке, где производится прием сообщений от клиентов? |
13.08.2013, 04:27 | #2 |
Форумчанин
Регистрация: 05.04.2012
Сообщений: 134
|
возможно, ведь у тебя таймер весит на select, только учти, что голод не тётка.
|
13.08.2013, 09:39 | #3 |
crafter
Форумчанин
Регистрация: 03.09.2011
Сообщений: 127
|
к сожалению, не совсем понял вашу мысль
|
13.08.2013, 12:39 | #4 |
Форумчанин
Регистрация: 09.07.2013
Сообщений: 249
|
Наверное он имеет в виду что пока осуществляется ввод, таймеры достигают лимита, отсюда и прерываение связи.
Можно не использовать постоянное соединение а обрывать сразу после обмена данными.
do not use your brain
Последний раз редактировалось Кащей; 13.08.2013 в 12:41. |
13.08.2013, 13:23 | #5 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
А использовать кучку мелких, и по возможности никак не связанных между собой задачек, которые выполняются достаточно быстро. Тогда возникнет иллюзия, что все задачи выполняются параллельно. Например, ввод на сервере разбивается на подзадачки: Начало: Вечный цикл главного потока: Подзадачка 1. была ли нажата клавиша? Да - поместить в буффер вводимых данных ещё один символ. Нет - ничего не делаем. Выходим из процедуры. Подзадачка 2. В буффере входных данных присутствует код клавиши ентер? Да - включаем флаг о завершении ввода. Нет - ничего не делаем. Подзадачка 3. Флаг о завершении ввода включен? Да - сбрасываем этот флаг, и что-то делаем с полученными данными. Нет - ничего не делаем. Подзадачка 4. Любые другие действия. Конец: Повторить вечный цикл главного потока. Вместо одной залипающей функции ввода получаем три коротеньких, простеньких и изолированных друг от дружки. Которые не залипают. Их можно вызывать в любом порядке следования. Допустим, можно сначала вызвать задачку 3, потом задачку 2, потом задачку 1. От этого бизнес-логика работы ввода никак не изменится. Этот фактор позволяет легко контролировать сложность происходящего. И будет работать прекрасно до тех пор, пока не нарушится инкапсуляция задач. То есть, пока ты можешь выстраивать функции-задачи в любой последовательности относительно друг друга - значит все хорошо. Такая "псевдо параллельность" не требует механики синхронизации, или чего то там подобного. Поэтому, она работает быстро. Если же вынести в отдельный поток ввод, только потому, что он "залипает" - это на ровном месте просаживать производительность, и усложнять проект. Ради только этого я бы не стал использовать многопоточность. |
|
14.08.2013, 11:33 | #6 |
crafter
Форумчанин
Регистрация: 03.09.2011
Сообщений: 127
|
_Bers, спасибо за содержательный и развернутый ответ, он оказался полезным. Плюсую.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сервер | Cas01 | HTML и CSS | 12 | 29.12.2014 00:08 |
Com - сервер и C# | m9yt | C# (си шарп) | 3 | 22.06.2012 02:26 |
Сервер | atenon | Свободное общение | 4 | 14.01.2011 07:55 |
CS Сервер | DRAP707 | Свободное общение | 0 | 15.04.2010 15:43 |
Сервер | Syltan | Свободное общение | 5 | 11.10.2009 23:37 |