![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
wait functions
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