Когда я не должен использовать ThreadPool в .Net? [закрыто]

Если вы хотите, чтобы изменения были автоматическими, вы можете добавить эти две строки в файл axes.py matplotlib: Посмотрите на эту строку:

   self.color_cycle = itertools.cycle(clist)

и добавьте следующую строку внизу:

   self.line_cycle = itertools.cycle(["-",":","--","-.",])

И найдите строку:

   kw['color'] = self.color_cycle.next()

и добавьте строку:

   kw['linestyle'] = self.line_cycle.next()

Думаю, вы можете сделать то же самое для маркера.

37
задан Gennady Vanin Геннадий Ванин 15 April 2013 в 12:56
поделиться

7 ответов

Единственная причина, почему я не использовал бы ThreadPool для дешевой многопоточности, состоит в том, если мне нужен to…

  1. взаимодействуют с выполнением метода (например, для уничтожения его)
  2. выполненный код поток STA (это произошло со мной)
  3. , поддерживают поток после того, как мое приложение умерло (ThreadPool, потоки являются фоновыми потоками)
  4. в случае, если я должен изменить приоритет Потока. Мы не можем изменить приоритет потоков в ThreadPool, который по умолчанию Нормален.

P.S.: статья MSDN "Управляемый Пул потоков" содержит названный раздел, "Если не для Использования Потоков Пула потоков" , с очень похожим, но немного большим количеством полного списка возможных причин для того, чтобы не использовать пул потоков.

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

, С другой стороны, смотрят на новое Параллельная Платформа Расширений , который имеет некоторый аккуратный материал там, который может удовлетворить Вашим потребностям, не имея необходимость использовать ThreadPool.

18
ответ дан V0d01ey 15 April 2013 в 12:56
поделиться
  • 1
    Я didn' t вынимают .eot' s предназначение для IE. Ошибка реальна, но потому что это только происходит в этих несколько необычных случаях iframes и т.д. он doesn' t на самом деле влияют на это много сайтов. Использование веб-шрифтов плюс iframes, которые приходят и уходят, другими словами, довольно редко. – Pointy 26 October 2011 в 12:56

Пулы потоков имеют смысл каждый раз, когда у Вас есть понятие рабочих потоков. Любое время можно легко разделить обработку в меньшие задания, каждое из которых может быть обработано независимо, рабочие потоки (и поэтому пул потоков) имеет смысл.

Пулы потоков не имеют смысла, когда Вы должны распараллелить, которые выполняют совершенно отличающиеся и несвязанные действия, которые нельзя считать "заданиями"; например, Один поток для обработки событий GUI, другой для обработки бэкенда. Пулы потоков также не имеют смысла при обработке форм конвейер.

В основном, если у Вас есть потоки, которые запускаются, обработайте задание и выйдите, пул потоков является, вероятно, способом пойти. Иначе пул потоков действительно не собирается помогать.

8
ответ дан Derek Park 15 April 2013 в 12:56
поделиться
  • 1
    Нет, это не верно. У меня действительно на самом деле есть точно такой CSS. Проблемой является ошибка IE8, несомненно об этом. Проверьте примеры, которые были связаны в других ответах и комментариях. – Pointy 26 October 2011 в 03:56

К ответу quarrelsome я добавил бы, что лучше не использовать поток ThreadPool, если необходимо гарантировать, что поток сразу начнет работу. Максимальное количество выполнения объединенных потоком потоков ограничено на appdomain, таким образом, Вашей обрабатываемой детали, вероятно, придется ожидать, если они все заняты. Это называют "пользовательским объектом работы очереди", в конце концов.

Два протеста, конечно:

  1. можно изменить максимальное количество объединенных потоком потоков в коде во времени выполнения, таким образом, нет ничего для остановки Вас проверяющий ток по сравнению с максимальным количеством и повышающий максимум при необходимости.
  2. Вращение новый поток идет со своим собственным штрафом времени - стоит ли для Вас получить удар, зависит от Ваших обстоятельств.
8
ответ дан Dogmang 15 April 2013 в 12:56
поделиться
  • 1
    О, стреляйте, я думал, что уже имел (в первый раз, когда я сделал щедрость). Извините, я нажал его теперь. – Pointy 25 October 2011 в 22:45

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

А-ч, аргумент от полномочий - но всегда быть в поисках людей, которые могли бы быть в команде ядра Windows.

Ни один из нас не спорил с тем, что, если у Вас есть некоторые конкретные требования тогда.NET, ThreadPool не мог бы быть правильной вещью. То, против чего мы возражаем, является опошлением затрат для машины создания потока.

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

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

2
ответ дан Will Dean 15 April 2013 в 12:56
поделиться
  • 1
    @Pointy И I' ve обновил с тем, что должно быть рабочим решением. Если это doesn' t работа для Вас, сообщить мне. – LoveAndCoding 25 October 2011 в 17:37

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

1
ответ дан Quibblesome 15 April 2013 в 12:56
поделиться
  • 1
    Обновление @Pointy 1 отправленный. Найденный причиной проблемы. Исследование. Кроме того, моя фиксация для развертки через таблицы стилей все еще, кажется, работает в данный момент, но I' ll видят если я can' t находят лучшее средство исправления. – LoveAndCoding 25 October 2011 в 17:20

@Eric, я оказываюсь перед необходимостью соглашаться с Деканом. Потоки являются дорогими. Вы не можете предположить, что Ваша программа является единственным выполнением. Когда все являются жадными с ресурсами, проблема умножается.

я предпочитаю создавать свои потоки вручную и управлять ими сам. Это сохраняет код очень легким понять.

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

Thread t = new Thread(new ThreadStart(DoSomething));  
t.Start();  
t.Join();  

я надеюсь, что у Вас обычно был бы некоторый дополнительный код промежуточным Start() и Join(). Иначе дополнительный поток бесполезен, и Вы тратите впустую ресурсы ни по какой причине.

Люди слишком боятся ресурсов, используемых потоками. Я никогда не видел создание и запуск потока для взятия больше, чем миллисекунда. Нет никакого жесткого предела количества потоков, которые можно создать. Использование оперативной памяти минимально. Как только у Вас есть несколько сотен потоков, ЦП становится проблемой из-за контекстных переключений, таким образом, в той точке Вы могли бы хотеть стать необычными со своим дизайном.

миллисекунда А длинна время на современных аппаратных средствах. Это - 3 миллиона циклов на машине на 3 ГГц. И снова, Вы не единственный, создающий потоки. Ваши потоки конкурируют за ЦП наряду с потоками любой программы. Если Вы используете потоки not-quite-too-many, и также - другая программа, то вместе Вы использовали слишком много потоков.

Серьезно, не делайте жизнь более сложной, чем это должно быть. Не используйте пул потоков, если Вам не нужно что-то очень определенное, которое он предлагает.

Действительно. Не делайте жизнь более сложной. Если для Вашей программы нужны несколько рабочих потоков, не перестраивайте колесо. Используйте пул потоков. Вот почему это там. Строковый класс самокрутки?

29
ответ дан Ian Boyd 15 April 2013 в 12:56
поделиться
  • 1
    хорошо. если у Вас действительно, на самом деле, было это css, почему didn' t Вы просто оставляют его там? я don' t понимают почему you' d вынимают .eot' s предназначение т.е. i' m, не говоря you' ре неправильно, но ie8' s довольно старый.... я думал бы there' d быть намного большим количеством документации о такой ошибке. и i' ve не когда-то имел проблемный перекрестный браузер с тем синтаксисом. просто попытка помочь. – albert 26 October 2011 в 04:26

@Eric

@Derek, я точно не соглашаюсь со сценарием, который Вы используете в качестве примера. Если Вы не знаете точно, что работает на Вашей машине и точно сколько общего количества потоки, дескрипторы, процессорное время, RAM, и т.д., который Ваше приложение будет использовать под определенным количеством загрузки, Вы в беде.

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

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

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

И честно говоря, если Вы не знаете точно, какой метод необходимо использовать: ручные потоки, пул потоков, делегаты, и как реализовать его, чтобы сделать, в чем нужно Ваше приложение, Вы в беде.

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

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

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

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

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

-1
ответ дан Derek Park 15 April 2013 в 12:56
поделиться
  • 1
    Да, я соглашаюсь - это, кажется, важно. Спасибо за Ваш ответ! – Pointy 18 June 2013 в 13:02
Другие вопросы по тегам:

Похожие вопросы: