Здравствуйте, gandjustas, Вы писали:
G>Наверное тем что он разжижает мозг его писателю. Непонятно зачем изобретать свой thread pool, работающий не очень эффективно, когда есть стандартный.
Например, часто встречаются ситуации, когда их нужно более одного.
А вас с какой целью это интересует?
Если ради интереса — это одно. А если для работы, то всегда лучше взять готовое, например те же thread-safe коллекции из .net 4: BlockingCollection Overview
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, gandjustas, Вы писали:
G>>Наверное тем что он разжижает мозг его писателю. Непонятно зачем изобретать свой thread pool, работающий не очень эффективно, когда есть стандартный.
L>Например, часто встречаются ситуации, когда их нужно более одного.
"Часто" это когда?
У меня ни разу такого не было.
Кроме того всю высокоуровневую логику лучше изобретать не привязываясь к потокам. Средств для этого полно.
Здравствуйте, gandjustas, Вы писали:
L>>Например, часто встречаются ситуации, когда их нужно более одного.
G>"Часто" это когда? G>У меня ни разу такого не было.
А у меня были: есть задачи, которые периодически запускаются и работают в фоне, собирая разную статистику, они по смвоей природе длительные и обращаться к полученным данным будут очень нескоро; а есть интерактивные задачи, запускаемые пользователями с интерфейса, они — короткие, и результат жедательно получить тут же. Если будет 1 пул потоков, то дительные задачи его тупо забьют и не дадут выполняться задачам второго типа. 2 пула эту проблему снимают.
G>Кроме того всю высокоуровневую логику лучше изобретать не привязываясь к потокам. Средств для этого полно.
Пул — это механизм выполнение логики, причем тут привязывание?
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, gandjustas, Вы писали:
L>>>Например, часто встречаются ситуации, когда их нужно более одного.
G>>"Часто" это когда? G>>У меня ни разу такого не было.
L>А у меня были: есть задачи, которые периодически запускаются и работают в фоне, собирая разную статистику, они по смвоей природе длительные и обращаться к полученным данным будут очень нескоро; а есть интерактивные задачи, запускаемые пользователями с интерфейса, они — короткие, и результат жедательно получить тут же. Если будет 1 пул потоков, то дительные задачи его тупо забьют и не дадут выполняться задачам второго типа. 2 пула эту проблему снимают.
Scheduler.NewThread и Scheduler.ThreadPool
И наступит счастье.
Еще раз: не надо программировать в терминах потоков и пулов.
Здравствуйте, gandjustas, Вы писали:
L>>А у меня были: есть задачи, которые периодически запускаются и работают в фоне, собирая разную статистику, они по смвоей природе длительные и обращаться к полученным данным будут очень нескоро; а есть интерактивные задачи, запускаемые пользователями с интерфейса, они — короткие, и результат жедательно получить тут же. Если будет 1 пул потоков, то дительные задачи его тупо забьют и не дадут выполняться задачам второго типа. 2 пула эту проблему снимают.
G>Scheduler.NewThread и Scheduler.ThreadPool G>И наступит счастье.
.Net 4 и счастье помахало ручкой.
G>Еще раз: не надо программировать в терминах потоков и пулов.
Еще раз: никто и не прогрмаммирует в терминах потоков и пулов. Где ты их нашел?
Re[2]: Чем Опасен етот код
От:
Аноним
Дата:
10.10.10 16:08
Оценка:
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Аноним, Вы писали:
L>А вас с какой целью это интересует? L>Если ради интереса — это одно. А если для работы, то всегда лучше взять готовое, например те же thread-safe коллекции из .net 4: BlockingCollection Overview
Здравствуйте all
как тут написали ,у меня случай когда есть очень много маленьких интерактивных задач
И их надо выполнять асинхронно ,встроенным пулом пользоваться не хочу т.к. он жестко занять WCF
насчет BlockingCollection то в принципе ето тоже самое- (Producer-Consumer) ,с тем плюсом что свой код он ведь както ближе всегда))))
А еще есть 2 готовых самодельных threadpoola : СТП и ЕТП
но они тяжелые ,особенно первый ,хотя идейки там хорошие
а насчет безопасности то меня тревожила вотета часть
public void QueueWorkItem<T>(Action<T> action, T arg)
{
lock (_locker)
{
_itemQ.Enqueue(()=>action(arg));
Monitor.Pulse(_locker);
}
}
а именно захват локального переменного "арг" анонимным делегатом внутри критической секции
(хотя захват идет во время компиляции...)
но потом в принципе понял что ведь у каждого потока свой стек и локальные переменные именно там и они вроде как только их,хотя кто знает..
конечно могут быть еще проблемы с исключениями ,но предположим что исключений нет))))))
L>А у меня были: есть задачи, которые периодически запускаются и работают в фоне, собирая разную статистику, они по смвоей природе длительные и обращаться к полученным данным будут очень нескоро; а есть интерактивные задачи, запускаемые пользователями с интерфейса, они — короткие, и результат жедательно получить тут же. Если будет 1 пул потоков, то дительные задачи его тупо забьют и не дадут выполняться задачам второго типа. 2 пула эту проблему снимают.
А что значит забьют пул?
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, gandjustas, Вы писали:
L>>>А у меня были: есть задачи, которые периодически запускаются и работают в фоне, собирая разную статистику, они по смвоей природе длительные и обращаться к полученным данным будут очень нескоро; а есть интерактивные задачи, запускаемые пользователями с интерфейса, они — короткие, и результат жедательно получить тут же. Если будет 1 пул потоков, то дительные задачи его тупо забьют и не дадут выполняться задачам второго типа. 2 пула эту проблему снимают.
G>>Scheduler.NewThread и Scheduler.ThreadPool G>>И наступит счастье.
L>.Net 4 и счастье помахало ручкой.
Rx и на 3.5 работает
G>>Еще раз: не надо программировать в терминах потоков и пулов. L>Еще раз: никто и не прогрмаммирует в терминах потоков и пулов. Где ты их нашел?
Ну именно в этой теме
Здравствуйте, Tom, Вы писали:
Tom>>А что значит забьют пул?
Пусть у тебя пул на 10 задач например. Тут пришли 10 тяжелых задач, каждая минут на 15. Все, все потоки из пула заняты, последующие задачи будут ждать 15 минут.
Tom>И самое интересное, как второй пул поможет если первый забит
Второй пул крутит только легкие задачи, поэтому шансы, что задача не встанет в долгую очередь, гораздо выше.
Здравствуйте, gandjustas, Вы писали:
G>>>Scheduler.NewThread и Scheduler.ThreadPool G>>>И наступит счастье.
L>>.Net 4 и счастье помахало ручкой. G>Rx и на 3.5 работает
Кто-ж в продакшен будет деплоить экспериментальные либы?
G>>>Еще раз: не надо программировать в терминах потоков и пулов. L>>Еще раз: никто и не прогрмаммирует в терминах потоков и пулов. Где ты их нашел? G>Ну именно в этой теме
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, gandjustas, Вы писали:
G>>>>Scheduler.NewThread и Scheduler.ThreadPool G>>>>И наступит счастье.
L>>>.Net 4 и счастье помахало ручкой. G>>Rx и на 3.5 работает
L>Кто-ж в продакшен будет деплоить экспериментальные либы?
Я деплоил много раз. Это лучше чем свои велосипеды писать.
Здравствуйте, gandjustas, Вы писали:
G>>>Rx и на 3.5 работает
L>>Кто-ж в продакшен будет деплоить экспериментальные либы? G>Я деплоил много раз. Это лучше чем свои велосипеды писать.