_>если задать affinity mask, то дает, а что?
Он тогда дает гарантию что твой тред не будет работать нигде кроме указанного процессора/ов.
Но это вовсе не гарантирует что никто кроме тебя не будет работать на этом процессоре, и соответственно вызывать context switch-и.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, mike_rs, Вы писали:
_>Здравствуйте, Doom100500, Вы писали:
H>>>Который физически распараллелен, а не перещелкиванием контекста D>>А CreateThread даёт такие гарантии?
_>если задать affinity mask, то дает.
И автоматически сразы никакой другой процесс не полезет в твой афинити, да? И Переключения контекста не будет, да?
_>а что?
Здравствуйте, Hоmunculus, Вы писали:
H>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?
Если запускать без операционной системы, то будет создан ровно один поток (в котором будет запущена main функция), он же "хардварный". Мне не известны компиляторы, которые реализуют поддержку std::thread без операционной системы. Я таким не занимался, но теоретически можно скомпилировать исходники так, чтобы полученный в результате сборки бинарник содержал в себе часть операционной системы необходимой для запуска программы и запускал эту программу при старте. Однако гарантий "хардварности" этого потока всё равно нет.
Здравствуйте, Marty, Вы писали:
H>>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться? M>Нет конечно. Как ты себе это представляешь?
Здравствуйте, Hоmunculus, Вы писали:
H>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?
Немного оффтопну. А какой смысл писать сложные программы для голого железа? Там столько уровней абстракций, что страшно представить количество человеко-часов, чтобы реализовать хотя бы всё базовое из POSIX.
H>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?
Гарантий нет.
Я на 98.5% уверен, что без оси ничего нет, но 1.5% — я б проверил.
Если что, то я писал ось на пустую машину.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, cppguard, Вы писали:
C>Немного оффтопну. А какой смысл писать сложные программы для голого железа? Там столько уровней абстракций, что страшно представить количество человеко-часов, чтобы реализовать хотя бы всё базовое из POSIX.
Это делается для случаев, когда от софта зависит жизнь людей: медицина, авионика и тому подобное. Поэтому всякие позиксы с лицензиями "мы ни за что не отвечаем", по законам (различных стран) не могут быть использованы.
Здравствуйте, B0FEE664, Вы писали:
BFE>Это делается для случаев, когда от софта зависит жизнь людей: медицина, авионика и тому подобное. Поэтому всякие позиксы с лицензиями "мы ни за что не отвечаем", по законам (различных стран) не могут быть использованы.
для этого берут сертифицированную ось типа qnx , а не пишут свой велосипед.
Здравствуйте, steep8, Вы писали:
S>для этого берут сертифицированную ось типа qnx , а не пишут свой велосипед.
Пишут и ещё как пишут. Во-первых в больших конторах можно переиспользовать уже существующую кодовую базу, а во-вторых штуку за разработчика в месяц за всё время жизни продукта (а это десятки лет) — получится существенная сумма.
Здравствуйте, ononim, Вы писали:
O>А когда потоки реализуются, то в 99.9% случаев они реализуются через переключение контекста по таймеру или хотябы кооперативно. Многопроцессорность идет к этому всему как бонус.
Угу.
Даже просто запустить на железке второй поток при наличии второго ядра (или более ядер и процов) — это немножко приседаний требуется, бо при запуске все остальные ядра, кроме ядра 0 процессора 0, запускаются в т.н. "состоянии сна". Эти другие процы/ядра надо разбудить через специальное прерывание, указав адрес, с которого начать исполнять код.
Далее.
Существуют различные реализации STL с поддержкой различных стандартов АПИ для различных ОС.
Если оси нет, но под контроллер есть либы создания и переключения потоков + примитивы синхронизации, то ты можешь сам написать эту часть STL, чтобы использовать, допустим, имеющийся уже готовый код в своей разработке для железки.
Здравствуйте, B0FEE664, Вы писали:
BFE>Это делается для случаев, когда от софта зависит жизнь людей: медицина, авионика и тому подобное. Поэтому всякие позиксы с лицензиями "мы ни за что не отвечаем", по законам (различных стран) не могут быть использованы.
Так POSIX это стандарт, а не продукт. QNX, например, реализует POSIX и вполне используется в таких проектах. В mission-critical задачах используется слоёный подход, и только самые нижние слои пишутся в голом железе, где нет потоков, потому что потоки это априори боль, страдания и race-conditions.
Здравствуйте, Hоmunculus, Вы писали:
H>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?
Без оси тебе потоки скорее всего в либу не положат. Старая традиция