Страницы

Поиск по вопросам

четверг, 9 января 2020 г.

Task vs Thread: на каком ядре

#c_sharp #многопоточность #tpl #task


Про Task:


  Данная библиотека позволяет распараллелить задачи и выполнять их сразу
  на нескольких процессорах, если на целевом компьютере имеется
  несколько ядер. Кроме того, упрощается сама работа по созданию новых
  потоков. Поэтому начиная с .NET 4.0. рекомендуется использовать именно
  TPL и ее классы для создания многопоточных приложений, хотя
  стандартные средства и класс Thread по-прежнему находят широкое
  применение.


Источник: ссылка



Изначально кол-во потоков в пуле потоков равно числу ядер процессора. Вопрос: каждый
поток из потока пулов будет выполняться на "своем" ядре?


А как дела обстоят с обычными потоками - Thread (понимаю, что Task - более высокая
абстракция Thread)? Новый Thread может выполняться как на ядре, где выполняется главный
поток, так и на другом ядре, т.е. не гарантирует выполнение на новом ядре?
    


Ответы

Ответ 1



В цитате явно смесь процессоров и ядер. Но распараллеливаются обычно по ядрам, а эти ядра могут принадлежать разным процессорам. Изначально кол-во потоков в пуле потоков равно числу ядер процессора. на усмотрение библиотеки. Вопрос: каждый поток из потока пулов будет выполняться на "своем" ядре? можно сделать так, что бы каждый поток исполнялся только на своем ядре (осознанно привязав их), но так обычно не делают - планировщик ОС обычно несколько умнее и будет их разбрасывать по ядрам по своему разумению. А как дела обстоят с обычными потоками - Thread (понимаю, что Task - более высокая абстракция Thread)? Да, Task - абстракция, которая прячет от программиста детали. Просто таска, это функция, которая выполняется внутри потока. Синхронизация, очереди и получения результата прячутся библиотекой. Новый Thread может выполняться как на ядре, где выполняется главный поток, так и на новом? Там, где будет удобнее ОС разместить его. Более того, поток может "гулять" по ядрам.

Комментариев нет:

Отправить комментарий