Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

wait functions


Страницы:   1 2 3

Polevi ©   (2006-02-01 12:09:00) 

несколько потоков ждут семафор
насколько возможно предсказать в каком порядке потоки проснуться при вызове ReleaseSemaphore ?
FIFO, LIFO или случайным образом ?

у меня есть пул потоков который обслуживает запросы клиентов
пул наращиваемый, алгоритм удаления потока следующий - он удаляется если ждет объекта более 1 минуты к примеру
я опасаюсь что данный алгоритм не будет работать если потоки будут получать управление в порядке вызова ими Wait ф-ии, в моем случае они будут получать управление по очереди даже если будет только один клиент

какие будут соображения, господа ?


Polevi   (2006-02-01 14:05:00) [41]

проснется столько сколько я укажу в ReleaseSemaphore


Polevi   (2006-02-01 14:04:00) [42]

с какой радости


Игорь Шевченко   (2006-02-01 14:03:00) [43]


> и вызвал ReleaseSemaphore(H,1,nil);
> проснулся поток 1


Разве не все потоки проснулись ?


Polevi   (2006-02-01 13:21:00) [44]

например есть 3 потока и один клиент
пул потоков выглядит так - в порядке вызова Wait ф-ии
1
2
3
клиент поместил запрос в очередь и вызвал ReleaseSemaphore(H,1,nil);
проснулся поток 1, выбрал запрос из очереди, обработал и вновь вызвал Wait ф-ию
пул потоков теперь такой
2
3
1
т.е. следущий запрос будет обрабатывтаь поток 2, затем 3 и так по кругу
и ни один из них не дождется WAIT_TIMEOUT и не уничтожится

PS
эксперимент показал что SetThreadPriority никак не влияет на порядок


Игорь Шевченко   (2006-02-01 12:51:00) [45]


> в моем случае они будут получать управление по очереди даже
> если будет только один клиент


То есть, каждый поток вызывает WaitForSingleObject с таймаутом в минуту, после освобождения семафора они просыпаются все, и каждый решает, что именно он должен обслуживать запрос ? Или по WAIT_TIMEOUT они все удаляются ?


Polevi   (2006-02-01 12:50:00) [46]

>Digitman ©   (01.02.06 12:41) [3]
это все настраивается значениями таймаутов
доп поток создается при наличие в очереди запроса ожидающего больше X, уничтожается если ничего не делает больше Y


Polevi   (2006-02-01 12:45:00) [47]

тест показал что FIFO, что очень жаль
в моем случае нужен LIFO


Digitman   (2006-02-01 12:41:00) [48]


> Polevi ©   (01.02.06 12:09)


А зачем ты уничтожаешь объект-трэд по тайм-ауту ?
Только лишь из-за экономии ресурсов ?
Ведь создание и старт трэда сродни пуску холодного автодвигателя !
Не проигрываешь ли ты в скорости реакции приложения на кл.запросы, пытаясь выиграть в ресурсах ?


Leonid Troyanovsky   (2006-02-01 12:34:00) [49]


> Polevi ©   (01.02.06 12:09)  

> какие будут соображения, господа ?


У Соломона-Руссиновича оно подробно изложено, кое-что - у Таненбаума,
если мне не изменяет склероз.
Т.е., насколько я помню, для выборов из равноприоритетных потоков
используется витиеватый алгоритм, который, IMHO, не документирован.

--
Regards, LVT.


Игорь Шевченко   (2006-02-01 12:29:00) [50]


> насколько возможно предсказать в каком порядке потоки проснуться
> при вызове ReleaseSemaphore ?


Насколько я знаю, FIFO


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо