Якщо я розумію, про що ви просите, це можливо, але це дуже, дуже погано.
Канонічним прикладом того, що ви описуєте, є підтримка лічильника, який збільшується на кілька потоків. Це не вимагає майже нічого в термінах обчислювальної потужності, але вимагає ретельної координації між потоками. Поки лише один потік одночасно робить приріст (який насправді є читанням з подальшим доповненням, а потім записом), його значення завжди буде правильним. Це тому, що один потік завжди буде читати правильне "попереднє" значення, додавати його та записувати правильне значення "наступний". Отримайте дві нитки в дії одночасно, і обидва прочитають одне і те ж «попереднє» значення, отримають однаковий результат від приросту і напишуть те саме «наступне» значення. Лічильник фактично був збільшений лише один раз, хоча дві нитки думають, що кожен це зробив.
Ця залежність між часом та правильністю - це те, що інформатика називає умовою гонки .
Умови перегонів часто уникають, використовуючи механізми синхронізації, щоб переконатися, що потоки, які хочуть оперувати частиною спільних даних, повинні отримувати відповідність для доступу. Описаний вище лічильник може використовувати для цього блокування читання-запису .
Без доступу до внутрішнього дизайну епохи Дракона: інквізиція , кожен, хто може зробити, - міркувати, чому він поводиться так, як це робить. Але я буду ходити на основі деяких речей, які я бачив, зроблених на власному досвіді:
Можливо, програма базується на чотирьох потоках, які були налаштовані, тому все працює, коли потоки працюють переважно безперебійно на власних фізичних ядрах. "Налаштування" може бути у вигляді коду перестановки або вставлення сну в стратегічних місцях, щоб пом'якшити помилки, спричинені расовими станами, які з'явилися під час розробки. Знову ж таки, це все здогади, але я бачив, що умови перегонів "вирішені" таким чином більше разів, ніж я хочу порахувати.
Запуск такої програми на що-небудь менш здатному, ніж середовище, на яке вона була налаштована, вносить зміни в часі, які є результатом того, що код не працює так швидко, або, що швидше, контекстні комутатори. Контекстні комутатори відбуваються у фізичному (тобто фізичні ядра ЦП перемикаються між роботою, в якій тримаються логічні ядра) та логічним (тобто ОС на процесорі призначає роботу ядрам) способами, але або є суттєвим розбіжністю з тим, що буде "очікуваним" терміном виконання. Це може виявити погану поведінку.
Якщо Драконовий вік: інквізиція не зробить простий крок, щоб переконатися, що є достатня кількість фізичних ядер, перш ніж продовжувати, це EA винна. Вони, ймовірно, витрачають невеликі статки на виклики служби підтримки та повідомлення електронної пошти від людей, які намагалися запустити гру на занадто мало обладнання.