Многопоточность. Если я использую семафор, могу ли я создать много потоков при запуске или их должно быть немного? - PullRequest
0 голосов
/ 21 октября 2019

Многопоточность. Если я использую семафор, могу ли я создать много потоков при запуске или у меня должно быть только несколько?

У меня есть вектор точек. Длина вектора равна K. K = 100. Но, возможно, это значение увеличится. Каждая точка является n-мерным вектором. У меня есть массив указателей на функции. Размер 10. И я должен вычислить каждую функцию для каждой точки. И сохраните его в текстовом файле. Для этого мне нужно использовать многопоточность.

Я новичок в распараллеливании.

У меня 4 ядра. Поэтому я хочу запустить 4 потока одновременно. Я знаю, что есть семафор с counter = 4. Все функции не имеют общих переменных. Я думаю, что они разделяют только TXT-файл.

Это плохая практика для создания на первых 100 потоков? И после этого для использования семафора со счетчиком = 4

4 потока работают одновременно, 96 ожидают. После того, как один из них сделает все, снова будет 4 потока, но 95 ожидают. Занимают ли ожидающие потоки память или другие ресурсы?

Или я должен создавать новый поток только после завершения одного из 4 запущенных потоков?

1 Ответ

0 голосов
/ 21 октября 2019

Ожидание потоков занимает память, а переключение между потоками занимает такты. Это включает в себя обращение к ядру, и переключение контекста не дешево. Когда вы пытаетесь распараллелить процесс, который легко разделить на маленькие порции, обычно более эффективно иметь такое же количество потоков, как у вас ядер.

...