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