std::thread без оси
От: Hоmunculus  
Дата: 28.08.25 08:11
Оценка: :)
О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?
Re: std::thread без оси
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.08.25 08:42
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

H>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?


Нет конечно. Как ты себе это представляешь?
Маньяк Робокряк колесит по городу
Re[2]: std::thread без оси
От: Hоmunculus  
Дата: 28.08.25 08:43
Оценка:
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, Hоmunculus, Вы писали:


H>>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?


M>Нет конечно.


Это ответ на первый или на второй вопрос?
Re[3]: std::thread без оси
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.08.25 08:46
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

H>>>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?


M>>Нет конечно.


H>Это ответ на первый или на второй вопрос?



После первого вопроса второй я даже не читал
Маньяк Робокряк колесит по городу
Re[4]: std::thread без оси
От: Hоmunculus  
Дата: 28.08.25 08:47
Оценка:
Здравствуйте, Marty, Вы писали:

M>После первого вопроса второй я даже не читал


Я так себе представляю, что разрабы стандратной библиотеки для конкретной архитектуры уже знают хардварные тонкости и все это предусмотрели.
Re: std::thread без оси
От: ononim  
Дата: 28.08.25 09:10
Оценка: +1
H>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?
А что такое хардварный поток?
Как много веселых ребят, и все делают велосипед...
Re[2]: std::thread без оси
От: Hоmunculus  
Дата: 28.08.25 09:11
Оценка: :))) :)
Здравствуйте, ononim, Вы писали:

H>>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?

O>А что такое хардварный поток?

Который физически распараллелен, а не перещелкиванием контекста
Re[3]: std::thread без оси
От: ononim  
Дата: 28.08.25 09:14
Оценка:
H>>>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?
O>>А что такое хардварный поток?
H>Который физически распараллелен, а не перещелкиванием контекста
Во всех современных осях потоки сделаны перещелкиванием контекста. Физических ядер на все потоки не хватит.
Как много веселых ребят, и все делают велосипед...
Re[4]: std::thread без оси
От: Hоmunculus  
Дата: 28.08.25 09:14
Оценка:
Здравствуйте, ononim, Вы писали:

H>>>>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?

O>>>А что такое хардварный поток?
H>>Который физически распараллелен, а не перещелкиванием контекста
O>Во всех современных осях потоки сделаны перещелкиванием контекста. Физических ядер на все потоки не хватит.

Ну по ядрам кто это распределяет? Ось? А без нее?
Re[5]: std::thread без оси
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.08.25 09:16
Оценка: 6 (1)
Здравствуйте, Hоmunculus, Вы писали:

M>>После первого вопроса второй я даже не читал


H>Я так себе представляю, что разрабы стандратной библиотеки для конкретной архитектуры уже знают хардварные тонкости и все это предусмотрели.


Нет конечно. Микроконтроллеров тысячи разных, каждый со своими приколами. Даже если это ARM на Cortex-M, не уверен, что это реально. Ведь по сути в библиотеке должен быть планировщик-шедулер, который бы их переключал, все примитивы типа семафоров/мьютексов, и тд и тп. Это считай уже ядро ОС. Собственно, FreeRTOS в общем-то только это и делает, в ней не особо чего есть больше. Кто тебе это всё будет реализовывать в виде стандартной библиотеки?

Более того. Я подозреваю, что тот же GCC, которым я собираю прошивки, он о микроконтроллере вообще ничего не знает. В результате его работы на выходе получается вполне стандартный ELF, который уже потом всякими тулзами преобразуется в HEX для зашивки
Маньяк Робокряк колесит по городу
Re[5]: std::thread без оси
От: ononim  
Дата: 28.08.25 09:21
Оценка: 6 (1)
O>>>>А что такое хардварный поток?
H>>>Который физически распараллелен, а не перещелкиванием контекста
O>>Во всех современных осях потоки сделаны перещелкиванием контекста. Физических ядер на все потоки не хватит.
H>Ну по ядрам кто это распределяет? Ось? А без нее?
Планировщик задач, который в случае оси является ее частью, но по сути при программирование под голое железо вся ось по сути может собой представлять планировщик и все
Ты пишешь код под что? Под FreeRTOS или таки под какую то жирную операционку? Если первое то там скорее всего std::thread просто не реализован. Можешь реализовать, под конкретный планировщик. Если чтото пожирнее, да хотябы vxWorks, то std::thread может уже и будет работать.
Как много веселых ребят, и все делают велосипед...
Re[3]: std::thread без оси
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.08.25 09:26
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

O>>А что такое хардварный поток?


H>Который физически распараллелен, а не перещелкиванием контекста


А если нет "хардварных" потоков? А если их два, а тебе надо 10 создать?
Маньяк Робокряк колесит по городу
Re[4]: std::thread без оси
От: Hоmunculus  
Дата: 28.08.25 09:27
Оценка:
Здравствуйте, Marty, Вы писали:

M>А если нет "хардварных" потоков? А если их два, а тебе надо 10 создать?


Ну так вопрос в том и был — умеет ли std::thread это или нет
Re[5]: std::thread без оси
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.08.25 09:31
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

M>>А если нет "хардварных" потоков? А если их два, а тебе надо 10 создать?


H>Ну так вопрос в том и был — умеет ли std::thread это или нет


Ну, если бы ты задумался над вопросом: "а как бы это могло бы быть?", то вопроса бы и не было бы
Маньяк Робокряк колесит по городу
Re[5]: std::thread без оси
От: ononim  
Дата: 28.08.25 09:33
Оценка: 6 (1)
M>>А если нет "хардварных" потоков? А если их два, а тебе надо 10 создать?
H>Ну так вопрос в том и был — умеет ли std::thread это или нет
Этот вопрос переводится как умеет ли С++ рантайм который ты пользуешься когда компиляешь код под какую то железку запускать тред на отдельном процессоре. Я думаю можно заранее сказать что нет, но ты можешь написать такой рантайм.
Но обычно дело обстоит так: есть железо, есть ось (хотябы минималистичная, типа FreeRTOS) под это железо и есть С++ рантайм. Потоки обычно реализуются в оси, а поддержка этого АПИ в рантайме С++ — это дело десятое.
А когда потоки реализуются, то в 99.9% случаев они реализуются через переключение контекста по таймеру или хотябы кооперативно. Многопроцессорность идет к этому всему как бонус. Я хз есть ли спецось в которой потоки работали бы строго каждый на своем процессоре и никак иначе. Может и ест в узких нишах. Но врядли можно ожидать что твой С++ рантайм будет работать именно так в твоем случае. Не факт что std::thread вообще будет работать у тебя.
Кстати расскажи подробнее под что ты пишешь, может будет больше инфы из этого
Как много веселых ребят, и все делают велосипед...
Re[3]: std::thread без оси
От: Doom100500 Израиль  
Дата: 28.08.25 13:21
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

H>Здравствуйте, ononim, Вы писали:


H>>>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?

O>>А что такое хардварный поток?

H>Который физически распараллелен, а не перещелкиванием контекста


А CreateThread даёт такие гарантии?
Спасибо за внимание
Re: std::thread без оси
От: σ  
Дата: 28.08.25 13:44
Оценка:
https://timsong-cpp.github.io/cppwp/n4950/intro.compliance.general#def:implementation,freestanding
https://timsong-cpp.github.io/cppwp/n4950/intro.multithread.general#1.sentence-9
Re: std::thread без оси
От: Pzz Россия https://github.com/alexpevzner
Дата: 28.08.25 14:01
Оценка: 6 (1) +1
Здравствуйте, Hоmunculus, Вы писали:

H>О есть какая-то гарантия что без оси создастся хардварный поток?


Даже и с осёй нет.

H>Или это самому надо руками к хардваре стучаться?


Ну у тебя или есть какой-то рантайм, который обеспечивает тебе минимальные удобства (аллокацию памяти там, илициализацию регистров, как C++ надо, потоки те же) или ты с железом один на один.

Есть "операционные системы", которые представляют собой такую большую библиотеку. Т.е., удобства есть, но полноценной оси, с процессами там и защитой памяти от них, нет.
Re[5]: std::thread без оси
От: Pzz Россия https://github.com/alexpevzner
Дата: 28.08.25 14:03
Оценка: 6 (1)
Здравствуйте, Hоmunculus, Вы писали:

H>Я так себе представляю, что разрабы стандратной библиотеки для конкретной архитектуры уже знают хардварные тонкости и все это предусмотрели.


Вопрос в том, как найти стандартную библиотеку, рассчитанную на запуск на голом железе, а не в среде определённой оси.

И, как вариант, можно использовать полноценную ось. Они бывают не только венда и линух, но и промышленные операционные системы. Например, QNX, RTEMS...
Re[4]: std::thread без оси
От: mike_rs Россия  
Дата: 29.08.25 08:07
Оценка: -1
Здравствуйте, Doom100500, Вы писали:

H>>Который физически распараллелен, а не перещелкиванием контекста

D>А CreateThread даёт такие гарантии?

если задать affinity mask, то дает, а что?
Re[5]: std::thread без оси
От: ononim  
Дата: 29.08.25 09:37
Оценка: +1
_>если задать affinity mask, то дает, а что?
Он тогда дает гарантию что твой тред не будет работать нигде кроме указанного процессора/ов.
Но это вовсе не гарантирует что никто кроме тебя не будет работать на этом процессоре, и соответственно вызывать context switch-и.
Как много веселых ребят, и все делают велосипед...
Re[5]: std::thread без оси
От: Doom100500 Израиль  
Дата: 29.08.25 12:02
Оценка:
Здравствуйте, mike_rs, Вы писали:

_>Здравствуйте, Doom100500, Вы писали:


H>>>Который физически распараллелен, а не перещелкиванием контекста

D>>А CreateThread даёт такие гарантии?

_>если задать affinity mask, то дает.


И автоматически сразы никакой другой процесс не полезет в твой афинити, да? И Переключения контекста не будет, да?

_>а что?


Ну вот и всё
Спасибо за внимание
Re: std::thread без оси
От: B0FEE664  
Дата: 29.08.25 12:23
Оценка: 6 (1) +1
Здравствуйте, Hоmunculus, Вы писали:

H>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?


Если запускать без операционной системы, то будет создан ровно один поток (в котором будет запущена main функция), он же "хардварный". Мне не известны компиляторы, которые реализуют поддержку std::thread без операционной системы. Я таким не занимался, но теоретически можно скомпилировать исходники так, чтобы полученный в результате сборки бинарник содержал в себе часть операционной системы необходимой для запуска программы и запускал эту программу при старте. Однако гарантий "хардварности" этого потока всё равно нет.
И каждый день — без права на ошибку...
Re[2]: std::thread без оси
От: fk0 Россия https://fk0.name
Дата: 30.08.25 10:08
Оценка:
Здравствуйте, Marty, Вы писали:

H>>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?

M>Нет конечно. Как ты себе это представляешь?

В прерываниях делаем условно setjmp и longjmp...
Re: std::thread без оси
От: cppguard  
Дата: 31.08.25 02:54
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

H>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?


Немного оффтопну. А какой смысл писать сложные программы для голого железа? Там столько уровней абстракций, что страшно представить количество человеко-часов, чтобы реализовать хотя бы всё базовое из POSIX.
Re: std::thread без оси
От: LaptevVV Россия  
Дата: 31.08.25 05:04
Оценка:
H>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?
Гарантий нет.
Я на 98.5% уверен, что без оси ничего нет, но 1.5% — я б проверил.
Если что, то я писал ось на пустую машину.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: std::thread без оси
От: B0FEE664  
Дата: 01.09.25 08:55
Оценка:
Здравствуйте, cppguard, Вы писали:

C>Немного оффтопну. А какой смысл писать сложные программы для голого железа? Там столько уровней абстракций, что страшно представить количество человеко-часов, чтобы реализовать хотя бы всё базовое из POSIX.


Это делается для случаев, когда от софта зависит жизнь людей: медицина, авионика и тому подобное. Поэтому всякие позиксы с лицензиями "мы ни за что не отвечаем", по законам (различных стран) не могут быть использованы.
И каждый день — без права на ошибку...
Re[3]: std::thread без оси
От: steep8  
Дата: 01.09.25 10:31
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Это делается для случаев, когда от софта зависит жизнь людей: медицина, авионика и тому подобное. Поэтому всякие позиксы с лицензиями "мы ни за что не отвечаем", по законам (различных стран) не могут быть использованы.


для этого берут сертифицированную ось типа qnx , а не пишут свой велосипед.
Re[4]: std::thread без оси
От: B0FEE664  
Дата: 01.09.25 12:24
Оценка:
Здравствуйте, steep8, Вы писали:

S>для этого берут сертифицированную ось типа qnx , а не пишут свой велосипед.

Пишут и ещё как пишут. Во-первых в больших конторах можно переиспользовать уже существующую кодовую базу, а во-вторых штуку за разработчика в месяц за всё время жизни продукта (а это десятки лет) — получится существенная сумма.
И каждый день — без права на ошибку...
Re[6]: std::thread без оси
От: vdimas Россия  
Дата: 02.09.25 22:23
Оценка:
Здравствуйте, ononim, Вы писали:

O>А когда потоки реализуются, то в 99.9% случаев они реализуются через переключение контекста по таймеру или хотябы кооперативно. Многопроцессорность идет к этому всему как бонус.


Угу.
Даже просто запустить на железке второй поток при наличии второго ядра (или более ядер и процов) — это немножко приседаний требуется, бо при запуске все остальные ядра, кроме ядра 0 процессора 0, запускаются в т.н. "состоянии сна". Эти другие процы/ядра надо разбудить через специальное прерывание, указав адрес, с которого начать исполнять код.

Далее.
Существуют различные реализации STL с поддержкой различных стандартов АПИ для различных ОС.
Если оси нет, но под контроллер есть либы создания и переключения потоков + примитивы синхронизации, то ты можешь сам написать эту часть STL, чтобы использовать, допустим, имеющийся уже готовый код в своей разработке для железки.
Re[3]: std::thread без оси
От: cppguard  
Дата: 08.09.25 02:48
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Это делается для случаев, когда от софта зависит жизнь людей: медицина, авионика и тому подобное. Поэтому всякие позиксы с лицензиями "мы ни за что не отвечаем", по законам (различных стран) не могут быть использованы.


Так POSIX это стандарт, а не продукт. QNX, например, реализует POSIX и вполне используется в таких проектах. В mission-critical задачах используется слоёный подход, и только самые нижние слои пишутся в голом железе, где нет потоков, потому что потоки это априори боль, страдания и race-conditions.
Re: std::thread без оси
От: andyp  
Дата: 08.09.25 09:03
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

H>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?


Без оси тебе потоки скорее всего в либу не положат. Старая традиция
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.