Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
04.12.2012, 17:14
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
Что-то не понимаю я этот ThreadPool. Короче задача очень простая: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Так вот разница между временем 1 и временем2 занимает до 10 секунд! Думал - ладно, наверное потоки заняты все. Задал 500 рабочих. После постановки смотрю - занято около 20, 480 свободно. И при этом код ждет ! Где подвох? В методе Sleep? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 15:06
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
ну что, какие варианты? интересно же. Sleep убрал конечно, но вопрос выделения потоков интересен. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 15:25
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
netivan, можете привести тестовый код, как время замеряете? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 15:32
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
netivanГде подвох? ну фокус может и просто открывается. при вызове метода время может тратится на трансляцию этого метода в байткод. тема такая проскакивала у меня 13491696 что если вызвать метод напрямую, а потом в трит забросить и так замерить. ну или через тот же ngen прогнать ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 15:57
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
netivan, насколько я понимаю ThreadPool не сразу запускает переданный делегат т.к. его предназанчение выполнять фоновые задачи. То есть задачи с сравнительно низким приоритетом. Если нужно чтобы это сразу запускалось создавай поток вручную. beg-in-erпри вызове метода время может тратится на трансляцию этого метода в байтко JIT-компиляция конечно замедляет исполнение, но не на 10 секунд же. Пример из твоего вопроса является крайним случаем. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 16:15
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
LR, время смотрю по записи в лог. используется log4net в данном случае. Не понимаю одного - пулу ясно сказано - вот тебе 500 рабочих потоков, а он тормозит. Явно создавать свой "пул" можно конечно, но вроде как не рекомендуется такой подход :) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 16:31
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
netivan, ну а если выполнить в цикле, несколько раз, проверить версию beg-in-er и bazile, будет каждый раз по 10 секунд или только первый раз? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 16:32
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
netivanЯвно создавать свой "пул" можно конечно, но вроде как не рекомендуется такой подход :) Писать свой пул потоков безусловно не нужно, но никто нам не запрещает использовать потоки напрямую, без пула. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 17:01
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
bazile, ну пул потоков я имел ввиду свой массив потоков и в нем уже добавлять/ брать из него потоки. Вообщем в раздумьях. Попробую через Task<>, хотя думаю тоже самое будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 17:10
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
netivan, думаю чудеса не с Threadpool, а с этим - "время смотрю по записи в лог. используется log4net в данном случае" ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 17:13
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
LR, хм, не вижу повода не доверять ему в данном случае. Более того, по скорости записи дат обработки в базу это время подтверждается. Можно попробовать даже Datetime кидать в метод для большей уверенности. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 17:17
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
netivanну пул потоков я имел ввиду свой массив потоков и в нем уже добавлять/ брать из него потоки. А я имел в виду создание нового объекта Thread каждый раз когда нужно выполнить фоновую задачу. Изначальный вопрос про задержку с выполнением ты задавал из любопытства или у тебя есть конкретная задача? Если да, то какая? Потому что в одном случае наличие задержки важно, в других нет. Все зависит от конкретной ситуации. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 17:30
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
netivanразница между временем 1 и временем2 занимает до 10 секунд! Только что набросал простейший код с ThreadPool. Задержки исполнения вообще не видно. Так что тут другие факторы работают. Возможно log4net долго поднимается (исполняется), возможно комп сильно нагружен. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 17:36
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
netivan, блин, ну вот скоко это выдаст? у меня - 0 мс Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 17:38
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
bazile, вообще изначально я поставил под сомнение Thread.Sleep. На одном форуме нашел мысль,мол не применяйте Sleep в ThreadPool. Но никаких подробностей. После того как заменил код Sleep на обычный Web вызов таких задержек пока не обнаружил. Но меня в любом случае интересует каким образом пул выделяет потоки? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 17:39
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
блин))) Код: c# 1. 2. 3. 4.
у меня 1 мс ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 17:40
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
LR, а если так: ? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 17:41
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
netivan, да, stopwatch.Start надо (см.выше), так скоко? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 17:46
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
LR, что, сколько? запустите в цикле :) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 17:48
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
netivan, сколько времени )) чудо проявилось? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 17:49
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
LR, время ща 17-50 по москве где-то :) С веб запросом чудес с пулом пока не наблюдалось. Но подробнее обязательно исследую. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2012, 19:56
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
netivanвремя смотрю по записи в лог. используется log4net в данном случае. log4net, сам ведёт свои записи используя тредрул, так что время им считать - это совсем ниочём ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.12.2012, 11:33
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
netivanвообще изначально я поставил под сомнение Thread.Sleep. На одном форуме нашел мысль,мол не применяйте Sleep в ThreadPool. "Спящий" поток продолжает получать внимание со стороны планировщика ОС, поэтому он как бы и не "спит". Если нужно организовать паузу, то лучше создать waitHandle и ждать на нем. Кроме того в правильно написанном коде не должно быть необходимости в использовании пауз. Следует использовать нормальные механизмы синхронизации. netivanПосле того как заменил код Sleep на обычный Web вызов таких задержек пока не обнаружил. Надеюсь ты вызывал Sleep только в целях проверки ThreadPool, а не как постоянное решение. netivanНо меня в любом случае интересует каким образом пул выделяет потоки? Это детали реализации которые тебя не должны волновать. Главное что пул выполнит переданный ему делегат в background потоке. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.12.2012, 11:35
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
bazile, да, конечно как временное решение. Волновать не должно, но интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.12.2012, 20:01
|
|||
---|---|---|---|
чудеса с Threadpool |
|||
#18+
netivanЧто-то не понимаю я этот ThreadPool. Короче задача очень простая: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Так вот разница между временем 1 и временем2 занимает до 10 секунд! Думал - ладно, наверное потоки заняты все. Задал 500 рабочих. После постановки смотрю - занято около 20, 480 свободно. И при этом код ждет ! Где подвох? В методе Sleep? Ты бы еще 4800 потоков сделал, тогды бы еще больше задержки были. Создание трэда - целое кино и значительные накладные расходы. Подход в лоб, который тебн рекомендовали ничего не даст кроме тормозов. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=20&mobile=1&tid=1405524]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
others: | 302ms |
total: | 439ms |
0 / 0 |