Общие обсуждения > Компьютеры и интернет

Треды в линуксе

(1/2) > >>

Yougi:
 Прочитал тут невнятную статейку про мультитреды в линуксе, появились вопросы.
 В статейке вроде как написано, что треды выполняются параллельно и независимо.
 Так вот, если я сто операций умножения разнесу на четыре треда по двадцать пять операций в каждом, будут ли они выполняться в четыре раза быстрее?
 Сколько тредов я могу создать единовременно? Могу ли я прибить тред и запустить его с новой задачей?
 Там предлагается использовать какую-то левую библиотеку, насколько быстродействие определяется рукожопостью её создателя?

Upliner:

--- Quote from: Yougi on 22 July 2023, 16:17:33 --- Так вот, если я сто операций умножения разнесу на четыре треда по двадцать пять операций в каждом, будут ли они выполняться в четыре раза быстрее?
 Сколько тредов я могу создать единовременно? Могу ли я прибить тред и запустить его с новой задачей?
--- End quote ---
Если сто операций -- то оверхед по созданию или коммуникации будет больше, чем выгода от распараллеливания. Если сто миллионов и есть четырёхядерный процессор -- то да, будет ускорение в 4 раза.
Тредов где-то до тысячи думаю можно создать, зависит от свободных ресурсов системы. Но как только количество тредов превысит количество логических процессоров -- производительность начнёт снижаться. Прибить тред можно, но обычно не рекомендуется, т.к. это может оставить программу в невалидном состоянии и могут утечь ресурсы. Но если реально знаешь что делаешь, то можно. Насчёт последнего -- как правило от библиотеки зависит только оверхед по созданию тредов, а дальше треды уже сами по себе.

Yougi:

--- Quote ---Если сто операций -- то оверхед по созданию или коммуникации будет больше, чем выгода от распараллеливания.
--- End quote ---
Я, может, коряво выразился - мне нужно делать 100-150 плавучих умножений каждые 120 микросекунд, по прерыванию от АЦП. Как я понял, треды создадутся один раз, а дальше будут молотить параллельно.

Upliner:

--- Quote from: Yougi on 22 July 2023, 16:47:39 ---Я, может, коряво выразился - мне нужно делать 100-150 плавучих умножений каждые 120 микросекунд, по прерыванию от АЦП. Как я понял, треды создадутся один раз, а дальше будут молотить параллельно.
--- End quote ---
Вот тут честно говоря хз, наверное только экспериментальным путём можно выяснить, есть ли выгода.
И кстати, как прерывания ловятся? Через read() из девайса или через модуль ядра?

Yougi:
 Придётся эксперимент ставить... В линуксе системный таймер с какой частотой молотит? И как до него доступиться?

--- Quote ---И кстати, как прерывания ловятся?
--- End quote ---
Пока - через ножку GPIO, ну, то есть это и не прерывание вовсе. Просто флаг ставится, что новые данные есть, и они обрабатываются. Не вкурил я ещё, как настоящие прерывания на малинах работают.

Navigation

[0] Message Index

[#] Next page

Go to full version