Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2013, 19:31   #1
wanes101
Форумчанин
 
Регистрация: 04.06.2010
Сообщений: 212
По умолчанию Поток vs пул потоков

Еще раз здравствуйте
Я читал Msdn про многопоточность и не понял отличия пула токов от просто потоков, кроме как понял, что пул потоков используется для решения простых задач а поток для более сложных.
Видимо не достаточно рассказано, чем отличается пул потока от потока.
т.е. с точки зрения .net меня интересуют два класса: ThreadPool и Thread
wanes101 вне форума Ответить с цитированием
Старый 10.07.2013, 19:45   #2
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Суть пула в том, что там хранятся уже готовые потоки. Создание потока - очень и очень затратная операция. Попробуйте создать в цикле 20 Thread'ов и замерьте время. Thread реально создает новый поток, но с возможностью его полного контроля (Abort, например).
Плюс к тому, потоки из пула всегда background. Приложение закрывается, когда все НЕ-background потоки завершились. Фоновые просто убиваются автоматически, без возможности корректного завершения.
То есть, пул нужно использовать для маленьких под-задач, Thread для полноценной, долгоживущей сущности. Например если в компьютерной игре один поток рисует, а другой просчитывает физику, то логично сделать их Thread.
Ну и вообще говоря, пул потоков ограничен. Никто не гарантирует, что запущенная задача начнет выполняться там сразу, потому что все его потоки могут уже быть заняты другими задачами. В таком случае важная задача может простоять в очереди непозволительно много времени, чего не произойдет с Thread'ом.
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 10.07.2013, 20:38   #3
wanes101
Форумчанин
 
Регистрация: 04.06.2010
Сообщений: 212
По умолчанию

Вы хорошо рассказали о области их применения, но всеж что представляет пул не очень.
Я так понимаю: пулы это потоки которые выполняются при освобождении процесса от потоков, и они более быстро инициируют и освобождают ресурсы?
wanes101 вне форума Ответить с цитированием
Старый 10.07.2013, 20:59   #4
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Цитата:
пулы это потоки
Пулы - это не потоки :D
Пул - это хранилище заранее заготовленных объектов. В данном случае потоков. Потоки из пула создаются CLR и в вашей программе не требуется никаких операций по их созданию. Это главное отличие и преимущество: вы просто отдаёте пулу некоторую задачу, а он выделяет под неё свободный поток. Когда задача выполнена, поток засыпает и пул может скинуть на него следующую ожидающую задачу. В остальном потоки работают так же как "обычные".
По работе с ресурсами отличие одно: когда завершились все основные потоки вашей программы, потоки из пула автоматически закрываются, при этом нет никакой возможности их заставить выполнить корректное завершение (освободить ресурсы). Именно поэтому для критических задач пул лучше не использовать.
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 10.07.2013, 21:15   #5
wanes101
Форумчанин
 
Регистрация: 04.06.2010
Сообщений: 212
По умолчанию

А теперь все понял спасибо
wanes101 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IOCP и Пул потоков Neobrat Работа с сетью в Delphi 0 24.07.2012 13:10
Пул потоков nikol_ Общие вопросы Delphi 18 26.01.2012 12:07
Поток. Не получается создать поток. Выдает ошибки при запуске bigory Общие вопросы по Java, Java SE, Kotlin 3 23.09.2010 00:40
Дескрипторы потоков - Для каждого элемента списка необходимо создать поток, выполняющий требуемые функции kdv0403 Общие вопросы Delphi 2 09.06.2007 11:12