Продолжительность 59:18
16+
Воспроизвести
Видео

C# Job System — безопасный многопоточный код в Unity

Валентин Симонов
Field Engineer в Unity Technologies
  • Видео
  • Тезисы
  • Видео
DevGAMM Minsk 2017
17 ноября 2017, Минск, Беларусь
DevGAMM Minsk 2017
Запросить Q&A
Видеозапись
C# Job System — безопасный многопоточный код в Unity
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
В избранное
6 K
Мне понравилось 0
Мне не понравилось 0
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
  • Описание
  • Расшифровка
  • Обсуждение

О спикере

Валентин Симонов
Field Engineer в Unity Technologies

В Unity Technologies Валентин Симонов занимается решением технических задач крупных клиентов, а в свободное время ездит по Европе и рассказывает на конференциях о тех или иных технических аспектах Unity. До прихода в Unity он работал в компании Interactive Lab, где занимался созданием интерактивных инсталляций для выставок и других мероприятий; в Mail.Ru и ее подразделениях — над социальными играми; читал лекции разработчикам в Британской Высшей Школе Дизайна и Технопарке Mail.Ru при МГТУ им. Баумана. Перев

Перейти в профиль

О докладе

Компания Unity Technologies хочет, чтобы все игры разработанные на Unity полностью использовали все ядра CPU. На конференции Валентин расскажет о C# Job System — новой разновидности написания многопоточного кода C#, который работает быстрее, чем внутренний код, и абсолютно безопасен.

Поделиться

так Зайдите пожалуйста поближе потому что я сегодня какое-то фото а я буду говорить на русском большое объявление у нас завтра с 12:00 на нашем строительном мы будем делать серию небольших докладов timeline среди машин и что-то ещё об этом как-то не объявляли потому что можешь это сделать как-то вот спонтанно вот интересно вот будет круто Вот и сегодня я хочу рассказать о том как мы планируем дать вам очень классно того чтобы вы смогли сделать хорошие игры потому что ну вы понимаете что мы как компании заинтересованы в том чтобы на нашем движке делали игры

которые которые играют которые зарабатывают и так далее и мы на это можно повлиять можно несколькими способами один из этих способов это предоставить вам такой Tool который вы сможете использовать того чтобы создавать игры про работает просто быстрее процессоров которые сейчас процессоры растут в ширину и тогда ты часто можно слышать что Unity Не используют только вот здесь мои контакты Меня зовут Валентин ты взяла себе какие-то вопросы а можете задавать с ответом по email или после когда мы поговорим вот сейчас

ассистент Когда вы слышите Вот это название мы на самом деле Имей в виду целый которая вместе позволяют добиться вот этого колоссального прироста производительности Но которые могут тоже вместе использоваться и В смысле отдельным вот и весь этот технология он базируется на философии Toyota Avensis дизайн и мы как раз сейчас совсем недавно Возможно вы слышали наняли 2 человек которые являются отцами Data oriented Design и мы серьёзно настроен на то чтобы движок то лучше производитель сейчас немножко расскажу

про эти части технологического такое мы увидимся подробнее о том как все это работает во-первых если бы это Контра заранее то нормально во-первых Если бы никогда не слышали Что такое Да это я советую посмотреть хотя бы парочку видео в YouTube чтобы вы поняли О чём это вообще потому что без понимания турбового базового уровня философия сложно зачем мы делаем все остальные вещи есть а вот я здесь просто два последних интересных видео вот от Майка который присоединился к Unity допустим я опять сделал так что снизу вот смысл в двух словах

в том что сейчас современные процессы не очень сложные и группа нравится чтобы им данные давали в каком-то последовательно видит то есть поскольку они памяти читают ни там ни по одному Поэтому огородами тут начинает сразу кусками кладут несколько уровни кэша и соответственно памяти доступ очень медленно очень быстро Если вы хотите писать проверочный код вам нужно использовать скажешь вот и вот так вот пример когда данные процессов читает когда-нибудь идут друг за другом и Таймураз Когда домой

Вот так вот расположены соответственно не может прочитать это развод какой-то калисту поместить в cache-cache будет просто использовал не практике сообщение спорт и это можно проиллюстрировать следующим способом допустим нас есть некоторые клостридиями в которых есть какие-то поля просто Рандомные подрасчитал записал и как обычно мы делаем допустим видеть у вас есть массив что-то сделать если посмотреть как это в памяти находятся то у нас есть первый это массив которые

находятся рядом просто по интернет друг за другом на вот эти вот тут нормально так процессор читает сразу несколько несколько пунктов и обрабатывает их но сами и невеста они скорее всего находится где-то вот в памяти как-то вот один из друзей здесь так далее То есть вот обращение к этому имени но довольно-таки медленно насчёт если допустим мы заменим классно Когда все атомные структуры будут в одном массиве и это будет Ну по крайней мере гораздо более производительно

но тут случай оставь Если Вы заметили что вся структура занимает 32 нужно только вот это получается что если допустим размер строки кэша в процессоре 64Б то туда влезет для таких структур и она по сути нужно только 12 тоже не очень эти форматы хранения данных а можно оптимизировать и добиться прироста производительности именно об этом философия итальянский дизайн потом Мы представляем нашу собственную реализацию entity component System если вы не знаете что эти компании системы

заинтересованы узнать побольше у нас в 18:15 здесь будет доклад Рома на эту тему Но грубо говоря смысл практически как у нас еще скинуть но немножко другое То есть есть уникальный ведь на них хранятся данные в компонентах но компоненты должны быть наши реализации должны быть структурами и по ним очень легко интегрировать потому что они в массиве находятся Вот и занимайся система которая что-то делает врач система которая двигает игроков система которая считает там Конюшенной считают там повреждение так далее

Мы представляем свою реализацию этой системы дальше выдаём доступ к так называемым на этих контейнеров То есть это такие аналоги массивов и листов который память на ПЛЮСПЛЮС части и можно управлять всем в Барак я локатор они используют эти локаторы они сами используем в своём ходят и там есть несколько реализаций для данных которые нужны только в функции данные которые нужны в течение которых данные которые должны постоянно именно допустим вот этим параметрам указанным Какие данные Мы хотим использовать вот у нас есть несколько этих элементов лист там Кошмар тогда вот и

они у них такой же их нужно руками потому что здесь уже ближе к 7 Plus Plus Набери где нужно всё это делать руками но это очень классные такие штуковины которые можно и не только в части их Также можно использовать для того чтобы допустим передавать какие-то данные между плагинами и Тиша также мы хотим сделать какое-то количество API для того чтобы не дублировать массивы Когда вы там передаете какие-то данные в массив допустим Когда вы хотите генерировать мяш

Вот и очень прикольно что в редакторе там в реализации этих мотивов этих на этих контейнеров есть кот который не позволяет вам использовать их неправильно То есть если вы и там допустим забыли 5 стол сделать или зделать из полос когда этот массив в чём одета используется в какой-то там в каком ты в жопу а тогда ничего выпускают очень хотим сделать так чтобы вы понимали где ваши быть соответственно в сети sim-карта не убиваются изрисовал Да и следующая штука и именно это чаще всего называется Сейчас друг систем то есть

это не для того чтобы можно было запускать вот эти вот маленькие единица работы которую мы называем что-то что-то делают на других потоках у них тоже действует в этом скидывались тоже кот который не позволяет вам сделать что-то неправильно допустим если выпускается там один чувак который пишет какой-то массив в другой Java соответственно вам нужно сделать что один зависит от другого иначе вы получите рейхом пишут что очень неправильно насчёт вкратце что такое Job вообще собрать кот то

это только вот простейшего презентация всё это некоторая структура которая наследует который имитирует интерфейса Jap в этом-то весь и есть тот который что-то делает то есть в данном случае у нас есть два массива вот этот и вот этот соответственно Здесь всё что происходит Мы где-то в других потоках выполняем это и копируем данные отсюда сюда вот и соответственно ограничение такие что Мы обязаны сюда Передать все будут нужны Вот именно в этом методе эти данные должны

быть Болит то есть они должны быть примитивных типов или там структур примитивных типов допустим то здесь передать какие-то какие-то какие-то там что-нибудь класса Там и так далее В общем всё должно быть здесь в примитивных типов и в структурах говорю вот также несколько вариантов этих самых джапавто есть Наверное вы заметили какой смысл наберём Хотя вот этот массив и копируем его просто вот где-то отдельно мы же можем разбить это на другую Потому что эти части максилак они пересекаются Именно для этого у нас есть

следующие варианты кто называется изжога и то есть увидим мы здесь тоже метод src DST но мы запускаем так что получается периметр и таким образом мы можем запустить этот чтобы он первые 100 элементов массива скопировал вот там в одном доме там друга я не могу только друг от друга не зависит этаже там у нас есть по трансформерам То есть если нам нужно допустим 1000 объектов подвинуть соответственно нужно проинтегрировать 1.000 вот здесь был такой же видите здесь мы Передаем туда индекса что-то делаем но мы

сюда получаем какую-то штуку которая называется платформой как то есть это не некоторые некоторые swingpoynt в котором вы меняете значение вот здесь увидеть Как меняется там rotation допустим потом когда эти данные нужны будут каким-то другим допустим потоком как и в других задачам вот этот вот Job другая выполняется то есть система будет Хотите тренировать здесь по трансформерам даёт transform это может что-то делать если ты знаешь что если вы сейчас в этом вот в этом жопе

хотите поменять какие-то параметры другие джипы которые должен выполнить Чем занимается с кем Пётр и я попытаюсь вот такой Славик Как собственно это всё запускается Значит мы создаём мы добавляем сюда на кефире мы говорим скидывал и когда-нибудь выполняет И когда нам нужно точно знать что сейчас таджик должен это синхронный оператор где Ждём с кем выполнить что Может в других потоков что он не может выполнить прямо в главном потоке Но вот здесь мы уже будем точно знать что у нас к

следующему очень классная штука это и что он делает он берёт делает какую-то магию чтобы встретиться Вот так и всё что нужно сделать это добавить вот этот вот атрибут ты всё отвечу добавляется атрибута помечает Джобс чтобы прогнать через этот компилятор и у нас здесь правда стоят это штуки я не видел уже давно Вот и по сути потому что в жопах мы тогда сказал вообще-то говорю нечаянно то что он какие мы языка можем там использовать у нас нет никаких планов у нас нет там классов не

нужен там легче потому что всё там структура как примитивных типов Вот и совместного Делает очень много работает там меня я так далее и пытаюсь сделать так чтобы можно больше команд выполнялась на параллельных так вот так называемый векторизация и ещё что мы можем сказать насколько мы беспокоимся о точности операции то есть допустим там где-то 15 вычисления там где там твои летают и на посмотри там всё равно он этот будет он смотрит прямо или на один градус чуть-чуть Вот ты точно такая не нужна вот а именно

вам как производительности банках Ну когда в производительность нужно в игре Вы можете сказать о поехать чтобы там использоваться менее более производительного когда вот так хочется Вот давайте посмотрим собственно о чём я говорю вот у нас есть девка я просто сделаю напишу сейчас мне на проект вот возможно многие из вас видели вот эту девку то здесь мы стимулируем какое-то количество будет завтра них очень простые там красы но возможно он просто куда-то летит он следит за соседями пытается не врезаться и как-то лететь вместе потому что почему Простакова там вот и здесь увидеть

весь этот кот он на главном потоке тоже вот здесь всё и так далее вот здесь будет потому что мой хороший вот я хочу показать как работает процессор а не как мы так моя видеокарта пытается разрядить вот мы видим что здесь остальные ядра нет нечем Вот и даже если мы включим Джобс где-то здесь вот видите этих кубиков У меня очень я включаю жопы и что очень много именно работы которую выполняет процессор теперь выполняется другими театрами и это уже на самом деле круто

Теперь будем симулирует Еще большее количество этих самых будет светить её добавил ещё будет af55 просаживается видно что их прямо очень много я просто добавляют атрибут включаю компилятор и смотрите Что происходит здесь где мы видим Сколько время занимает кадр это реально будет как магия То есть сейчас я даже не помню сколько их у меня стимулируется здесь потом начали будут 10.000 а потом в конце будет Там 150.000 если не хочешь дальше видно что можно добавить ещё то

здесь прям вообще много ты даже не видно вот я там тутокруто этого можно добиться используя технологию которая и вы сможете использовать очень скоро значит давайте Сейчас пройдёмся вот скажем так Junior как стал бы делать задачу и дальше как будет подошел к этой задаче имеется инструменты которые у нас будут который представляет насчёт Задачка следующее У нас есть таблетки нужно просто сделать чтобы таблетки крутился вокруг там оси Y То есть все здесь другие мы сделаем компонент Вот примерно такой такой который будет крутить наш объект

80d скорость и он просто каждая дверь там крутят на deltatime как бы всё просто Вот в этом подходе есть несколько проблем в Сочи простой мы сами стоило кучу вас делать так но как только вас становится этих объектов много допустим 1000 10000 20000 тогда вы начинаете видишь тормозит тормозит нелинейно пропорционально тому сколько вас Объект это странно я так написал Вот этот блог в котором объясняется Почему из-за того что мы используем много разных объектов вас получается сильно выход на вызов вот эту функцию

что мы можем сделать того чтобы делать апдейт в каждом Вот И там родители мы можем вынести функцию дыры что очень многие этих компаний с которыми встречаются они так и делают уже насчёт как кот мог бы выглядеть когда он болеет значит надпись разбитом нас есть всё ещё скорость у нас есть ссылка на некоторые вот этот и когда создаётся этот компонент он себя регистрирует монтажа вот если у него есть функция которая называется как-то по-другому 302d назвал которых мы тоже вот тоже Довольно простой То есть я много здесь простил код убрался

qilishni методом вот это он добавляет в некоторых у него уже есть Адель и пути вызывает там дым проходит по всем векторам и вызывают их Вот так и уже получается прирост производительности по сути получается что сейчас у нас есть вот этот вот вот этот компонент в котором функционал и в котором ты дальше вынести эти данные в минуту зачем-то возвращаемся и получается Если у нас допустим есть массив вот этих вот скоростей то этому массиву и применять скорости к элементам

города производитель как ему это сделал это просто нас ещё есть менеджер У нас есть когда мы создаем вот этот вот ротвейлер мы добавляем внж мне себя а мы добавляем Трансформеры таким же пескоструй и при этом когда мы когда кто-то меняет скорость мы когда-нибудь Она же они на себе если у него вместо списка ротвейлеров у неё список скоростей приготовим мы получаем что обновить он не вызывает функция на радиаторах Он выполняет логику сам то есть интернет через все Трансформеры и применяются эти скорости трансформер стало быть выйдет отличия дата

стоит он назвал функцию у этих радиаторов часто делает сам найдет здесь уже из-за того что у нас теперь вот эти вот массивы глиста там внутри массив это всё вот эти вот листы они даны в них находят мы получаем какую-то краску О'кей значит дальше это уже если Вы заметили что ты тоже выглядишь как эти компоненты систем на самом деле Вот это потому что он содержит только данные ассистент Вот это потому что он пробегает этим данным насчёт дальше пойдем и преобразует этот же пример к нашей телекомпании систем так как мы сейчас делаем смотри

как это будет выглядеть сейчас у нас теперь на компоненте есть только данные нету нету ничего ты и по сути всё всё что он делает охранник давно здесь Некоторое количество так называемого работа для вас что делает вот это вот пара упал она грубо говоря возвращает он списке у которых есть и транспорт и вот этот rotation Speed Carbon он хранит вот эти вот видите у которых есть это это в некотором тоже массиве и соответственно Он меняет массив вот в этом случае

мы Для того чтобы сделать то же самое просто пробежаться по всем компонентам и сделайте модель вот эта вот штука Выполняет холланд, и по сути дела Тоже самое Трансформеры и выставляют, Ну поворачивает их на этот Москва Ну в этом примере мы данные Как скоро как спит приду Надо обратно но вы видите смысл ты сейчас уже работает в рамках этики консистентность Вот это компот Это сестра Даша избавиться от вот этого манлихера вообще потому что не имеет смысла никакого потому что просто хранит данные овном есть только один смысл то что вы можете визуальным

рядом тогда быстрее значит вместо того чтобы оно вот этому мы делаем просто структуру с этими данными надо надо просто спит сейчас а до того чтобы их можно было редактировать вот эту скорость мы Добавляем еще один специальный враг который тоже идёт с реализацией которые просто является монархией комплексе позволяет редактировать вот этот вот эти вот там вот вот эта вот штука она ничего больше не делать соответственно смотрим еще раз данными и меняется

систем то есть у нас есть трансформа у нас есть контейнер с этими данными со структурами и по сути мы делаем тоже самое говорим Трансформеры но на этот раз у нас здесь система находит все игры в которых есть трансформер и на которых есть пишет вот этот лёгкий компонент внутри компонента вот-вот вот этих вот мы пришли к легким структурам которые могут быть упакованы в массив Атак друг за другом и соответственно находится линейка друг за другом Это что нужно кататься Вот

и есть уже здесь мы получим прирост производительности то без всяких там жаб системы вот это вот всё дальше Вот этот ход мы можем очень просто изменить для того чтобы он использовал собственное Джобс значит видеть новое component System которая теперь наследуется от жен в нём по сути то же самое только мы заменили этот массив Трансформеров на некоторых другую сущность которой 20 форма СССР Трансформеры Трансформеры которые используются для того чтобы на

жопах модифицировать транспорт есть здесь мы делаем как только он называется системным Джон добавляем говорим что вот время прошло какое-то все список всех рейдеров и мы говорим просто маме и наши component System она даёт нам ещё одни какие-то наследника то есть Для этого нам поэтому она мне нужно приготовить беспокоится за счёт чего теперь должно зависеть то есть по сути вот этот же зависит от того что там раньше было где-то в системе И теперь мы добавляем

Ещё ещё зависит Всё теперь есть у нас ещё один в жопу по сути выглядит Вот так я всё помните еще порадовал for for transform у нас есть вот этот контейнер rotation Speed и время делаем то же самое что делали везде мы обновляем protection to transform Вот и То есть вы видите мы пришли вот такого с османами Север где Просто каждый болтаете поворачивал себя до имитации используя новую джипситим используя новые работающие там в разы в 10 раз быстрее насчёт Я здесь упомянул

не сказал что один жёлтый запущен он ну да ну круто конечно но в игре скорее всего у вас будет много всяких таких маленьких в которой было что-то делать и можно следить за тем, чтобы они делали, Всё это правда, то есть, если один пишет какую-то коллекцию, то на другой должен подождать, чем наоборот, чтобы у вас не получилось Там многопоточного доступа к одной коллекции, которые которые пишутся и записывается и пишет ведь считается, что простой механизм зависимости и работает он так, то есть, допустим, у нас есть

скрипт, в котором скопировать данные из массива, потом скопировать данные из массива в другой массив, что, конечно, глупая затея в качестве примера нормально, Значит у нас есть массив исходных днём 500 элементов, используя временно локатор, 20, массив на свитшот Star of David Copperfield жёлтый самый простой и мы его Мы хотим чтобы он проинформировал через 500 элементов группами по 100 имеет смысл выпускать 1л чтобы просто скопировать один элемент там

запускает жопу будет больше времени Вот соответственно мы запустили TopShop он когда-нибудь мы сделаем новый массив делаем круглые jet2 которые и видишь здесь темп-с Кирилл тоже самое говорю что вот этот же зависит от предыдущего и таким образом когда мы вызываем Job Complete или когда он просто запуститься с Кириллом поймёт что сначала нужно выполнить вот этот у нас не будет проблем и как уже говорил в Мы хотим сделать так чтобы всё было просто и вы не на колёсном какие-то элементы

который вы не понимали или в которых вы не понимаете что происходит если Вы допустили ошибку редактор вам должен сказать что вот вы здесь ошиблись если что-то пошло не так и завтра должен сказать что вот сделать по-другому и именно это является одним из Больших акцентов в том что мы хотим сделать сейчас в сети если вы там где-то неправильно настроили зависимости неправильно настроили доступ к этим самым этих контейнером Unity сказал вам что здесь вот это считается когда нету

пишет наверное Представь Вот это сейчас работает то есть Мы очень хотим чтобы там если кто-то из вас попытался уточнить Вот когда-нибудь вот чтобы Вам не было такого разочарования Когда вы пытаетесь делать то что он увидит вот чтобы вас не получилось ты будешь выставлять тебя много из-за того что чуть-чуть не понимаете как это из практики вот в следующий шаг это то что мы хотим добавить Некоторое количество новых API которые позволяют вам который позволит вам выполнять

делать какие-то операции немножко по-другому в качестве примера такого я хочу привезти то есть что такое рикотта просто в физическом мире Пускай лучше я смотрю что пересекалась допустим у меня есть объект грэ пусть будет там реально какой-то персонажи квадрата идёт опускается вперёд просто чтобы понять не сталкиваться него сейчас то есть сейчас проще всего это сделать как-то мы берём персонажа фиксов детям и соответственно Зачем ты попадутся мы что-то делаем запретного теперь добавляется 1.000 таких персонажей И делать каждому река вот такой начинай

всё медленнее медленнее И тут на самом деле большое просто чтобы сделать 1 лайков Вот и очень часто он сейчас Ну вот в данный момент у меня особо важных персон может делать что-то другое Именно для этого мы хотим сделать API который позволит вам запускать какое-то количество жопах который когда-нибудь выполните когда они выходят Вы можете добавить зависимость к своему другу который Результаты будут использовать это очень круто допустим у вас есть 1.000 таких монстров которые просто вперед

Что вы делаете то есть она работает уже сейчас там какой-то версия Выберите все компоненты Вы сможете воспользоваться этим обидели там чуть У меня есть два массива С командами из результатов и соответственно для каждого что я хочу вот разгадать сюда вот туда погибшим в формах и дальше я просто запускаю Вот этот жост который разбивает на какое-то количество шипов вот здесь можно подождать чтобы по 10 штук разбивал вот опять не имеет смысл брать и делать один маленький дом с количеством кодом с маленьким количеством

работу Вот соответственно Вот это где-то выполняется все ваши пещеры как Пополняется когда пока вы делаете что-то другое знакомый нам уже отдал конкрит и получает эти результаты что-то с ними делать И этот пример как физики и физики двинуться ещё вперёд Мы хотим ещё двинуться дальше сейчас у нас есть по сути плюсовых вот если шапку То есть к нему если вы не ношу вас нет доступа вас есть доступ только вот и по частям аккуратненько переносить функционал в США сейчас у нас уже есть какое-то количество такого функционала Она там на битбакет на на гитхабе

поскольку сейчас прекрасный кот Job System этими компонентами таксистом может выполняться очень быстро и безопасно искал что-то весь смысл перенести часть функционала и плюсовка То есть это позволит нам позволят вам исходники и это позволит выпускать над апдейтом функционалом не зависит от каких-то версию нет И на самом деле многие из вас заметили наверно потихоньку начинаем внедрять то что называют как их монтаже и в какой-то момент мы придем к тому что большая часть

каких-то элементов движка вы будете просто надо же как-то плакать и как-то менять вот что очень поддерживает эту идею переноса + Вова года в США и экспериментирует с тем чтобы можно было перенести Какой код можно было перенести из плюсов А насколько я знаю сейчас на Иксперию заниматься с аудио с физикой то есть Игорь небольшой примерчик он тоже на всем известных наших водах но здесь реализация сделана совсем по-другому реализация этих того чтобы устроить там какую-то свою

систему трехмерного пространства разбиения просто чтобы понять кто играет с моими соседями здесь вот эти оперативно всех кто все объекты которые находятся в радиусе там вот какой-то точке Вот если бы посмотрит аккуратно увидишь сталкиваются с другими разными приставками То есть это Димка выглядит также было сделано по-другому показывает США API физический и посмотрите сюда вот здесь вот как раз показывает результаты на работу То есть если раньше там было число 24 если раньше они выполнялись очень

долго на главном потоке поэтому услышал вот таким образом делать Вот эту девку а то сейчас используя новые физические мы можем большая часть работы перенести непосредственно другие видите что здесь вот именно работа происходит за может 2 миллисекунды потом вот эти вот все оранжевые это физически они соответственно считаешь у нас происходит и дальше Вот где-то здесь соответственно нужно уже знать что произошло и использовать эти результаты каким-то образом для того чтобы

понять кто находится рядом как-то скорректировать свою куртку тогда это всё делает вот эти вот маленькие рыбки Вот это тоже очень круто то есть мы не только даем вам возможность писать высокопроизводительный код на си шарпе которых выполняется во многих тестах быстрее чем соответственно код на плюсах новые сами видим как мы можем использовать эту же самую систему для того чтобы писать код вместо того чтобы писать корпусах Вот и конечно же важный вопрос

Когда мы хотим дать вам это всё систему вместе со всеми компонентами пока мы стараешься успеть 2018 1 2018 один должен быть скорее всего где-то в районе GTC то есть где-то в районе марта ты хочешь стараешься успеть уже почти всё сделано сложно обещать когда-то Мы обещали что у нас в 2012 году на камеру вот есть две вещи которые на самом деле всего лишь проекта есть там нет никакого Мы хотим выпустить вот эти две вещи вместе с тем которые являются скидывала 2018a компилятор чуть позже когда он полностью

убедиться что он работает правильно всегда Вот и ансамбля Если у вас есть какие-то вопросы всегда так мы можем просто я уложился Муромец стал на самом деле у нас в принципе достаточно времени я да поднимайте руки будут просто давать на микрофон у меня есть такой вот как синхронизируется Job обновлением кадров Как проехать работа выполняется несколько вообще в чём нет ничего не знает про кого-то есть кадры это что такое ты в какой-то момент вам нужно показать что-то

что-то значит когда вы показываете эти что вот это Пусть об этом знаю где-то там каких-то каких-то отжался вам нужно убедиться что сейчас отправится уже подвинуть репозиция это значит вот это это является точной синхронизации значит по сути проще говоря в этот момент на всех уроках должна выполняться вот это вот комплит вот этим занимается как раз допустим точно знаю что транспорт подвинулся как только вы пытаюсь взять текущее значение transform position значит если на этот раз он подъехал

заглавный какие-то жёлтых вод которые используют вот-вот transform CSS как раз для этого он убеждается в том что все все связи Джобс выполнен уже только потом возвращают он на тебе эти данные то есть вот именно так связано по сути простым языком говоря если я хочу в этом кадре получить результаты должен выбрать комплект или не должен не заморачиваться тем чтобы вот на трансформер допустим выполнять комплит от хочешь взять там уже вызовет этот комплект Вопрос такой

Зачем счёт вот это вот вся магия А вот отлично видно было Что может батареи проседает Это что правда сильнее работать начал нет так-то нечего Конечно Потому что у нас ресурсы не безграничны То есть если не загружает процессор если работать на максимальной тактовой частоте то он соответственно потребляет больше энергии Вот Но тут же вопрос ещё не только в том что мы загружаем больше процессор все вот эти вот жабу и выполняем гораздо более оптимально То есть как я сказал используя вот до этой oriented Design

мы добиваемся того что именно ресурсы процессора мы максимально продуктивно соответственно Если вы боитесь того чтобы там девается переговаривались или ещё что-то то во-первых звони ресурсов продуктивнее будет перегревать девайсы меньше а во-вторых вы просто сами должны ограничивать на Ну что вы хотите выполнять Спасибо ещё один маленький вопрос А я же правильно понял что вот это вот всё там удачи на стороне только больших батальонов если нас какой-нибудь жалкий Mach3 там 100 элементов на экране из них только 20 максимум что-то делать одновременно можно не заморачиваться с жабами

Ну скорее всего Да там всё здесь если у вас нет проблемы с производительностью значит инструмент который решает проблемы с презервативом не нужен Спасибо Спасибо за доклад хороший очень два маленьких вопроса Первый это если какой-то асинхронные операции для того чтобы узнать что у нас комплект учёбы произошёл Они синхронно ждать птица и второй насколько вся эта система и Шедоу привязана к самой Unity то есть Будет ли возможность например использовать её чтобы билдить игру вдм там покрывать тестами а потом уже

подключать киньте отдельно или соответственно не сбил децибел Извините безлимитище не сбил лица то есть большая часть логики всего она находится всё-таки в плюсах вот поэтому без Юнити использования вообще невозможно так первым про синхронизацию давай про асинхронный интерфейс годам чтобы можно было например вызвать там ну neowave комплект Ну Оля там colback на компьютер надо посмотреть тапия честно говоря не помню по-моему джобов есть грубо говоря там какой-то Property который говорит типа

завершён или нет то есть какой-то API который который можно проверить но скорее всего это не наверное не очень правильный подход просто проверять что-то она завершилась они завершилась можно просто добавить всё в dependency и соответственно когда все завершится выполнить Job который зависит от всего то есть это и будет твой какой-то вот какое твоё событие что всё выполнялся но это значит мы вот этот основной конфликтом ждём правильно Если нужны Пусть Complete он

комплектом Что делает он говорит скидываю что вот мне вот прямо нужна Тася ты сделаешь Что всё возможно чтобы было сейчас поэтому он значит skeller бросается что он делал там и он значит пытается выполнить вот этот жопу значит прямо сейчас где-нибудь на который мы доступны соответственно Если вы этого жлоба есть какие-то зависимости он сначала выполняют их на любых ресурсах которому доступны там другие ядра атома интернета вот это вот всё вот то есть это операция синхрон то есть ваш вот он ждёт пока скидываю выполнит всё вот это вот вот то есть

тут Да тут Если вы тут хотите вот Я вот сейчас хочу вот всё дальше уже ничего не могу ждать кто вызывается Job Job Control атомкомплект Ну скорее всего, это выполняется когда-то когда-то уже выполнил автосервис Восход правильно построен, то скидываю уже На каких-то свободных ресурсах до этого. Спасибо за доклад вопрос Следующий Job манипулирует transform через трансформатор с правильно. А если возможно и необходимость писать такие вот обертки для своих компонентов, которые можно дешевле,

но для синхронизации живого тут дело в том, что не можете передать monobehaviour в.в. Job то есть, Я как понимаю отсюда вопрос и скорее всего, это просто неправильно идея, как нужно делать. Вот эти данные нужно хранить как-то отдельно в каких-то структурах и передавать их потом в job.eu же там, допустим, он обещаю будет, если вам действительно нужно. с этой структурой Вот то есть по-моему насколько знаю У нас нет механизма именно такого для каких-то кастомных Мон обещаю но возможно возможно вам писать а просто не смотрел как выглядит изнутри это трансформайс вот поэтому

надо поэкспериментировать как это проще сделать Спасибо Здравствуйте вопрос Вот когда вы показали оптимизацию с rotation менеджер по-моему Да правильно ли я понимаю что оптимизация происходит за счёт того что мы вкладываем в ряд вот эти вот все данные процессоры проще работать там есть несколько частей то есть самая простая оптимизация это то что у нас теперь Unity не вызывает апдейт у каждого роттера То есть если здесь вот просто отдает мы их делаем там 50000 штук

и Unity соответственно нужно вот этот апдейт метод у каждого из 50000 штук и довольно затратное операция потому что нужно из плюсов wakodo вызвать пешеход вот если вам интересно вот здесь вот этот статья которая там давно написал там всё разложено по полочкам что происходит Вот то есть это вот первая такая оптимизация вот а дальше оптимизация что мы просто все данные по которым мы продвигаемся мы кладём в массив И соответственно процессор уже скорее всего эти данные имеют какие-то

следующие Тоесть поскольку он читает блоками Вот это уже другое то здесь несколько таких последовательных шагов Спасибо ещё вопрос по поводу магической депутата который делает в десять раз быстрее А почему Вот его нужно использовать То есть почему нельзя было сделать чтобы всё работало в десять раз быстрее без него-то есть какие есть ситуации когда можно использовать спасибо ну теоретические Ну начнём с того что именно как думала команда я точно сказать не могу вот но знаю с того что там сейчас есть некоторые ограничения то есть поскольку это всё ещё где-то продукт

он работает не всегда как бы сказать то есть истина какие-то косяки и когда собственно компиляция падает по какой-то причине вот мы конечно это исправим Но тогда получается я просто убираю вот этот вот атрибуты У меня всё работает вот то есть так Возможно когда-нибудь мы включим включим его по дефолту Вот но здесь нужно конечно что команды команда хочет эволюционировать именно вот это вот компилятора и какие ещё хочет добавлять А ещё насколько я например вижу Ну с этим атрибутом мы не можем использовать банально вот виртуальные методы А в принципе Джобса нам позволяют использовать виртуальный

метод нет здесь довольно большие ограничения то есть что только структура и вот и собственно на данное ограничение Вот это конечно заставляет думать сильно по-другому Когда вы организуете свой данные Но если вы идете этим путем вы видите Какие прироста производительности вы получаете то есть вас есть что просто в общем Огромное спасибо за то что теперь физику можно будет делать не только в одном приказ можно делать не только в одном потоке что дикая боль вообще была на такой вопрос допустим когда мы на iOS делаем физику у нас на 30 кадров в секунду а физика в примерах 60 и получается что

officejet он пикает аблетон идёт два раза в кадр А если она спросила типа поезда у нас 3 раза в кадр не знаете ли вы если какое-то на планы по поводу того чтобы можно было делать параллельную raycast после обновления физике не где-то там как я понял она где-то в стриптиз зоне идёт где-то вот там директор Элиза рендером идёт raycasting многопоточный То есть он там прямо как в ряд настраивается уже когда мы ничего не трогаем А у тебя тут есть несколько моментов во-первых А сейчас в 17112 можете вызывать

обновление физики в ручную то есть нам нельзя Пиво может Отключить авто обновление физики и вызывать его вручную А потому что там да есть такой момент что если у вас допустим устройство не справляется с там с вычислением этого может попасть такое цикл когда этих вычислений физике будет всё больше больше больше больше и в общем там приведет к краху Вселенной скорее всего какой-то наверное Вот и но вызов тех же самых рекостав То есть во-первых это не значит что вы можете их любого потока вызывать этот треков

То есть все это должно быть в рамках jobscheduler чтобы он мог понимать когда что должно быть Готово Вот а здесь вы просто просто нужно понять когда вам нужны эти данные уже Ну вот и вы эти поскидывайте какое-то количество этих агрегатов Вот и дальше уже что-то с ними делать они теперь не не завязаны тоже сомафикс там допустим вот когда вам нужна а не выполняется то есть и Ну да то есть они выполнят ты когда-нибудь вывод в презентации всегда говорят что они выполняться когда-нибудь то есть а иногда допустим когда мы идём на

физику машиной например обновление физики и обновления колёса не должны идти после этого и Ну было бы очень удобно там запустить А многопоточный какой-то кот который просто там много raycasthit сразу после обновления в физике это было бы круто ещё такой вопрос Если у вас есть как многослойная прекрасен тайская деревня про старика и поезд поезд точки А поиск через как бы через глубину объектов чтобы ты мог но там выбрать как бы объекты которые тебе нужны потом по итогу который Да а пол доступен

из этой системы я не знаю таких планах Просто я не видел Опиши финального вообще логично То есть почему баня сейчас есть Уже API которая позволяет передать там лист или massiv Chek Какая для того чтобы он запомнил Вот типа за результатами рекостав чтобы и в этом был была такая же функция получается Мы когда будем красить мы не можем работать напрямую с этими данными сразу Да потому что там какие могут ли кто-то есть там к примеру там коллайдер компонент да то есть мы не можем в жопе получить доступ к нему мы потом где-то должен с этим работать правильно смотрите То есть если

наберем Unity не позволит же скорее всего как ты топи должен быть то есть где-то получается с какой-то количество вложенных массивов что ли получается Если он должен вернуть не raycast Hit а какой-то массив О'кей Я не знаю тут надо с физики проконсультироваться Конечно вот если с умом очень важно знать ответ на этот вопрос есть у нас основной разработчик физике он находится в санкт-петербурге русскоговорящий Где можно в Твиттере вообще спросить типа там Слушай Антон тут вот как будет у вас вот это всё он говорит он ответит и последний вопрос простой но вот в браузерах не поддерживается

многопоточность позволит ли эта штука поскольку она работает чисто с классами многопоточность использовать браузерах спасибо Нет проблема браузерные многопоточность это там где прямо технология поддержки в самих браузерах ещё не готово вот есть есть какие-то подвижки но у нас просто как какую-нибудь V2 нет возможности запускать какие-то потоки в браузере Вот и поэтому если Ну пока браузеры не не поддержит этот функционал вы не сможете запускать Job Jobs в разных потоках но вы сможете запускать на главном потоке что будет конечно не настолько быстро если выполнение было параллельно

Вот Но вы получите прирост производительности вот просто из разных других вещей которые рассказал там что там данные находится там рядом то что она там как бы с кеды распределяет когда ему там что выполнить Там и так далее вот тут да Так что даже если у вас какая-то платформа в которой нет допустим А возможности выполнять где-то параллельно вы все равно получите прирост производительности вот с этой новой системой что я считаю очень очень круто ещё вопросы

Следующий вопрос можете немного рассказать про магию инжект упал как она работает так понимаю Нам получается есть несколько листов И по одному компоненты одного объекта располагаются правильно еда и нету с этим можно управлять как бы смысл в том что если у вас система использует сразу допустимых вот здесь была там несколько каких-то разных там вот это значит что этой системе нужны данные вот этих всех четырех разных компонентов Это значит что Вы хотите итерировать по ним по этим данным и всегда их иметь под рукой

то есть здесь тогда система эти вот данные раз положит данные абонентов расположенных в массиве друг за другом приступ будет Вот сколько их там четыре там четвёрка четвёрка четвёрка четвёрка вот Это насколько я понимаю сам сейчас с работы Вот и если вам интересно по-моему в виде она unite которая была Юнайтед O'stin еким как раз презентации упоминал Вот вот этот момент Именно твоя утром который можно кстати управлять То есть я очень рекомендую Кстати спасибо этот вопрос я очень рекомендую

всем кто заинтересовался посмотреть значит три видео с юной до последнего ты всё просто заходите там YouTube Unity и там есть плейлист Юнайтед есть во-первых кино в котором мы показывали собственно наши с там сколько-то там десятки тысяч юнитов одновременно экране во-вторых видео просишь обзор систем от якима нашего сетевого ив-3 ребята из nordeus с которыми мы делали этого Димку они рассказывают как это Димка работает вот а у них-то них тоже есть доклад Moto Есть возможно там вы найдете

подробный ответ на вопрос Спасибо и у нас время на один вопрос спасибо большое брат здесь вопрос довольно общие вы говорили что логично не нужно давать жопу простую задачу Оля подвинуть один объект конкретно с этим есть какие-то может советы потому Насколько нужно нагружать зубы сейчас нет я думаю это нужно как-то тесте То есть понятно что на то чтобы запустить Job есть некоторые overhead То есть у вас есть допустим там 8 ядер 2 из них из-под носа Unity

6 простаивает соответственно вам нужно допустим какую-то там миллион операции распределить на 8 ядер каким-то оптимальным способом Я думаю сделать простенький непосредственно для вашего случая Вы прям Оформите в виде графика вы увидите Сколько сколько джобов по сколько операций для вас оптимален всё буду делать так спасибо спасибо Валентин

Комментарии для сайта Cackle

Купить этот доклад

Доступ к видеозаписи доклада «C# Job System — безопасный многопоточный код в Unity»
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно

Доступ ко всем записям докладов мероприятия

Доступ к записям всех докладов «DevGAMM Minsk 2017»
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Билет

Интересуетесь тематикой «Разработка и программирование»?

Возможно, вас заинтересуют видеозаписи с этого мероприятия

29 августа 2019
Москва
7
49
геймдев, игры, киберспорт, медиа, разрвлечения

Похожие доклады

Кирилл Надеждин
Ведущий программист в Kumo Kairo
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Альберт Жильцов
Креативный продюсер в 1C Game Studios
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Леонид Горбачёв
CTO в OctoBox Interactive
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно

Купить это видео

Видеозапись

Доступ к видеозаписи доклада «C# Job System — безопасный многопоточный код в Unity»
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно

Conference Cast

ConferenceCast.tv — архив видеозаписей докладов и конференций.
С этим сервисом вы можете найти интересные лекции специально для вас!

Conference Cast
1158 конференций
32530 докладчиков
14480 часов контента