Общие обсуждения > Компьютеры и интернет
Треды в линуксе
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