powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / чудеса с Threadpool
41 сообщений из 41, показаны все 2 страниц
чудеса с Threadpool
    #38064743
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то не понимаю я этот ThreadPool. Короче задача очень простая:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
//объект бла бла
//ставим в пул, замеряем Время1.
      ThreadPool.UnsafeQueueUserWorkItem(метод, объект);

void Метод()
{
//Замеряем ВРЕМЯ_2
//сам рабочий код - Thread.Sleep( от 500 до 1000 мс)

}


Так вот разница между временем 1 и временем2 занимает до 10 секунд! Думал - ладно, наверное потоки заняты все. Задал 500 рабочих. После постановки смотрю - занято около 20, 480 свободно. И при этом код ждет !
Где подвох? В методе Sleep?
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066360
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну что, какие варианты? интересно же. Sleep убрал конечно, но вопрос выделения потоков интересен.
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066396
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivan,

можете привести тестовый код, как время замеряете?
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066411
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanГде подвох?
ну фокус может и просто открывается.
при вызове метода время может тратится на трансляцию этого метода в байткод.
тема такая проскакивала у меня 13491696
что если вызвать метод напрямую, а потом в трит забросить и так замерить.
ну или через тот же ngen прогнать
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066464
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivan,

насколько я понимаю ThreadPool не сразу запускает переданный делегат т.к. его предназанчение выполнять фоновые задачи. То есть задачи с сравнительно низким приоритетом. Если нужно чтобы это сразу запускалось создавай поток вручную.

beg-in-erпри вызове метода время может тратится на трансляцию этого метода в байтко
JIT-компиляция конечно замедляет исполнение, но не на 10 секунд же. Пример из твоего вопроса является крайним случаем.
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066510
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,

время смотрю по записи в лог. используется log4net в данном случае.
Не понимаю одного - пулу ясно сказано - вот тебе 500 рабочих потоков, а он тормозит.
Явно создавать свой "пул" можно конечно, но вроде как не рекомендуется такой подход :)
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066545
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivan,

ну а если выполнить в цикле, несколько раз, проверить версию beg-in-er и bazile, будет каждый раз по 10 секунд или только первый раз?
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066548
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanЯвно создавать свой "пул" можно конечно, но вроде как не рекомендуется такой подход :)
Писать свой пул потоков безусловно не нужно, но никто нам не запрещает использовать потоки напрямую, без пула.
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066631
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile,

ну пул потоков я имел ввиду свой массив потоков и в нем уже добавлять/ брать из него потоки.
Вообщем в раздумьях.
Попробую через Task<>, хотя думаю тоже самое будет.
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066649
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivan,

думаю чудеса не с Threadpool, а с этим - "время смотрю по записи в лог. используется log4net в данном случае"
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066660
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,

хм, не вижу повода не доверять ему в данном случае. Более того, по скорости записи дат обработки в базу это время подтверждается. Можно попробовать даже Datetime кидать в метод для большей уверенности.
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066667
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanну пул потоков я имел ввиду свой массив потоков и в нем уже добавлять/ брать из него потоки.
А я имел в виду создание нового объекта Thread каждый раз когда нужно выполнить фоновую задачу.

Изначальный вопрос про задержку с выполнением ты задавал из любопытства или у тебя есть конкретная задача? Если да, то какая? Потому что в одном случае наличие задержки важно, в других нет. Все зависит от конкретной ситуации.
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066690
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanразница между временем 1 и временем2 занимает до 10 секунд!
Только что набросал простейший код с ThreadPool. Задержки исполнения вообще не видно. Так что тут другие факторы работают. Возможно log4net долго поднимается (исполняется), возможно комп сильно нагружен.
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066713
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivan,

блин, ну вот скоко это выдаст? у меня - 0 мс
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    class Program
    {
        static void Метод(Object stateInfo)
        {
            Debug.WriteLine("ElapsedMilliseconds = {0}", ((Stopwatch)stateInfo).ElapsedMilliseconds);
            //сам рабочий код - Thread.Sleep( от 500 до 1000 мс)
        }
        static void Main(string[] args)
        {
            Stopwatch stopwatch = new Stopwatch();
            ThreadPool.UnsafeQueueUserWorkItem(new WaitCallback(Метод), stopwatch);
            Thread.Sleep(1000);
        }
    }
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066720
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile,

вообще изначально я поставил под сомнение Thread.Sleep. На одном форуме нашел мысль,мол не применяйте Sleep в ThreadPool. Но никаких подробностей. После того как заменил код Sleep на обычный Web вызов таких задержек пока не обнаружил. Но меня в любом случае интересует каким образом пул выделяет потоки?
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066725
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин)))
Код: c#
1.
2.
3.
4.
            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start(); //!!!
            ThreadPool.UnsafeQueueUserWorkItem(new WaitCallback(Метод), stopwatch);
            Thread.Sleep(1000);


у меня 1 мс
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066726
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,

а если так: ?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
static void Main(string[] args)
        {
while(true)
{
            Stopwatch stopwatch = new Stopwatch();
//а тут разве stopwatch.Start не надо?
            ThreadPool.UnsafeQueueUserWorkItem(new WaitCallback(Метод), stopwatch);
            Thread.Sleep(10);
}
        }
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066729
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivan,

да, stopwatch.Start надо (см.выше), так скоко?
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066733
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,

что, сколько? запустите в цикле :)
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066736
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivan,
сколько времени )) чудо проявилось?
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066741
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,

время ща 17-50 по москве где-то :)
С веб запросом чудес с пулом пока не наблюдалось. Но подробнее обязательно исследую.
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38066922
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanвремя смотрю по записи в лог. используется log4net в данном случае.

log4net, сам ведёт свои записи используя тредрул, так что время им считать - это совсем ниочём
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38067546
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanвообще изначально я поставил под сомнение Thread.Sleep. На одном форуме нашел мысль,мол не применяйте Sleep в ThreadPool.
"Спящий" поток продолжает получать внимание со стороны планировщика ОС, поэтому он как бы и не "спит". Если нужно организовать паузу, то лучше создать waitHandle и ждать на нем. Кроме того в правильно написанном коде не должно быть необходимости в использовании пауз. Следует использовать нормальные механизмы синхронизации.

netivanПосле того как заменил код Sleep на обычный Web вызов таких задержек пока не обнаружил.
Надеюсь ты вызывал Sleep только в целях проверки ThreadPool, а не как постоянное решение.

netivanНо меня в любом случае интересует каким образом пул выделяет потоки?
Это детали реализации которые тебя не должны волновать. Главное что пул выполнит переданный ему делегат в background потоке.
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38067553
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile,

да, конечно как временное решение.
Волновать не должно, но интересно.
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38068654
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanЧто-то не понимаю я этот ThreadPool. Короче задача очень простая:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
//объект бла бла
//ставим в пул, замеряем Время1.
      ThreadPool.UnsafeQueueUserWorkItem(метод, объект);

void Метод()
{
//Замеряем ВРЕМЯ_2
//сам рабочий код - Thread.Sleep( от 500 до 1000 мс)

}


Так вот разница между временем 1 и временем2 занимает до 10 секунд! Думал - ладно, наверное потоки заняты все. Задал 500 рабочих. После постановки смотрю - занято около 20, 480 свободно. И при этом код ждет !
Где подвох? В методе Sleep?

Ты бы еще 4800 потоков сделал, тогды бы еще больше задержки были.
Создание трэда - целое кино и значительные накладные расходы. Подход в лоб, который тебн рекомендовали ничего не даст кроме тормозов.
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38068912
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaСоздание трэда - целое кино и значительные накладные расходы.+ 1 МБ памяти под стек.
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38069141
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,

читай внимательно вопрос. Количество потоков значения не имеет. Кстати, выхода МСУ что-то не видно :(
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38069190
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanГде подвох?Скорее не подвох, а вопрос: "Чем занят пул?"
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38069283
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КnetivanГде подвох?Скорее не подвох, а вопрос: "Чем занят пул?"

На то он и пул, чтобы не плодить трэды на каждый чих как тут рекомендовали. Default value у него - 25 штук на процессор.
ЗЫ ThredPool - прошлый век. Есть таски, а в 4.5 асинхронность
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38069327
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaЗЫ ThredPool - прошлый век. Есть таски, а в 4.5 асинхронность
а не одно ли и тоже всё это? есть Thread , а таски , асинхронность, пул это его обвесы? разве не?
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38069331
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erSeVaЗЫ ThredPool - прошлый век. Есть таски, а в 4.5 асинхронность
а не одно ли и тоже всё это? есть Thread , а таски , асинхронность, пул это его обвесы? разве не?Нет. Тридпул позволяет экономить на количестве потоков. Таски и т. п. позволяют удобнее пользоваться тридпулом в том числе.
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38069400
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

все равно все это приходит к пулу. как это не назови.
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38069412
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanАлексей К,

все равно все это приходит к пулу. как это не назови.Через таски с пулом работать удобнее + есть различные оптимизации вроде дочерних тасков. Но и не все таски выполняются через пул.
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38069928
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erSeVaЗЫ ThredPool - прошлый век. Есть таски, а в 4.5 асинхронность
а не одно ли и тоже всё это? есть Thread , а таски , асинхронность, пул это его обвесы? разве не?

Таски оптимизируют загруженность трэдов, а не тупо ставят их в очередь. async\await - совсем другое кино, которое обеспечивает асинхронность без мультипоточности
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38070081
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,
Вот Вечно Вы Сева посоветуете так посоветуете, нет я не в том плане что совет не верный и не в тему, а в том что основная масса читающих это веб-прграммисты, и естественно нужно исходить их этого.
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38070118
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиSeVa,
Вот Вечно Вы Сева посоветуете так посоветуете, нет я не в том плане что совет не верный и не в тему, а в том что основная масса читающих это веб-прграммисты, и естественно нужно исходить их этого.

Это на клиенте можно особо не задумываться о кол-ве трэдов, а для web совсем другая история.
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38070147
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaГде-то в степиSeVa,
Вот Вечно Вы Сева посоветуете так посоветуете, нет я не в том плане что совет не верный и не в тему, а в том что основная масса читающих это веб-прграммисты, и естественно нужно исходить их этого.

Это на клиенте можно особо не задумываться о кол-ве трэдов, а для web совсем другая история.

я не это имел ввиду, а сам термин вебпрограммсит, это программист который может программировать при наличии интернета.
отбери у него интернет, аки форум где можно скопипастить, и он простой юзер без профессии.
тут не должны упоминаться технологии не из контекста вопроса, ибо вп,не читает в общем, и не напрягает мысль, ответ
желателен что бы ложился под мышку, нецензурная брань является катализатором для понимания, а термины поток и тому подобное желательно заменять примерами их жизни для адаптивного усвоения..
зы никого не хотел обидеть..бб
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38070158
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиSeVaпропущено...


Это на клиенте можно особо не задумываться о кол-ве трэдов, а для web совсем другая история.

я не это имел ввиду, а сам термин вебпрограммсит, это программист который может программировать при наличии интернета.
отбери у него интернет, аки форум где можно скопипастить, и он простой юзер без профессии.
тут не должны упоминаться технологии не из контекста вопроса, ибо вп,не читает в общем, и не напрягает мысль, ответ
желателен что бы ложился под мышку, нецензурная брань является катализатором для понимания, а термины поток и тому подобное желательно заменять примерами их жизни для адаптивного усвоения..
зы никого не хотел обидеть..бб

Таким юзерам про threadpool вредно знать
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38070178
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,
Я всегда ловлю себя на мысли, а что бы было без интернета, и без форумов, конечно технологии не получили бы такого
бурного развития,нео профессия программист была бы.
Вот вспомнить 88 год, про интернет никто не слышал, сеть мпс ведь работала, и развивалась.
и были уникальные разработки, со стеллажами сопутствующей литературы.
Там были тоже форумы но в живую, можно было бы намылить морду, что иногда и делали..
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38070245
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,

никкто не спорит, что "Оптимизируют" и тд. Вообщем топик можно прикрывать. Вывод - не используйте Sleep в пуле.:)
зы я не веб программист.
...
Рейтинг: 0 / 0
чудеса с Threadpool
    #38070556
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиВот вспомнить 88 год,
книги были издательства "Мир"
в магазине "Планета" попадались на английском и немецком
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / чудеса с Threadpool
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]