|
|
|
Канал Игры Мечты: «Multithreading в играх» |
|
|
Vostok-1
155 EGP
  Репутация: 24 Сообщения: 394
Зарегистрирован: 15.08.2015
 |
|
Minx : |
AI типа шахматного в глубину и/или ширину вполне может уйти в Loop, который близок к Infinite. Вполне естественно в таких обсточтельствах ставить таймаут и выдавать лучшее надуманное решение. Однако такой подход в играх - (по моим наблюдениям) - редкость.
Хотя watchdog это крайние обстоятельства. Т.к. грохать неизветсно где в каком состоянии нить, потом за ней чистить и не иметь надежды на корректность и достатка ресурсов, - череповато.
|
Здесь необходимо разделять игры по типам. Шахматы - это TBS. Здесь вполне можно провесить отдельный поток.
В реалтаймовых играх у меня даже был опыт подсчёта возможного количества выполняемых инструкций на шаг логики. (Spectrum и ранние телефоны на j2me диктовали такую необходимость).
Но в любом случае, "зависание" выполнения - это отсутствие обязательной предсказуемости работы алгоритма. А это чаще всего означает, что кодеру пора в Индию Или читать книжки по алгоритмике/проектированию и всему такому.
_________________ "The gods do not protect fools.
Fools are protected by more capable fools."
Larry Niven |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
Sh.Tac. : |
а вот тупой вопрос у меня, в логике часто возникает ситуация когда порядок неопределён, и если все изменения скажем аддитивны, то проблем не возникает, от перемены мест слагаемых сумма не меняется
а как у рендерщиков с этим?
|
В OpenGL каждый поток = свой контекст и рендер таргет. В Metal более широкие возможности, я пока не знаю точно - только осваиваю его.
добавлено спустя 38 секунд:
Vostok-1 : |
Но в любом случае, "зависание" выполнения - это отсутствие обязательной предсказуемости работы алгоритма. А это чаще всего означает, что кодеру пора в Индию Или читать книжки по алгоритмике/проектированию и всему такому.
|
+1. не понимаю о чем они вообще. Есть креш = надо его фиксить
_________________ MOV topka, C++
Последний раз редактировалось: Jurec (13:18 17-12-2015), всего редактировалось 1 раз |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Vostok-1 : |
Здесь необходимо разделять игры по типам. Шахматы - это TBS. Здесь вполне можно провесить отдельный поток.
|
А где-то его повесить нельзя?
Vostok-1 : |
Но в любом случае, "зависание" выполнения - это отсутствие обязательной предсказуемости работы алгоритма. А это чаще всего означает, что кодеру пора в Индию Или читать книжки по алгоритмике/проектированию и всему такому.
|
Есть такое понятие как сложность системы. И, после определенного предела, книжки и отправка в Индию уже не помогут. Если же вы хотите сказать, что все ваши AI простые и предсказуемые как пробка, и должны такими быть, то это тоже мнение (вполне обоснованное в геймдеве, кстати).
добавлено спустя 4 минуты:
Sh.Tac. : |
с корректностью просто, используется транзакционный подход, подаётся срез данных, который нужно изменить, задача подготавливает изменения, если все хорошо, то можно все изменения взять и накатить (commit), если нет, то они тупо сбрасываются (rollback автоматом)
|
Как корректно откатить тред, который захватывает ресурс? Твой тред открывает файл, держит коннект к БД, открывает сокет по сети, аллоцирует память, ... Уже не говоря о том, если тред использует сторонние библиотеки. Кто и как будет это все гарантированно чистить?
_________________ μηδείς αγεωμέτρητος εισίτω
Последний раз редактировалось: Minx (17:49 17-12-2015), всего редактировалось 2 раз(а) |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
Если тред крешится - крешится всё (а эксепшны в играх вообще выключены обычно). Давайте не будем рассуждать на темы не имеющие ничего с практикой.
добавлено спустя 57 секунд:
И да, если тред крешится - в этом виноват программист и QA которые упустили баг. И этот баг надо фиксить
_________________ MOV topka, C++
Последний раз редактировалось: Jurec (18:18 17-12-2015), всего редактировалось 1 раз |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Jurec : |
Если тред крешится - крешится всё (а эксепшны в играх вообще выключены обычно). Давайте не будем рассуждать на темы не имеющие ничего с практикой.
|
Если бы мне не утверждали обратного, я бы и не писал (; А так удивление.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2516 Откуда: Кронштадт Зарегистрирован: 09.04.2007
 |
|
Jurec : |
если тред крешится
|
Если треед крашится, то к нему применяется правило 3х попыток. По истечению которых происходит то, что заложил программист. Либо аварейное завершение всей программы, либо просто уведомление, в зависимости от кретичности задачи, которая возложенна на данный тред.
Jurec : |
в этом виноват программист
|
Опять же в пример сеть:
Дано: Сервер-клиент; UDP протокол, или TCP с асинхронным сокетом.
Вопрос: Что произодйет, если будет нарушено соединение между сервером и клиентом и кто виноват?
Возьмем случай, если при падении сети программа вываливается с некоторой стандартной ошибкой. Тут, согласен, виноват программист, потому как непредсмотрел такую возможность.
А вот если она выкинет мессадж, что мол сетевой поток крякнулся, потому что низя достучаться до сервера и потом закрылась, или же продолжила работу в оффлайн режиме, то виноваты, извените сетевики. При этом конечный пользователь вполне способен продолжить работу в оффлайне. Яркий пример Steam. Сетевой поток убивается, но сам клиент спокойно продолжает работу.
Поэтому утверждение:
Jurec : |
Если тред крешится - крешится всё
|
считаю неверным в корне.
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
Vostok-1
155 EGP
  Репутация: 24 Сообщения: 394
Зарегистрирован: 15.08.2015
 |
|
ТехноМаг : |
А вот если она выкинет мессадж, что мол сетевой поток крякнулся, потому что низя достучаться до сервера и потом закрылась, или же продолжила работу в оффлайн режиме, то виноваты, извените сетевики.
|
Если падение сети предусмотрено, тогда ничего не "крешится".
добавлено спустя 5 минут:
Minx : |
А где-то его повесить нельзя? Подозрение.
|
Вопрос архитектуры Конечно, можно везде. Но не везде нужно.
Minx : |
Есть такое понятие как сложность системы. И, после определенного предела, книжки и отправка в Индию уже не помогут. Если же вы хотите сказать, что все ваши AI простые и предсказуемые как пробка, и должны такими быть, то это тоже мнение (вполне обоснованное в геймдеве, кстати).
|
У вас доводы программиста на ассемблере.
Для сложных систем есть уровни абстракции, например. Глупо рассматривать сложные системы как нечто монолитное.
_________________ "The gods do not protect fools.
Fools are protected by more capable fools."
Larry Niven
Последний раз редактировалось: Vostok-1 (22:02 17-12-2015), всего редактировалось 1 раз |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Vostok-1 : |
У вас доводы программиста на ассемблере.
|
Могу только прокомментировать, что ваши доводы - доводы человека, никогда не сталкивавшегося с системами сложнее паяльной лампы.
Vostok-1 : |
Для сложных систем есть уровни абстракции, например. Глупо рассматривать сложные системы как нечто монолитное.
|
No Silver Bullet.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Guest
2075 EGP
              Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004
 |
|
Воу, воу, спокойнее, товарищи!
ТехноМаг : |
Возьмем случай, если при падении сети программа вываливается с некоторой стандартной ошибкой. Тут, согласен, виноват программист, потому как непредсмотрел такую возможность.
|
Если на проекте -дцать программистов, то есть ненулевая вероятность скажем несогласования фронт- и бэкэнда после очередных изменений. Всех в Индию?..
ну и само собой, если что-то крэшится - это что-то нужно чинить, однако что делать, если оно не крешится в тестовой среде разработчика? У него к примеру шесть потоков, всё работает. У конечного пользователя внезапно крэшится один из потоков, например память у него битая...
Или вот такой вариант - файловая система не отзывается, потому что занята другим процссом наглухо или вообще является абстракцией, за которой скрыта сетевая пересылка. А у нас асинхронное чтение ресурсов...
_________________ Трещит земля как пустой орех
Как щепка трещит броня
Последний раз редактировалось: Guest (22:31 17-12-2015), всего редактировалось 1 раз |
|
|
Vostok-1
155 EGP
  Репутация: 24 Сообщения: 394
Зарегистрирован: 15.08.2015
 |
|
Не обижайтесь, бога ради! Извините меня.
Какой сложности должна быть система, чтобы вы со вниманием отнеслись к моим доводам?
_________________ "The gods do not protect fools.
Fools are protected by more capable fools."
Larry Niven |
|
|
Guest
2075 EGP
              Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004
 |
|
Vostok-1 : |
Какой сложности должна быть система, чтобы вы со вниманием отнеслись к моим доводам?
|
Чужой движок?
_________________ Трещит земля как пустой орех
Как щепка трещит броня |
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2516 Откуда: Кронштадт Зарегистрирован: 09.04.2007
 |
|
Guest : |
то есть ненулевая вероятность скажем несогласования фронт- и бэкэнда после очередных изменений. Всех в Индию?..
|
Если из дцать, то
1) у них есть надмозг
2) есть ТЗ, где расписано что и как.
3) Есть репа, где видно кто, что и когда сделал.
добавлено спустя 3 минуты:
Vostok-1 : |
Глупо рассматривать сложные системы как нечто монолитное.
|
Глупо, и вредно для здоровья.
Vostok-1 : |
Для сложных систем есть уровни абстракции
|
С абстракциями тоже можно перемудрить так, что без поллитра не разберешься. UE4 в пример.
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
Последний раз редактировалось: ТехноМаг (23:14 17-12-2015), всего редактировалось 1 раз |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
Minx : |
Твой тред открывает файл, держит коннект к БД, открывает сокет по сети, аллоцирует память
|
коннект к БД перебор, такие вещи надо делать процессами, вот грохнуть процесс легко, ещё легче он падает сам, и ось сама все почистит
а зависон треда это стопудово deadlock, возможно проще убить программаста, чем тред, не знаю, никогда таким не занимался
_________________ This is what you get ...
(c) Radiohead |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
ТехноМаг : |
Если треед крашится, то к нему применяется правило 3х попыток.
|
Сорри, очень ценю дальнейшие фантазии на тему, но если поток программы полезет писать не свою память (например) - ОС грохнет всё приложение. Что за три попытки и почему их три, я вообще не представляю.
Возможно, ты говоришь о каких-то системах более сложных чем поток. И "креш" у тебя это ошибка, которую можно обработать. Тогда может быть, я не знаю. Я говорю о крешах и дедлоках.
_________________ MOV topka, C++ |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Vostok-1 : |
Какой сложности должна быть система, чтобы вы со вниманием отнеслись к моим доводам?
|
Изначально ваш довод я интерпретировал именно таким образом:
Minx : |
Если же вы хотите сказать, что все ваши AI простые и предсказуемые как пробка, и должны такими быть, то это тоже мнение (вполне обоснованное в геймдеве, кстати).
|
Т.е. в геймдеве (афаик) требования такие, что код должен быть безопасно быстромодифицируем, а для систем большой сложности это невозможно в принципе. В связи с этим в индустрии все сложности упрощают, особенно потому, что они чаще всего не нужны (например, обычный игрок вполне хавает простой AI, и AI уровня Deep Blue не нужен).
Если сложность возрастает, то у любой технологии и у любого программиста есть предел прочности, после которого обвинять кого-то в национальной принадлежности бессмысленно. И для оседлания более сложных систем с приемлимым уровнем ошибок нужны совсем другие подходы.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Vostok-1
155 EGP
  Репутация: 24 Сообщения: 394
Зарегистрирован: 15.08.2015
 |
|
Вы должны понимать, что скрипты - это просто дополнительный уровень абстракции. Не более.
добавлено спустя 1 минуту:
Minx : |
обвинять кого-то в национальной принадлежности бессмысленно
|
Про индусов - это, в общем-то, очень популярная шутка. В нашей среде.
_________________ "The gods do not protect fools.
Fools are protected by more capable fools."
Larry Niven
Последний раз редактировалось: Vostok-1 (07:51 18-12-2015), всего редактировалось 1 раз |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
Jurec : |
рассматриваете многопоточность как два потока с WatchDog (омг, откуда вы это взяли - это ж эмбедед какой-то)
|
не про мультитрединг, но про ватчдог, оказывается есть такой для GPU
_________________ This is what you get ...
(c) Radiohead |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
я ж и говорю - что эмдедед уже какой-то пошел
_________________ MOV topka, C++ |
|
|
Vostok-1
155 EGP
  Репутация: 24 Сообщения: 394
Зарегистрирован: 15.08.2015
 |
|
Ничего не эмбедед. У меня даже целый класс-хелпер был. Создаётся поток, хранится в списке, время от времени дёргает коллбэк, переданный при создании. Если не дёргает - его убивают по тайм-ауту.
Если писать потоки с учётом этого - всё работает вполне-вполне.
_________________ "The gods do not protect fools.
Fools are protected by more capable fools."
Larry Niven
Последний раз редактировалось: Vostok-1 (09:18 19-12-2015), всего редактировалось 1 раз |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
Единственное применение такого может быть когда у тебя в потоке исполняется что-то неизвестное в компайл тайме. Иначе - это просто говнокод
_________________ MOV topka, C++ |
|
|
|
|
|
Канал Игры Мечты: «Multithreading в играх» |
|