Страницы

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

понедельник, 18 февраля 2019 г.

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

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

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


Ответ

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

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

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