Разделы презентаций


Grand Central Dispatch

Содержание

Рыночная доля iOS-устройств (2013)

Слайды и текст этой презентации

Слайд 1Grand Central Dispatch
Петрусь А.С., iOS-developer, MadAppGang

Grand Central DispatchПетрусь А.С., iOS-developer, MadAppGang

Слайд 2Рыночная доля iOS-устройств (2013)

Рыночная доля iOS-устройств (2013)

Слайд 3GCD - низкоуровневое API для параллельного программирования.

GCD - низкоуровневое API для параллельного программирования.

Слайд 4Преимущества использования
Простота использования
Эффективность
Производительность

Преимущества использованияПростота использованияЭффективностьПроизводительность

Слайд 5Очереди

Очереди

Слайд 6Передача заданий в очередь Пример 1

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

[self goDoSomethingLongAndInvolved];
NSLog(@"Done

doing something long and involved");
});
Передача заданий в очередь Пример 1dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{      [self goDoSomethingLongAndInvolved];

Слайд 7Передача заданий в очередь Пример 2
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

[self goDoSomethingLongAndInvolved];
dispatch_async(dispatch_get_main_queue(),

^{
[textField setStringValue:@"Done doing something long and involved"];
});
});
Передача заданий в очередь Пример 2dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{      [self goDoSomethingLongAndInvolved];

Слайд 8Передача заданий в очередь Пример 3. Блочные переменные
__block NSString *stringValue;

dispatch_sync(dispatch_get_main_queue(), ^{
stringValue

= [[textField stringValue] copy];
});
[stringValue autorelease];
Передача заданий в очередь Пример 3. Блочные переменные__block NSString *stringValue;    dispatch_sync(dispatch_get_main_queue(), ^{

Слайд 9Передача заданий в очередь Пример 4
dispatch_queue_t bgQueue = myQueue;

dispatch_async(dispatch_get_main_queue(), ^{
NSString *stringValue

= [[[textField stringValue] copy] autorelease];
dispatch_async(bgQueue, ^{
// use stringValue in the background now
});
});
Передача заданий в очередь Пример 4dispatch_queue_t bgQueue = myQueue;    dispatch_async(dispatch_get_main_queue(), ^{

Слайд 10Глобальные очереди

Глобальные очереди

Слайд 11Глобальные очереди
Исходный цикл:

for(id obj in array) {

[self doSomethingIntensiveWith:obj];
}


Параллельное представление

(при условии потокозащищенности метода doSomethingIntensiveWith:obj):

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
for(id obj in array) {
dispatch_async(queue, ^{
[self doSomethingIntensiveWith:obj];
});
}
Глобальные очередиИсходный цикл: for(id obj in array) {    [self doSomethingIntensiveWith:obj];  }

Слайд 12Глобальные очереди. Использование групп. Пример 1
dispatch_queue_t queue = dispatch_get_global_qeueue(DISPATCH_QUEUE_PRIORITY_DEFAULT,

0);
dispatch_group_t group = dispatch_group_create();
for(id obj in

array) {
dispatch_group_async(group, queue, ^{
[self doSomethingIntensiveWith:obj];
});
}
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
dispatch_release(group);
[self doSomethingWith:array];
Глобальные очереди. Использование групп. Пример 1 dispatch_queue_t queue = dispatch_get_global_qeueue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);  dispatch_group_t group = dispatch_group_create();

Слайд 13Глобальные очереди. Использование групп. Пример 2
dispatch_queue_t queue = dispatch_get_global_qeueue(DISPATCH_QUEUE_PRIORITY_DEFAULT,

0);
dispatch_group_t group = dispatch_group_create();
for(id obj in

array) {
dispatch_group_async(group, queue, ^{
[self doSomethingIntensiveWith:obj];
});
}
dispatch_group_notify(group, queue, ^{
[self doSomethingWith:array];
});
dispatch_release(group);
Глобальные очереди. Использование групп. Пример 2 dispatch_queue_t queue = dispatch_get_global_qeueue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);  dispatch_group_t group = dispatch_group_create();

Слайд 14Глобальные очереди. Использование групп. Синхронное и асинхронное выполнение
Синхронный вариант выполнения

очереди:
dispatch_queue_t queue = dispatch_get_global_qeueue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_apply([array count], queue,

^(size_t index){
[self doSomethingIntensiveWith:[array objectAtIndex:index]];
});
[self doSomethingWith:array];

Асинхронный вариант выполнения очереди:
dispatch_queue_t queue = dispatch_get_global_qeueue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
dispatch_apply([array count], queue, ^(size_t index){
[self doSomethingIntensiveWith:[array objectAtIndex:index]];
});
[self doSomethingWith:array];
});

Глобальные очереди. Использование групп. Синхронное и асинхронное выполнениеСинхронный вариант выполнения очереди: dispatch_queue_t queue = dispatch_get_global_qeueue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

Слайд 15Выводы
Простой низкоуровневый фреймворк для работы с потоками
Преимущества удобства и скорости

работы по сравнению с классическими ООП-подходами распараллеливания
Кроссплатформенность и легкая переносимость

кода
Широкие возможности при простоте использования
ВыводыПростой низкоуровневый фреймворк для работы с потокамиПреимущества удобства и скорости работы по сравнению с классическими ООП-подходами распараллеливанияКроссплатформенность

Слайд 16Благодарю за внимание! Ваши вопросы?
Докладчик: Петрусь Андрей Сергеевич
andrew@madappgang.com
iOS-developer, MadAppGang

Благодарю за внимание! Ваши вопросы?Докладчик: Петрусь Андрей Сергеевичandrew@madappgang.comiOS-developer, MadAppGang

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика