Это на 100% нормально относительно поточной обработки на любом и всех операционных системах. Документация для Вашей библиотеки потока, любых примеров и учебных руководств, которые можно найти, и т.д., вероятно, будет считать обязательным для себя это, поскольку это часто сбивает с толку людей, когда они знают досконально о поточной обработке.
Это означает, если Вы не принимаете меры об обратном (через блокировки, семафоры, безотносительно), не ожидайте, что потоки выполнятся в каком-то конкретном порядке. Не имеет значения, что они делают или как Вы думаете, что они, "вероятно, произойдут" на основе того, что они делают и т.д. Помещать просто: не думайте о них этот путь, который не является тем, что они или как они предназначены, чтобы использоваться. Не потрудитесь придумывать mentalizations, такой как, "Я нахожусь в однопользовательском режиме, я пробую к все еще системе как вода потому что... и.. и тому подобное" до бесконечности, и т.д., это - пустая трата времени, нет ничего для изучения того пути. Вода неизбежно не все еще, это - то, как жидкости. Конец истории. Идите дальше и наслаждайтесь.
При выполнении потоков, которые, как Вы говорите, делают почти ничего в системе, которую у Вас есть установка, чтобы сделать, почти ничего приведет к легкой загрузке для планировщика, но отметит, что ЦП все еще работает в полной скорости, и многое ни из чего происходящего быстро не обязательно более предсказуемо, чем какой-либо другой сценарий. Планировщик не предназначается, чтобы синхронизировать или очевидно заказать потоки и процессы. Я действительно действительно действительно надеюсь меня говорящий, что это не вдохновляет Вас придумывать более сложный и псевдологический эксперимент, потому что, как уже указано, который является пустой тратой времени, движением.
Вы можете и вероятно синхронизировать их, но уведомление, которое является тонким приемом, который сначала требует Вас, понимает, почему они только "не делают этого естественно" (подсказка: потому что нет никакой причины для них сделать так, они не делают).
"Что заставляет детерминированную ОС казаться недетерминированной?"
Возможно, аналогия гидроаэродинамики не так глупа. Жидкости кажутся хаотичными - дым, может даже казаться, жив - и я верю в математику, которую действительно пересекает исследование гидроаэродинамики и теории хаоса. Однако большинство людей, вероятно, не ошеломлено этим ("Удивительный! Что могло вызвать такое поведение в природном явлении? Возможно, это - доказательство Бога!"... не), потому что мы можем понять, как взаимодействие детерминированных правил (законы гидроаэродинамики) просматриваемый в определенном масштабе приведет к результатам, которые только грубо предсказуемы ("ну, Вода будет двигаться потоком из стекла...") и следовательно эффективно хаотичны или недетерминированы (шаблон всплеска на таблице). Даже если это - "только очень небольшой огонь" или стекло воды, мы распознаем, что существует движение буквально триллионов из триллионов включенных частиц.
Если Вы будете иметь когда-нибудь занятый циклично выполненный со счетчиком только, чтобы видеть, как быстро Ваш компьютер может рассчитать, Вы будете знать, что это находится на порядке миллиардов времен в секунду. Следует иметь в виду, что большинство "незначительных" системных событий, постоянно продолжающихся даже "неактивную" систему, все еще будет намного более существенным, чем поток, действие которого измеряется печатью идентификатора, если это - весь поток, делает. При движении с нашей жидкой аналогией, даже в день, который кажется "абсолютно безветренным" нам, дым все еще не формирует организованный столбец (но мы видим более ясно, как его собственное перемещение влияет на него).
Планировщик, как предполагается, гарантирует, что все процессы, выполненные сбалансированным способом (сила тяжести удостоверится вода, будут двигаться потоком), однако, не путем предоставления каждому из них точно 1 наносекунды за один раз (который мог бы сделать эксперимент более предсказуемым). Это - все хорошо и хороший с тех пор, еще раз, это не роль планировщика для синхронизации чего-либо, это должно заставить все произойти соответственно сбалансированным способом. Этими двумя целями не является то же. При вхождении в синхронизацию Вы будете ценить, как, в то время как синхронизация может достигнуть ясного баланса, она прибывает за счет эффективности.
Кроме того, планировщик Linux использует красно-черное дерево для организации его очереди, он просто не обтекает все в строке FILO (я сомневаюсь, что любой современный планировщик общего назначения сделает это). Это подразумевает большую сложность и следовательно, более по-видимому хаотическое поведение.
Я не хочу поощрять Вас сохраняться в Вашей фиксации, но если Вы заставили потоки выполнять более существенную задачу, та, которая на самом деле возьмет их что-то напоминающее время, чтобы сделать, и запустить их смещенный на несколько секунд в в других отношениях неактивной системе, затем на самом деле, Вы будете видеть абсолютно детерминированные результаты. Просто имейте в виду, что это не действительно эффективное средство синхронизации - когда ветер поднимает, и вода становится грубой, Вы будете видеть, что хаос запускается ;)
"Вы знаете о каком-либо исследовании, которое изучает влияние этих событий на планировщике ОС?"
Нет, потому что нет ничего действительно таинственного об этом, как в случае жидкостей. Планировщик на самом деле абсолютно детерминирован, просто не в смысле, или в масштабе Вы рассматриваете. Если Вы помещаете набор информативных printk
s в ядре кодируют и понимают алгоритм планировщика, Вы ничто не найдете недетерминированным - все произойдет точно способ, которым это, как предполагается.
Я пользуюсь ПК начиная с 8-битной версии и знаком с несколькими языками программирования. Время от времени я обнаруживаю, что ОС Mint Cinnamon делает что-то в фоновом режиме после того, как делает то, что должно работать, но нарушает работу ОС в глубине. Перезагрузка часто помогает, но не всегда. Я должен сказать, что в конечном итоге Windows не лучше, а более предсказуема в том, что происходит после изменения параметров, которые система предлагает вам изменить. Знакомый с тестированием в прошлом, я думаю, что Mint тестируется не так, как должно быть.
rand()
обычно добирается), точно, что, или по крайней мере, что-то включающее состояние системы, начиная с системы просмотрело, в целом достаточно сложно для создания большого количества энтропических эффектов в определенных местах (как порядок выполнения незначительных идентичных потоков). – goldilocks 25.02.2013, 17:41