Показать сообщение отдельно
Старый 12.04.2012, 18:50   #9
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Xors3d с++ подгрузка моделей в отдельном потоке

Дело не в блокировках. Просто надо уметь распараллеливать задачи. Пример (идеализированный):
вы с другом хреначите проект. Синхронный (классический подход): он пишет кусок кода, ты тупишь. Потом он отдаёт тебе код и тупит, а ты пишешь свою часть.
Асинхронная модель (многопоточная - вы же два независимых процессора): вы пишите код одновременно (для этого надо грамотно продумать модули), первый кто заканчивает свой кусок блокируется (спит, тупит) и ждёт второго.
При синхронной модели на код уходит Ts=t1+t2 единиц времени.
При асинх. Ta=max(t1,t2).

Грузить модели можно вторым потоком, пока в первом уже идёт игра с частью прогруженного уровня. Правда, я б наверно не стал так делать. Во-первых, нет никакой необходимости в спешке: уж лучше пусть пользователь посидит подольше с загрузкой, чем ощущает лаги от второго потока в момент экшена. Во-вторых, модели надо ещё и выгружать по мере того, как они становятся ненужными: другое дело если б память была бесконечной, и в неё можно было грузить весь МИР до опупения. Скажем так: загрузка модели это всё же событие, имеющее чёткое место в игровом цикле (в отличие от той же фоновой музыки): размазывать его на второй поток - экономить крохи, запутываясь в тонкостях синхронизации.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием