Показать сообщение отдельно
  #5  
Старый 24.11.2012, 17:25
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
В вопросе оптимизации использование параллельных потоков возможно только для многоядерного процессора.
Примерно так. Примерно потому, что если есть обращение к внешним ресурсам (файлам, БД, сети), то поток на время ожидания этого ресурса убирается из планирования. Поэтому пока один будет ждать чтения из файла или из БД, он может перестать выполняться, и дать время другому потоку. А когда дело касается сети, поток может вообще "повеситься" на несколько секунд или даже десятков секунд, пока придут данные. В многопоточной системе это время висения могут занять полезные вычисления.
Но если речь идет исключительно о вычислениях, без ввода-вывода, то это так.
Цитата:
Выходит, что если я создам 4 потока, то процессор с двумя ядрами параллельно сможет выполнять только 2?
Да.
Цитата:
А так же возник вопрос, а нужно ли указывать где-то, что потоки должны выполняться на разных ядрах или виндовс сам поймет?
Поток - понятие ОС. Если в очереди потоков есть те, которые готовы к выполнению (не спят и не ожидают событий), то она их запускает, пока есть свободные камни.
Потоку выделяется квант времени (например, 10 мс). По истечении этого времени если есть другие готовые к выполнению потоки, то текущий вырубается и на его место ставится другой. То же самое касается и процессов в Windows (потоки лучше только тем, что при их переключении требуется меньше ресурсов).
Цитата:
И вот еще если нужно указывать, тогда если это запустить на одно-ядерном процессоре, тогда скорее всего он выведет в ошибку.
Ничего он не выведет. В винде на одноядерном процессоре преспокойно работают в псевдопараллельном режиме ~80 процессов. В каждом по несколько потоков. Винда сама разберется с переключением.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием