![Page 1: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/1.jpg)
Grand Central Dispatch
Sri Teja BasavaCSCI 5528: Foundations of Software Engineering
Spring ’10
1
![Page 2: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/2.jpg)
New Technologies in Snow Leopard
2
![Page 3: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/3.jpg)
Grand Central Dispatch
• An Apple technology to optimize application support for systems with multicore processors
• Released with Mac OS X Snow Leopard (v10.6)
• Shifts responsibility for managing threads and their execution from applications to the operating system
3
![Page 4: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/4.jpg)
Grand Central Dispatch
• Provides a new programming model consisting of blocks and queues
• GCD consists of a set of extensions to the C language, an API, and a runtime engine
• Apple released the source code for libdispatch, the library providing the implementation of GCD’s services, under the Apache License on September 10, 2009
4
![Page 5: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/5.jpg)
Traditional Approach• To create an efficient application for multi-core
using threads, a programmer must
• Break each logical task down to a single thread
• Lock data that can be modified by two or more threads at the same time
• Implement a thread pool with as many threads as there are available cores
• Hope that no other applications are using the processor cores
5
![Page 6: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/6.jpg)
GCD Approach• To create an efficient application for multi-core
using GCD, a programmer needs to
• Identify units of work (think tasks) and describe them using blocks
• Assign blocks to different queues based on how they need to be executed
• No need to worry about threads, thread managers, or locking data!
6
![Page 7: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/7.jpg)
Benefits• Improved responsiveness
• Dynamic scaling
• Better processor utilization
• Smaller & cleaner code
7
![Page 8: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/8.jpg)
Block Objects• An extension to C, C++, and Objective-C
• Allow programmers to define self-contained units of work
• Similar to function pointers, but far more powerful
• Block objects can be defined inline, as “anonymous functions”
• Block objects can refer to variables defined outside of their bodies
• Internally implemented as a function pointer plus context data and optional support routines
8
![Page 9: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/9.jpg)
Block Objects• Similar to function pointers, but far more powerful
• Block objects can be defined inline, as “anonymous functions”
• Block objects can refer to variables defined outside of their bodies
9
void (^blk)(void);!blk = ^{ printf("Hello World!\n"); };!blk(); /* prints Hello World! */
Example 1
![Page 10: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/10.jpg)
Block Objects• Similar to function pointers, but far more powerful
• Block objects can be defined inline, as “anonymous functions”
• Block objects can refer to variables defined outside of their bodies
10
int (^sum)(int, int);!sum = ^(int x, int y){ return x + y; };!printf("%d\n", sum(4, 5)); /* prints 9 */
Example 2
The compiler infers the return type of the block literal!
![Page 11: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/11.jpg)
Block Objects• Similar to function pointers, but far more powerful
• Block objects can be defined inline, as “anonymous functions”
• Block objects can refer to variables defined outside of their bodies
11
int (^addtovar)(int);int var = 5;!addtovar = ^(int x){ return x + var; };!var = 6;!printf("%d\n", addtovar(4)); /* prints 9 */
Example 3
The block captures a read-only copy of var.
![Page 12: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/12.jpg)
Block Objects• Similar to function pointers, but far more powerful
• Block objects can be defined inline, as “anonymous functions”
• Block objects can refer to variables defined outside of their bodies
12
int (^addtovar)(int);__block int var = 5;!addtovar = ^(int x){ return x + var; };!var = 6;!printf("%d\n", addtovar(4)); /* prints 10 */
Example 4
__block storage type enable var to be edited inside the body.
![Page 13: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/13.jpg)
Dispatch Queues• Blocks are scheduled for execution by placing
them on various system- or user-defined dispatch queues
• Blocks are added and removed from queues using atomic operations
• 3 types of dispatch queues
• Global concurrent queues
• Private serial queues
• Main queue
13
![Page 14: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/14.jpg)
Global Queues• GCD provides a set of global concurrent queues
to each process
• Each queue has an associated priority
• Each queue is associated with a pool of threads, created as needed based on the work to be done and the load on the rest of the operating system
14
![Page 15: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/15.jpg)
Global Queues• For each global concurrent queue with blocks
• GCD searches for an available thread at the appropriate priority
• If a thread is found, GCD dequeues a block (on a FIFO basis) and assigns it for execution on the thread
• When the thread completes the work and becomes available, GCD dequeues another block (if available) for execution on the thread
15
![Page 16: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/16.jpg)
Global Queues
16
Example 4
dispatch_async enqueues the specified block on the default queue and returns immediately.
dispatch_queue_t q_default;
/* get default queue */q_default = dispatch_get_global_queue(0, 0); !dispatch_async(q_default, ^{ work(); });
![Page 17: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/17.jpg)
Global Queues
17
Example 5
dispatch_apply can be used to parallelize for loops. It is synchronous.
#define COUNT 128__block double result[COUNT];dispatch_apply(COUNT, q_default, ^(size_t i) {! result[i] = complex_calculation(i);});double sum = 0;for (int i=0; i < COUNT; i++) sum += result[i];
![Page 18: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/18.jpg)
Private Queues• Programmers can create their own private serial
queues to serialize access to data structures
• Blocks in a private queue are executed one after another, never concurrently
• Each private queue has an associated target global concurrent queue, initially set to the default queue
18
“islands of serialization in a sea of concurrency”
![Page 19: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/19.jpg)
Private Queues• When a developer adds a block to an empty serial
queue
• The private queue is added to the target queue
• The private queue is treated in the same way as blocks added directly to the the target queue; it is executed using the same policy and mechanism as these blocks
• When the private queue is executed, it dequeues each block (on a FIFO basis) and executes them one after another
19
“islands of serialization in a sea of concurrency”
![Page 20: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/20.jpg)
Private Queues
20
Example 6
The private queue q_sum is used to serialize access to shared variable sum.
#define COUNT 128__block double sum = 0;dispatch_queue_t q_sum = dispatch_queue_create("com.example.sum", NULL);dispatch_apply(COUNT, q_default, ^(size_t i){! double x = complex_calculation(i);! dispatch_async(q_sum, ^{ sum += x; });});dispatch_release(q_sum);
“islands of serialization in a sea of concurrency”
![Page 21: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/21.jpg)
Main Queue• Associated with the main thread of every process
is a unique, well-known main-queue
• Main queue is always serial
• Typically associated with CFRunLoop (for Core Foundation) or NSRunLoop (for Cocoa) on the main thread. Both must drain the main queue at the end of their work cycles.
21
![Page 22: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/22.jpg)
Event Sources• Programmers can assign blocks as handlers to
event sources such as timers, signals, file descriptors and network sockets
• When an event triggers, GCD schedules the associated handler on a queue if it is not currently running. GCD will coalesce pending events if it is.
• The handler is never run more than once at a time
22
![Page 23: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/23.jpg)
Example• Algorithm for computing approximate value of PI
• Multi-threaded implementation using pthreads (shown in class before)
• Multi-threaded implementation using GCB
23
![Page 24: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/24.jpg)
Example• Compiled using gcc -O3
• Runtime measurement using time utility
24
real 0m9.454suser 0m17.976ssys 0m0.041s
real 0m10.642suser 0m20.479ssys 0m0.036s
pthread GCD
![Page 25: Grand Central Dispatch - Computer Sciencekena/classes/5828/s10/... · Grand Central Dispatch • Provides a new programming model consisting of blocks and queues • GCD consists](https://reader033.vdocument.in/reader033/viewer/2022042713/5faf481e86abce07c93857ff/html5/thumbnails/25.jpg)
Questions?
25