SlideShare a Scribd company logo
1 of 38
Введение в паттерн
SchedulableObject
ПАВЕЛ ОСИПОВ
РУКОВОДИТЕЛЬ ГРУППЫ РАЗРАБОТКИ ОБЛАКА MAIL.RU ДЛЯ iOS
Постановка задачи
60FPS = 16,7ms/frame
Как добиться 60 FPS
Арифметика одного фрейма
16,7 - 10 = 6,7
Бизнес-логика отправки файла в Облако
Можем добавить без «лагов»
6,7ms / 2,6 ms = 3
Создание
объекта
BLOB
Добаление
в очередь
задачи
Обновление
локального
кэша
Отправка
сетевых
запросов
2,6 ms
Отправка больше 3 файлов за раз
Решение проблемы массового добавления
файлов в Облако методом позорных констант
Деградация архитектуры: исходное состояние
Деградация архитектуры: явление проблемы
Деградация архитектуры: неправильное
решение проблемы «бутылочного горлышка»
Деградация архитектуры: шаг 1
Деградация архитектуры: шаг 2
Деградация архитектуры: шаг N
Thread-Safe Architecture
Решение (не для iOS): Multiprocess Architecture
Решение для iOS: Schedulable Architecture
Принцип действия паттерна
SchedulableObject
1. События
2. Очередь событий
3. Цикл обработки
сообщений
4. Планировщик
5. SchedulableObject
Основные компоненты паттерна
Компоненты паттерна: Event
Компоненты паттерна: Event Queue
Компоненты паттерна: RunLoop
1.NSThread
2.NSOperation
3.Grand Central Dispatch
Компоненты паттерна: Thread
Компоненты паттерна: Scheduler
Компоненты паттерна: SchedulableObject
Соединяем все вместе: Сервисы
Соединяем все вместе: Assembly
Соединяем все вместе: Application
Библиотека
POSSchedulableObject
POSSchedulableObject: реализация компонент
Компонент Реализация
Event Блоки Objective-C
Event Queue Внутренняя реализация dispatch_queue_t из GCD
Run Loop Внутренняя реализация dispatch_queue_t из GCD
Thread Внутренняя реализация dispatch_queue_t из GCD
Scheduler RACTargetQueueScheduler из ReactiveCocoa
SchedulableObject Базовый класс для управляемых объектов
POSSchedulable
Объявление класса
Взаимодействие с классом
Сборка объектов: простой случай
Сборка объектов: сложный случай
Сборка объектов: решение сложного случая
Сборка объектов: пример сложного случая
1. Библиотека POSSchedulableObject - http://bit.ly/schedulable_object
2. Консольное демо-приложение - http://bit.ly/schedulable_object_concept
3. Большое демо-приложение для iOS - http://bit.ly/schedulable_object_demo
4. Ссылка на презентацию - http://bit.ly/schedulable_object_pptx
Ссылки
Контакты
Email: posipov@bk.ru
Twitter: @posipov

More Related Content

What's hot

Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Ontico
 
Moscow DevOps meetup 18.05.13
Moscow DevOps meetup 18.05.13Moscow DevOps meetup 18.05.13
Moscow DevOps meetup 18.05.13Alex Chistyakov
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр КолесеньIT Share
 
Выступление Юрия Насретдинова, Badoo, на High Performance Conference
Выступление Юрия Насретдинова, Badoo, на High Performance ConferenceВыступление Юрия Насретдинова, Badoo, на High Performance Conference
Выступление Юрия Насретдинова, Badoo, на High Performance ConferenceEYevseyeva
 
Badoo presentation-2012-rit-nasretdinov
Badoo presentation-2012-rit-nasretdinovBadoo presentation-2012-rit-nasretdinov
Badoo presentation-2012-rit-nasretdinovYuriy Nasretdinov
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Ontico
 
Highload Begun Pankov
Highload Begun PankovHighload Begun Pankov
Highload Begun PankovOntico
 
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»Tanya Denisyuk
 
Л9: Взаимодействие веб-приложений
Л9: Взаимодействие веб-приложенийЛ9: Взаимодействие веб-приложений
Л9: Взаимодействие веб-приложенийTechnosphere1
 
Containers in real world презентация
Containers in real world презентацияContainers in real world презентация
Containers in real world презентацияPavel Odintsov
 
Apache Kafka and stream processing peculiarities [ru]
Apache Kafka and stream processing peculiarities [ru]Apache Kafka and stream processing peculiarities [ru]
Apache Kafka and stream processing peculiarities [ru]Vsevolod Solovyov
 
CodeFest 2013. Чистяков А. — Использование систем виртуализации в веб
CodeFest 2013. Чистяков А. — Использование систем виртуализации в вебCodeFest 2013. Чистяков А. — Использование систем виртуализации в веб
CodeFest 2013. Чистяков А. — Использование систем виртуализации в вебCodeFest
 
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...Ontico
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...Ontico
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Ontico
 
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)Ontico
 

What's hot (19)

RootConf 2015
RootConf 2015RootConf 2015
RootConf 2015
 
openSUSE Build Server от Б до Ю
openSUSE Build Server от Б до ЮopenSUSE Build Server от Б до Ю
openSUSE Build Server от Б до Ю
 
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
 
Moscow DevOps meetup 18.05.13
Moscow DevOps meetup 18.05.13Moscow DevOps meetup 18.05.13
Moscow DevOps meetup 18.05.13
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень
 
Выступление Юрия Насретдинова, Badoo, на High Performance Conference
Выступление Юрия Насретдинова, Badoo, на High Performance ConferenceВыступление Юрия Насретдинова, Badoo, на High Performance Conference
Выступление Юрия Насретдинова, Badoo, на High Performance Conference
 
Badoo presentation-2012-rit-nasretdinov
Badoo presentation-2012-rit-nasretdinovBadoo presentation-2012-rit-nasretdinov
Badoo presentation-2012-rit-nasretdinov
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
 
Highload Begun Pankov
Highload Begun PankovHighload Begun Pankov
Highload Begun Pankov
 
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
 
Л9: Взаимодействие веб-приложений
Л9: Взаимодействие веб-приложенийЛ9: Взаимодействие веб-приложений
Л9: Взаимодействие веб-приложений
 
Containers in real world презентация
Containers in real world презентацияContainers in real world презентация
Containers in real world презентация
 
Apache Kafka and stream processing peculiarities [ru]
Apache Kafka and stream processing peculiarities [ru]Apache Kafka and stream processing peculiarities [ru]
Apache Kafka and stream processing peculiarities [ru]
 
CodeFest 2013. Чистяков А. — Использование систем виртуализации в веб
CodeFest 2013. Чистяков А. — Использование систем виртуализации в вебCodeFest 2013. Чистяков А. — Использование систем виртуализации в веб
CodeFest 2013. Чистяков А. — Использование систем виртуализации в веб
 
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
 
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
 

Viewers also liked

Определение качества сетевого соединения в iOS-почте, Даниил Румянцев, разраб...
Определение качества сетевого соединения в iOS-почте, Даниил Румянцев, разраб...Определение качества сетевого соединения в iOS-почте, Даниил Румянцев, разраб...
Определение качества сетевого соединения в iOS-почте, Даниил Румянцев, разраб...Mail.ru Group
 
iMessage Apps: от стикеров до банковских приложений за 30 минут, Вадим Дробин...
iMessage Apps: от стикеров до банковских приложений за 30 минут, Вадим Дробин...iMessage Apps: от стикеров до банковских приложений за 30 минут, Вадим Дробин...
iMessage Apps: от стикеров до банковских приложений за 30 минут, Вадим Дробин...Mail.ru Group
 
Альтернативная монетизация — краудфандинг, Каменев Игорь, основатель проекта ...
Альтернативная монетизация — краудфандинг, Каменев Игорь, основатель проекта ...Альтернативная монетизация — краудфандинг, Каменев Игорь, основатель проекта ...
Альтернативная монетизация — краудфандинг, Каменев Игорь, основатель проекта ...Mail.ru Group
 
«Управление логикой переходов между экранами приложения с помощью координатор...
«Управление логикой переходов между экранами приложения с помощью координатор...«Управление логикой переходов между экранами приложения с помощью координатор...
«Управление логикой переходов между экранами приложения с помощью координатор...Mail.ru Group
 
«MVVM в Swift», Александр Зимин, независимый iOS-разработчик
«MVVM в Swift», Александр Зимин, независимый iOS-разработчик«MVVM в Swift», Александр Зимин, независимый iOS-разработчик
«MVVM в Swift», Александр Зимин, независимый iOS-разработчикMail.ru Group
 
«Как общаться и договариваться с заказчиками о проектной работе», Валентин Ша...
«Как общаться и договариваться с заказчиками о проектной работе», Валентин Ша...«Как общаться и договариваться с заказчиками о проектной работе», Валентин Ша...
«Как общаться и договариваться с заказчиками о проектной работе», Валентин Ша...Mail.ru Group
 
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...AvitoTech
 
«Пиринговый веб на JavaScript», Денис Глазков
«Пиринговый веб на JavaScript», Денис Глазков«Пиринговый веб на JavaScript», Денис Глазков
«Пиринговый веб на JavaScript», Денис ГлазковMail.ru Group
 
Александр Лисаченко, Alpari, «Решение вопросов сквозной функциональности в пр...
Александр Лисаченко, Alpari, «Решение вопросов сквозной функциональности в пр...Александр Лисаченко, Alpari, «Решение вопросов сквозной функциональности в пр...
Александр Лисаченко, Alpari, «Решение вопросов сквозной функциональности в пр...Mail.ru Group
 
Руслан Ханов, «Контейнер сервисов — Что? Где? Когда?»
Руслан Ханов, «Контейнер сервисов — Что? Где? Когда?»Руслан Ханов, «Контейнер сервисов — Что? Где? Когда?»
Руслан Ханов, «Контейнер сервисов — Что? Где? Когда?»Mail.ru Group
 
Максим Попов, Mail.Ru Group, «Асинхронные запросы в MySQL или когда PDO стано...
Максим Попов, Mail.Ru Group, «Асинхронные запросы в MySQL или когда PDO стано...Максим Попов, Mail.Ru Group, «Асинхронные запросы в MySQL или когда PDO стано...
Максим Попов, Mail.Ru Group, «Асинхронные запросы в MySQL или когда PDO стано...Mail.ru Group
 
«Advanced {product_name} configuring», Алексей Макеев, Mail.Ru Group
«Advanced {product_name} configuring», Алексей Макеев, Mail.Ru Group«Advanced {product_name} configuring», Алексей Макеев, Mail.Ru Group
«Advanced {product_name} configuring», Алексей Макеев, Mail.Ru GroupMail.ru Group
 
«iPython & Jupyter: 4 fun & profit», Лев Тонких, Rambler&Co
«iPython & Jupyter: 4 fun & profit», Лев Тонких, Rambler&Co«iPython & Jupyter: 4 fun & profit», Лев Тонких, Rambler&Co
«iPython & Jupyter: 4 fun & profit», Лев Тонких, Rambler&CoMail.ru Group
 
«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...
«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...
«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...Mail.ru Group
 
«Свой PhoneGap за 15 минут», Алексей Охрименко (IPONWEB)
«Свой PhoneGap за 15 минут», Алексей Охрименко (IPONWEB)«Свой PhoneGap за 15 минут», Алексей Охрименко (IPONWEB)
«Свой PhoneGap за 15 минут», Алексей Охрименко (IPONWEB)Mail.ru Group
 
«Компонентная верстка с AngularJS», Андрей Яманов (CTO TeamHunt)
«Компонентная верстка с AngularJS», Андрей Яманов (CTO TeamHunt)«Компонентная верстка с AngularJS», Андрей Яманов (CTO TeamHunt)
«Компонентная верстка с AngularJS», Андрей Яманов (CTO TeamHunt)Mail.ru Group
 
Profiling and optimizing go programs
Profiling and optimizing go programsProfiling and optimizing go programs
Profiling and optimizing go programsBadoo Development
 
Иван Лобов, Data-Centric Alliance, «Текущие тенденции в сфере исследования гл...
Иван Лобов, Data-Centric Alliance, «Текущие тенденции в сфере исследования гл...Иван Лобов, Data-Centric Alliance, «Текущие тенденции в сфере исследования гл...
Иван Лобов, Data-Centric Alliance, «Текущие тенденции в сфере исследования гл...Mail.ru Group
 
Сергей Николенко, Deloitte Analytics Institute, Высшая Школа Экономики, «От н...
Сергей Николенко, Deloitte Analytics Institute, Высшая Школа Экономики, «От н...Сергей Николенко, Deloitte Analytics Institute, Высшая Школа Экономики, «От н...
Сергей Николенко, Deloitte Analytics Institute, Высшая Школа Экономики, «От н...Mail.ru Group
 

Viewers also liked (20)

Определение качества сетевого соединения в iOS-почте, Даниил Румянцев, разраб...
Определение качества сетевого соединения в iOS-почте, Даниил Румянцев, разраб...Определение качества сетевого соединения в iOS-почте, Даниил Румянцев, разраб...
Определение качества сетевого соединения в iOS-почте, Даниил Румянцев, разраб...
 
iMessage Apps: от стикеров до банковских приложений за 30 минут, Вадим Дробин...
iMessage Apps: от стикеров до банковских приложений за 30 минут, Вадим Дробин...iMessage Apps: от стикеров до банковских приложений за 30 минут, Вадим Дробин...
iMessage Apps: от стикеров до банковских приложений за 30 минут, Вадим Дробин...
 
Альтернативная монетизация — краудфандинг, Каменев Игорь, основатель проекта ...
Альтернативная монетизация — краудфандинг, Каменев Игорь, основатель проекта ...Альтернативная монетизация — краудфандинг, Каменев Игорь, основатель проекта ...
Альтернативная монетизация — краудфандинг, Каменев Игорь, основатель проекта ...
 
«Управление логикой переходов между экранами приложения с помощью координатор...
«Управление логикой переходов между экранами приложения с помощью координатор...«Управление логикой переходов между экранами приложения с помощью координатор...
«Управление логикой переходов между экранами приложения с помощью координатор...
 
«MVVM в Swift», Александр Зимин, независимый iOS-разработчик
«MVVM в Swift», Александр Зимин, независимый iOS-разработчик«MVVM в Swift», Александр Зимин, независимый iOS-разработчик
«MVVM в Swift», Александр Зимин, независимый iOS-разработчик
 
«Как общаться и договариваться с заказчиками о проектной работе», Валентин Ша...
«Как общаться и договариваться с заказчиками о проектной работе», Валентин Ша...«Как общаться и договариваться с заказчиками о проектной работе», Валентин Ша...
«Как общаться и договариваться с заказчиками о проектной работе», Валентин Ша...
 
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
 
«Пиринговый веб на JavaScript», Денис Глазков
«Пиринговый веб на JavaScript», Денис Глазков«Пиринговый веб на JavaScript», Денис Глазков
«Пиринговый веб на JavaScript», Денис Глазков
 
Александр Лисаченко, Alpari, «Решение вопросов сквозной функциональности в пр...
Александр Лисаченко, Alpari, «Решение вопросов сквозной функциональности в пр...Александр Лисаченко, Alpari, «Решение вопросов сквозной функциональности в пр...
Александр Лисаченко, Alpari, «Решение вопросов сквозной функциональности в пр...
 
Руслан Ханов, «Контейнер сервисов — Что? Где? Когда?»
Руслан Ханов, «Контейнер сервисов — Что? Где? Когда?»Руслан Ханов, «Контейнер сервисов — Что? Где? Когда?»
Руслан Ханов, «Контейнер сервисов — Что? Где? Когда?»
 
Максим Попов, Mail.Ru Group, «Асинхронные запросы в MySQL или когда PDO стано...
Максим Попов, Mail.Ru Group, «Асинхронные запросы в MySQL или когда PDO стано...Максим Попов, Mail.Ru Group, «Асинхронные запросы в MySQL или когда PDO стано...
Максим Попов, Mail.Ru Group, «Асинхронные запросы в MySQL или когда PDO стано...
 
«Advanced {product_name} configuring», Алексей Макеев, Mail.Ru Group
«Advanced {product_name} configuring», Алексей Макеев, Mail.Ru Group«Advanced {product_name} configuring», Алексей Макеев, Mail.Ru Group
«Advanced {product_name} configuring», Алексей Макеев, Mail.Ru Group
 
«iPython & Jupyter: 4 fun & profit», Лев Тонких, Rambler&Co
«iPython & Jupyter: 4 fun & profit», Лев Тонких, Rambler&Co«iPython & Jupyter: 4 fun & profit», Лев Тонких, Rambler&Co
«iPython & Jupyter: 4 fun & profit», Лев Тонких, Rambler&Co
 
«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...
«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...
«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...
 
«Свой PhoneGap за 15 минут», Алексей Охрименко (IPONWEB)
«Свой PhoneGap за 15 минут», Алексей Охрименко (IPONWEB)«Свой PhoneGap за 15 минут», Алексей Охрименко (IPONWEB)
«Свой PhoneGap за 15 минут», Алексей Охрименко (IPONWEB)
 
«Компонентная верстка с AngularJS», Андрей Яманов (CTO TeamHunt)
«Компонентная верстка с AngularJS», Андрей Яманов (CTO TeamHunt)«Компонентная верстка с AngularJS», Андрей Яманов (CTO TeamHunt)
«Компонентная верстка с AngularJS», Андрей Яманов (CTO TeamHunt)
 
Profiling and optimizing go programs
Profiling and optimizing go programsProfiling and optimizing go programs
Profiling and optimizing go programs
 
Иван Лобов, Data-Centric Alliance, «Текущие тенденции в сфере исследования гл...
Иван Лобов, Data-Centric Alliance, «Текущие тенденции в сфере исследования гл...Иван Лобов, Data-Centric Alliance, «Текущие тенденции в сфере исследования гл...
Иван Лобов, Data-Centric Alliance, «Текущие тенденции в сфере исследования гл...
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
 
Сергей Николенко, Deloitte Analytics Institute, Высшая Школа Экономики, «От н...
Сергей Николенко, Deloitte Analytics Institute, Высшая Школа Экономики, «От н...Сергей Николенко, Deloitte Analytics Institute, Высшая Школа Экономики, «От н...
Сергей Николенко, Deloitte Analytics Institute, Высшая Школа Экономики, «От н...
 

Similar to Введение в паттерн Schedulable object, Павел Осипов, руководитель разработки iOS-приложений Облака Mail.Ru, преподаватель Технопарка Mail.Ru

Внедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движокВнедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движокRoman_Lut
 
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...Unigine Corp.
 
Разработка мобильных приложений под iOS
Разработка мобильных приложений под iOSРазработка мобильных приложений под iOS
Разработка мобильных приложений под iOSSCINO
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозитElena Kotina
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеAlexey Androsov
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...Nikolay Samokhvalov
 
kudinov
kudinovkudinov
kudinovOntico
 
архитектурные приемы онлайн игры
архитектурные приемы онлайн игрыархитектурные приемы онлайн игры
архитектурные приемы онлайн игрыOntico
 
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...Tanya Denisyuk
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиITCrowd Almaty
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Pavel Chertorogov
 
MongoDB первые впечатления
MongoDB первые впечатленияMongoDB первые впечатления
MongoDB первые впечатленияfudz1k
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Nikita Borzykh
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени. beshkenadze
 
Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..webhostingguy
 
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)Ontico
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование системMedia Gorod
 
Дмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПОДмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПОDaria Oreshkina
 
Знакомство с WebAssembly
Знакомство с WebAssemblyЗнакомство с WebAssembly
Знакомство с WebAssemblyNikita Zimin
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 

Similar to Введение в паттерн Schedulable object, Павел Осипов, руководитель разработки iOS-приложений Облака Mail.Ru, преподаватель Технопарка Mail.Ru (20)

Внедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движокВнедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движок
 
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
 
Разработка мобильных приложений под iOS
Разработка мобильных приложений под iOSРазработка мобильных приложений под iOS
Разработка мобильных приложений под iOS
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозит
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.Почте
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 
kudinov
kudinovkudinov
kudinov
 
архитектурные приемы онлайн игры
архитектурные приемы онлайн игрыархитектурные приемы онлайн игры
архитектурные приемы онлайн игры
 
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)
 
MongoDB первые впечатления
MongoDB первые впечатленияMongoDB первые впечатления
MongoDB первые впечатления
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени.
 
Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..
 
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование систем
 
Дмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПОДмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПО
 
Знакомство с WebAssembly
Знакомство с WebAssemblyЗнакомство с WebAssembly
Знакомство с WebAssembly
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 

More from Mail.ru Group

Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...Mail.ru Group
 
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...Mail.ru Group
 
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир ДубровинДругая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир ДубровинMail.ru Group
 
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...Mail.ru Group
 
Управление инцидентами в Почте Mail.ru, Антон Викторов
Управление инцидентами в Почте Mail.ru, Антон ВикторовУправление инцидентами в Почте Mail.ru, Антон Викторов
Управление инцидентами в Почте Mail.ru, Антон ВикторовMail.ru Group
 
DAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга СвиридоваDAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга СвиридоваMail.ru Group
 
Почему вам стоит использовать свой велосипед и почему не стоит Александр Бел...
Почему вам стоит использовать свой велосипед и почему не стоит  Александр Бел...Почему вам стоит использовать свой велосипед и почему не стоит  Александр Бел...
Почему вам стоит использовать свой велосипед и почему не стоит Александр Бел...Mail.ru Group
 
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
CV в пайплайне распознавания ценников товаров: трюки и хитрости  Николай Масл...CV в пайплайне распознавания ценников товаров: трюки и хитрости  Николай Масл...
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...Mail.ru Group
 
RAPIDS: ускоряем Pandas и scikit-learn на GPU Павел Клеменков, NVidia
RAPIDS: ускоряем Pandas и scikit-learn на GPU  Павел Клеменков, NVidiaRAPIDS: ускоряем Pandas и scikit-learn на GPU  Павел Клеменков, NVidia
RAPIDS: ускоряем Pandas и scikit-learn на GPU Павел Клеменков, NVidiaMail.ru Group
 
WebAuthn в реальной жизни, Анатолий Остапенко
WebAuthn в реальной жизни, Анатолий ОстапенкоWebAuthn в реальной жизни, Анатолий Остапенко
WebAuthn в реальной жизни, Анатолий ОстапенкоMail.ru Group
 
AMP для электронной почты, Сергей Пешков
AMP для электронной почты, Сергей ПешковAMP для электронной почты, Сергей Пешков
AMP для электронной почты, Сергей ПешковMail.ru Group
 
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила СтрелковКак мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила СтрелковMail.ru Group
 
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...Mail.ru Group
 
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.ТаксиМетапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.ТаксиMail.ru Group
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupMail.ru Group
 
Этика искусственного интеллекта, Александр Кармаев (AI Journey)
Этика искусственного интеллекта, Александр Кармаев (AI Journey)Этика искусственного интеллекта, Александр Кармаев (AI Journey)
Этика искусственного интеллекта, Александр Кармаев (AI Journey)Mail.ru Group
 
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...Mail.ru Group
 
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...Mail.ru Group
 
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)Mail.ru Group
 
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()Mail.ru Group
 

More from Mail.ru Group (20)

Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
 
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
 
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир ДубровинДругая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
 
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
 
Управление инцидентами в Почте Mail.ru, Антон Викторов
Управление инцидентами в Почте Mail.ru, Антон ВикторовУправление инцидентами в Почте Mail.ru, Антон Викторов
Управление инцидентами в Почте Mail.ru, Антон Викторов
 
DAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга СвиридоваDAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга Свиридова
 
Почему вам стоит использовать свой велосипед и почему не стоит Александр Бел...
Почему вам стоит использовать свой велосипед и почему не стоит  Александр Бел...Почему вам стоит использовать свой велосипед и почему не стоит  Александр Бел...
Почему вам стоит использовать свой велосипед и почему не стоит Александр Бел...
 
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
CV в пайплайне распознавания ценников товаров: трюки и хитрости  Николай Масл...CV в пайплайне распознавания ценников товаров: трюки и хитрости  Николай Масл...
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
 
RAPIDS: ускоряем Pandas и scikit-learn на GPU Павел Клеменков, NVidia
RAPIDS: ускоряем Pandas и scikit-learn на GPU  Павел Клеменков, NVidiaRAPIDS: ускоряем Pandas и scikit-learn на GPU  Павел Клеменков, NVidia
RAPIDS: ускоряем Pandas и scikit-learn на GPU Павел Клеменков, NVidia
 
WebAuthn в реальной жизни, Анатолий Остапенко
WebAuthn в реальной жизни, Анатолий ОстапенкоWebAuthn в реальной жизни, Анатолий Остапенко
WebAuthn в реальной жизни, Анатолий Остапенко
 
AMP для электронной почты, Сергей Пешков
AMP для электронной почты, Сергей ПешковAMP для электронной почты, Сергей Пешков
AMP для электронной почты, Сергей Пешков
 
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила СтрелковКак мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
 
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
 
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.ТаксиМетапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
 
Этика искусственного интеллекта, Александр Кармаев (AI Journey)
Этика искусственного интеллекта, Александр Кармаев (AI Journey)Этика искусственного интеллекта, Александр Кармаев (AI Journey)
Этика искусственного интеллекта, Александр Кармаев (AI Journey)
 
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
 
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
 
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
 
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
 

Введение в паттерн Schedulable object, Павел Осипов, руководитель разработки iOS-приложений Облака Mail.Ru, преподаватель Технопарка Mail.Ru

Editor's Notes

  1. Паттерн SchedulableObject позволяет назначить объекту поток, в контексте которого должны осуществляться вызовы всех его методов. Согласованное назначение одного и того же потока нескольким объектам позволяет радикально упросить архитектуру приложения, превращая  ее из многопоточной в 2-х или, в общем случае, N-поточную.
  2. В данном разделе будет рассмотрен симптом высоконагруженной бизнес-логики, появление которого говорит о целесообразности использования паттерна SchedulableObject
  3. Принято считать, что пользователь воспринимает интерфейс приложения плавным, если он в состоянии обновляться 60 раз в секунду. На эту цифру можно посмотреть в ином разрезе. Поделив 1000 мс на 60 фреймов мы получим, что в случае плавного интерфейса каждый фрейм должен успеть выполниться не более чем за 16,7 мс.
  4. Допустим пользователь в определенный момент времени наблюдает некое окно, лайаут которого успевает отрисоваться за 10 мс. Это значит, что на бизнес-логика в рамках одного фрейма может потратить не более 6,7 мс.
  5. Рассмотрим в качестве примера бизнес-логику добавления файла в Облако. Она состоит из множества этапов, суть которых в контексте данного доклада нас не интересует. Важно то, что все они вместе занимают 2,6 мс. Поделив максимальное время, отведенное на работу бизнес-логики, на время добавления одного файла, мы получим число 3. Оно означает, что если приложение хочет сохраняться отзывчивым при отработке данного кейса, оно не может позволить себе добавлять более 3 файлов единовременно.
  6. С счастью для пользователя, но к сожалению для разработчиков, в приложении Облако существуют кейсы, когда необходимо добавить более 3 файлов за раз.
  7. В данный момент, во избежание длительного «подвисания» приложения скорость добавления файлов в очередь на загрузку сервисом автозагрузки искусственно ограничивается методом «позорных констант». Две такие константы представленны на слайде. Их семантика такова: по итогам сканирования галереи на предмет новых фото, сервис должен добавлять их в очередь загрузки пачками не более 1000 штук каждая с интервалом 5 секунд. Но даже при таком ограничении мы имеем подвисание на 1000 * 2,6мс = 2,6 сек. каждые 5 сек., что не может не огорчать. Искусственное ограничение пропускной способности бизнес-логики – признак ее высконагруженности. Паттерн SchedulableObject призван побороться с данным неприятным явлением.
  8. Рассмотрим альтернативу методу «позорных констант». Для этого проследим эволюцию архитектуры классического бизнес-приложения. В рамках рассмотрения особый интерес представляют потоки (threads), в контексте которых происходит вызов методов объектов. Каждый из них мы будем кодировать своим собственным цветом. Изначально все происходит в главном потоке, поэтому все связи и сущности имеют одинаковый синий цвет.
  9. Допустим, появился сценарий, при отработке которого один из объектов стал потреблять слишком много времени (более 6,7 мс). Из-за этого отзывчивость пользовательского интерфейса начинает страдать. Обозначим проблемный поток данных (data flow) жирными стрелками.
  10. Без проведения рефакторинга ресурсоемкого класса осуществлять вызовы к нему в отельном красном потоке нельзя. Причина в том, что у него не один клиент, а два, и второй по-прежнему осуществляет вызовы из главного синего потока. Если эти вызовы изменяют разделяемое состояние объекта, то произойдет классическая проблема гонки к данным.
  11. Для защиты от «гонки данных» необходимо реализовывать красный объект с предыдущего слайда потокобезопасным образом.
  12. По мере развития проекта, еще один компонент становится узком местом. К счастью, у него только один клиент и потокобезопасная реализация не потребовалась.
  13. Экстраполируя указанный подход к проектированию многопоточной архитектуры, рано или поздно она приходит к состоянию, изображенном на слайде.
  14. При увеличении связей между объектами состояние архитектуры становится совсем плачевным. Недостатки данного подхода с условным названием Thread-Safe Architecture таковы: Необходимость в постоянном отслеживании связей между объектами для своевременного проведения рефакторинга однопоточной реализации метода/класса на потокобезопасную (и обратно). Потокобезопасные методы сложны в реализации, поскольку помимо прикладной логики необходимо учитывать специфику многопоточного программирования. Активное использование примитивов синхронизации может в итоге сделать приложение еще более медленным, чем его однопоточная версия.
  15. В мире серверной, десктопной и даже Android-разработки тяжелую бизнес-логику часто выделяют в отдельный процесс. Взаимодействие между сервисами внутри каждого из процессов продолжает носить однопоточных характер. Сервисы из разных процессов взаимодействуют друг с другом с использованием тех или иных механизмов межпроцессного взаимодействия (DCOM, Corba, .Net Remoting Boost.Interprocess и т.п.). К сожалению в мире iOS разработки мы ограничены лишь одним процессом и AS IS такая архитектура не подходит. Однако…
  16. Мы можем адаптировать многопроцессную архитектуру на iOS-ный лад. Для этого мы заменяем процессы – потоками, а механизмы межпроцессного взаимодействия – косвенными вызовами. Выражаясь более формальным языком, суть трансформации такова: Завести один отдельный рабочий поток. Проассоциировать с ним цикл обработки событий и специальный объект для доставки в него сообщений – планировщик (от англ. scheduler). Связать каждый изменяемый объект с одним из планировщиков. Чем больше объектов будет связано с планировщиками рабочих потоков, тем больше времени останется у главного потока на свою основную обязанность – обновление пользовательского интерфейса. Выбирать правильный способ взаимодействия объектов друг с другом в зависимости от их принадлежности к планировщикам. Если планировщик общий, то взаимодействие осуществляется путем прямого вызова методов, если же нет, то опосредованно, через отправку событий. Полученную архитектуру я и называю Schedulable Architecture.
  17. В основе паттерна Schedulable Architecture лежат пять компонент. Далее для каждого из них определяется зона ответственности и предлагается наивная реализация с целью наиболее наглядным образом проиллюстрировать его внутреннее устройство.
  18. Наиболее удобной абстракцией для событий в iOS являются блоки, внутри которых происходит вызов нужного метода объекта.
  19. Поскольку события в очередь поступают из разных потоков, то очередь требует потокобезопасной реализации. Фактически именно она избавляет нас от трудностей многопоточной разработки в прикладных компонентах.
  20. RunLoop реализует строго последовательную обработку событий из очереди. Именно благодаря этому свойству компонента паттерн SchedulableObject гарантирует, что все вызовы к реализующим его объектам осуществляются строго в одном потоке. В iOS SDK имеется стандартная реализация данного компонента – NSRunLoop.
  21. Объект ядра операционной системы, в котором происходит исполнение кода цикла обработки сообщений. Наиболее низкоуровневой реализацией в iOS SDK является класс NSThread. Для практических целей рекомендуются к использованию более высокоуровневые примитивы вроде NSOperationQueue или очереди из Grand Central Dispatch.
  22. Обеспечивает механизм доставки событий до требуемой очереди. Будучи главным компонентом, посредством которого клиентский код исполняет методы объектов, его он дает название как микропаттерну SchedulableObject, так и макропаттерну Schedulable Architecture.
  23. Обеспечивает вызов методов объекта в строго определенном потоке. По отношению к целевому объекту может выступать как в роли агрегата, как в примере ниже, так и в роли базового класса, как в библиотеке POSSchedulableObject.
  24. Продемонстрируем взаимодействие всех компонент архитектуры на примере консольного приложения. Его полный листинг доступен по ссылке – http://bit.ly/schedulable_object_concept. Приложение дублирует на консоли вводимые пользователем строки. Слой бизнес-логики, который мы хотим вынести из главного потока, представлен двумя классами: Printer печатает подаваемые ему строки в консоль. PrintOptionsProvider позволяет конфигурировать сервис Printer.
  25. Assembly реализует паттерн Dependency Injection Container. Объекта данного класса создает сервисы бизнес-логики. Обратите внимание, что сервис PrintOptionsProvider инжектируется в сервис Printer AS IS, а снаружи оба сервиса доступны как SchedulableObject. Причина в том, что оба сервиса живую в одном и том же потоке и поэтому могут взаимодействовать друг с другом напрямую. Извне (в слое представления) они в видны под видом управляемых объектов, взаимодействие с которыми возможно только косвенным образом через отправку событий.
  26. Слайд демонстрирует, как выглядит косвенное взаимодействие.
  27. POSSchedulableObject – пример реализации паттерна на Objective-C. Библиотека доступна по ссылке – http://bit.ly/schedulable_object
  28. В библиотеке реализован базовый класс, который: Имеет ссылку на планировщик, через который должно происходить косвенное взаимодействие с объектом. Автоматически проверяет корректность потока, из которого происходит вызов методов объекта-наследника. Достигается это за счет навешивания хуков (hooks) на все его методы в момент инициализации. В виду дороговизны данной процедуры по умолчанию она осуществляется только в отладочной версии приложения.  Основную часть исходников репозитория составляет демо-приложение. Оно авторизует пользователя в сервисе Dropbox, после чего выводит на экран имя и фамилию из его профиля. Рассмотрим несколько образцово-показательных примеров использования им библиотеки POSSchedulableObject.
  29. Протокол POSSchedulable содержит методы для отправки событий реализующему его объекту. Их использование было продемонстрировано в примере выше. Класс POSSchedulableObject полностью реализует одноименный протокол. Кроме того, он добавляет проверки на предмет того, что методы объекта вызываются в правильном потоке. Из проверок исключаются свойства с атрибутом atomic. Для ручного исключения тех или иных методов существует специальный инициализатор с настройками исключений.
  30. Пример объявления класса для управляемых объектов.
  31. В консольном приложении, представленном в статье, коммуникация с объектом класса Printer была односторонней. Листинг на слайде показывает, как получить результат косвенного вызова и воспользоваться им в контексте потока вызвавшего его объекта.
  32. Все объекты бизнес-логики приложения создаются внутри специальных классов, реализующих паттерн Dependency Injection Container. По аналогии с популярной библиотекой Typhoon, в названиях таких классов фигурирует корень Assembly. Создание объектов внутри них имеет две особенности: Объекты создаются лениво, по запросу. Следствием этого является изменяющееся на протяжении времени жизни состояние объектов Assembly. Оно также защищается от многопоточного доступа путем наследования от POSSchedulableObject. Возврат объектов попросившей их стороне происходит синхронно во избежании большого количества клиентского boilerplate-кода. Как видно из предыдущего листинга кода, использование accountInfoProvider достаточно многословно. Несложно представить, как приведенный код мог бы еще больше усложниться, если бы интерфейс Assembly имел асинхронную природу. Таким образом, Assembly обязуется создать и вернуть любой сервис синхронно и только в главном потоке.
  33. Все выглядит достаточно просто пока вдруг не потребуется создать граф объектов, которые , во-первых, живут в разных потоках, а во-вторых, для своей инициализации требуют вызвать один или несколько своих методов. Проблема в этом сценарии состоит в том, что для инициализации объекта A необходимо в красном потоке инициализировать объект B. Для того, чтобы с точки зрения клиента Assembly это произошло синхронно, на время создания красного объекта B синий поток должен быть заблокирован. Однако объекту B нужен объект C. Последний может создаться только в синем потоке. По аналогии с предыдущим шагом, на время его создания красный поток блокируется и ожидает завершения создания объекта C. Ожидание на этом этапе будет длиться вечно, поскольку событие, отправленное в синий поток, никогда не будет обработано, поскольку он был заблокирован при создании объекта A.
  34. Выход из сложившейся ситуации заключается в том, чтобы блокировать поток с помощью специальной spin-блокировки. Она должна останавливать исполнение текущего потока, но при этом осуществлять прокручивание его цикла обработки сообщений. В рамках библиотеки POSSchedulableObject специально для этого случая предусмотрен метод posrx_await в категории к RACSignal.