Несколько дней назад написал пост про то, как количество нитей влияет на скорость вычислений. В комментариях, меня неоднократно обвинили в том, что при использовании нитей используется только одно ядро (или один процессор), а для просветленного многоядерного программирования надо использовать Parallel Extensions. Подобные утверждения меня, мягко сказать, удивили, потому решил разобраться более детально в вопросе.
Thread.
В русской версии MSDN – «поток», что вносит некоторую неразбериху. Потому, я для обозначения Thread буду использовать термин «нить», который тоже является более-менее устоявшимся. Опять же, Лингво его трактует вполне однозначно: «4) компьют. нить, трэд (в мультизадачных средах: подпроцесс, запускаемый другим процессом в адресном пространстве этого (запускающего) процесса)».
Взаимосвязь между процессом и нитью.
Обратимся к MSDN и установим связь между нитями и процессами.
Процесс – это набор виртуального пространства памяти, кода, данных и системных ресурсов. Нить – это код, который последовательно выполняется внутри процесса. Процессор выполняет нити, не процессы, т.е. любое 32-битное приложение имеет как минимум один процесс, а процесс всегда имеет как минимум одну нить исполнения, известную как основную нить.
Опять же, обратимся к рекомендациям AMD аж 2006 года, чей процессор показал странные результаты. «Используйте различные объекты нитей доступные в .Net Framework, такие как: пространство имен System.Threading, Thread Class, …»
Ну и наконец, включаем логику и понимаем, что Parallel Extentions еще не релиз, проект был запущен в конце 2007, а многоядерные процессоры уже во всю ставились на рабочие места. Для чего создана PE – «Она создана для того, чтобы разработчики могли пользоваться современными многоядерными архитектурами, не утруждая себя трудоемким управлением потоками.»
Про Parallel Extensions есть хороший пост от 3fonov
Thread.
В русской версии MSDN – «поток», что вносит некоторую неразбериху. Потому, я для обозначения Thread буду использовать термин «нить», который тоже является более-менее устоявшимся. Опять же, Лингво его трактует вполне однозначно: «4) компьют. нить, трэд (в мультизадачных средах: подпроцесс, запускаемый другим процессом в адресном пространстве этого (запускающего) процесса)».
Взаимосвязь между процессом и нитью.
Обратимся к MSDN и установим связь между нитями и процессами.
Процесс – это набор виртуального пространства памяти, кода, данных и системных ресурсов. Нить – это код, который последовательно выполняется внутри процесса. Процессор выполняет нити, не процессы, т.е. любое 32-битное приложение имеет как минимум один процесс, а процесс всегда имеет как минимум одну нить исполнения, известную как основную нить.
Опять же, обратимся к рекомендациям AMD аж 2006 года, чей процессор показал странные результаты. «Используйте различные объекты нитей доступные в .Net Framework, такие как: пространство имен System.Threading, Thread Class, …»
Ну и наконец, включаем логику и понимаем, что Parallel Extentions еще не релиз, проект был запущен в конце 2007, а многоядерные процессоры уже во всю ставились на рабочие места. Для чего создана PE – «Она создана для того, чтобы разработчики могли пользоваться современными многоядерными архитектурами, не утруждая себя трудоемким управлением потоками.»
Про Parallel Extensions есть хороший пост от 3fonov