Цитата:от:Дык
Каждое переключение потока вызывает перегрузку регистров процессора данными потока, и скорее всего, полную перегрузку новыми данными кэша процессора. Если процессор многоядерный, то в пределах количества ядер сие - не очень критично. А вот ваше предложение запускать 100 потоков на даже 4-х ядерном процессоре - как раз менее эффективно, чем запускать на 4-х ядерном процессоре 3 или 4 потока конвертации.Подробнее
Вы, наверное, не поверите, но даже если прога написана в один поток - она все равно прерывается. Прерывания вставляет система прямо в код любой проги, чтобы обеспечить многозадачность. Если интересно, это называется pre-emptive multitasking. Прерывание процесса даже более дорого, чем переключение между потоками внутри процесса. Так что Ваш аргумент не проходит.
Цитата:от:Дык
И это только процессор. Есть еще и оперативная память - сколько нужно оперативной памяти для обработки 100 RAW-файлов? Есть еще жесткий диск, который более менее неплохо обрабатывает ситуации взять один файл тут, а второй там, но будет тратить кучу времени на бегатню головки диска туда-сюда при считывании-записи 100 файлов одновременно.Подробнее
Если Ваш единственный поток ждет окончания дисковой операции чтобы начать вычисление - он бездельничает собакой на сене во время своих тиков. Пул позволяет организовать ожидание для всех потоков в отдельном потоке, а тики отдавать тому, кто их может использовать.
Many applications create threads that spend a great deal of time in the sleeping state, waiting for an event to occur. Other threads might enter a sleeping state only to be awakened periodically to poll for a change or update status information. Thread pooling enables you to use threads more efficiently by providing your application with a pool of worker threads that are managed by the system.
One thread monitors the status of several wait operations queued to the thread pool. When a wait operation completes, a worker thread from the thread pool executes the corresponding callback function.
Там же, чтобы не утруждать: http://msdn2.microsoft.com/en-us/library/system.threading.threadpool(VS.71).aspx
И поверьте, это далеко не единственный момент, который грамотный разработчик учитывает. Вот еще один трюк с пулом, из того же источника:
You can also queue work items that are not related to a wait operation to the thread pool. To request that a work item be handled by a thread in the thread pool, call the QueueUserWorkItem method. This method takes as a parameter a reference to the method or delegate that will be called by the thread selected from the thread pool.
Поверьте, не одна эта статья, книги написаны, как дизайнить проги на потоках. Но это как CMS - не проинтуичишь, надо изучать предмет, чтобы иметь представление. Одного здравого смысла мало.