У меня возникли проблемы с пониманием некоторых концепций многопоточности. Я знаю основные принципы, но у меня возникают проблемы с пониманием того, когда отдельные потоки отправляются и используются ядрами.C++ - Вопросы о многопоточности
Я знаю, что наличие нескольких потоков позволяет коду работать параллельно. Я думаю, что это было бы хорошим дополнением к моей программе извлечения архива, которая могла бы распаковать блоки с использованием нескольких ядер. Он распаковывает все файлы в цикле for, и я надеюсь, что каждое доступное ядро будет работать с файлом.
Вот мои вопросы:
мне нужно запросить или даже учитывать количество ядер на машине или когда потоки работают, они автоматически отправляются в свободные сердечник ли?
Может ли кто-нибудь показать мне пример цикла for, использующего потоки. Скажем, в каждой итерации цикла он будет вызывать функцию, используя другой поток. Я читал, что идеальное число потоков, которые должны быть активными, - это количество ядер. Как узнать, когда ядро бесплатное или я должен проверить, присоединился ли он к основному потоку, и создать новый поток, когда он должен поддерживать определенное количество потоков.
Я что-то обманываю, или мои вопросы свидетельствуют о том, что я не понимаю понятия?
Этот код выглядит довольно просто. Если бы у меня было большое количество файлов и я использовал один поток для каждого файла, было бы разумнее иметь столько потоков, сколько ядер?Как бы я использовал цикл, в котором говорят на четырехъядерном процессоре, обрабатывались 4 файла в 4 потоках, и когда один из них освобождался, был создан другой поток файлов? Или это не мудро или слишком сложно? –
Чтобы упростить код, вы можете удалить все элементы 'threadAttributes'. 'PTHREAD_CREATE_JOINABLE' является значением по умолчанию, поэтому в приведенном выше коде вызов' pthread_create' с 'NULL' вместо' & threadAttributes' будет иметь тот же эффект. Также см. Http://linux.die.net/man/3/pthread_create и http://linux.die.net/man/3/pthread_attr_setdetachstate – sonicwave
@sonicwave Приятный улов, редактирование. – Keeler