Your SlideShare is downloading. ×
Pune-Cocoa: Blocks and GCD
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Pune-Cocoa: Blocks and GCD

622

Published on

Blocks is a cool concept and is very much needed for performance improvements and responsiveness. GCD helps run blocks effortlessly by scheduling on a desired queue, priority and lots more.

Blocks is a cool concept and is very much needed for performance improvements and responsiveness. GCD helps run blocks effortlessly by scheduling on a desired queue, priority and lots more.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
622
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
22
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Blocks & GCD
  • 2. • History• GCD• Queues• Blocks• Syntax and Examples• Demo
  • 3. Grand Central Dispatch
  • 4. History• Historically, microprocessors gained speed by running at faster and faster clock speeds; and software become automatically faster.• Processor clock speeds began to reach a limit because power consumption and heat became problematic, particularly for mobile systems.• CPU vendors shifted their focus from increasing clock speed to putting multiple processor cores into a single CPU• software no longer automatically becomes
  • 5. History• We required threads to make use of multithreading, NSThread is not that simple to use for each and every small data processing task, need locks.• NSOprationQueue was an alternative, but not so lightweight and required some boilerplate code• Or use o performSelectorInBackground:withObject: o performSelectorOnMainThread:withObject:wait UntilDone:
  • 6. Solution• The dominant model for concurrent programming—threads and locks—is too difficult to be worth the effort for most applications. To write a an efficient application for multi- core using threads, you need to: – Break each logical task down to a single thread Lock data that is in danger of being changed by two threads at once Build a thread manager to run only as many threads as there are available cores Hope that no other applications running on the system are using the processor cores
  • 7. How?• GCD shifts the responsibility for managing threads and their execution from applications to the operating system.• Units of work are described as blocks in your code, while queues are used to organize blocks based on how you believe they need to be executed.• GCD has a multicore execution engine that reads the queues created by each application and assigns work from the queues to the threads it is managing.
  • 8. Hooray!• Apple introduced Grand Central Dispatch and Blocks for SnowLeopard; and decided to remove support for PPC.• Apple came up with multicore HandHelds, soon after blocks and GCD were announced for iOS
  • 9. Programming Model• Blocks are used as a Unit of Work• Dispatch Objects - reference counted, uses dispatch_retain() and dispatch_release()• Queues (four system defined) are used to execute Blocks – Serial / Concurrent• Event Sources – associate blocks/queues to asynchronous event source e.g. timer, socket• A thread-pool of max 512 threads can be maintained, old threads are reused
  • 10. Queues
  • 11. Queues• Most of the intelligence behind Grand Central Dispatch is provided by queues. – Global Queues – Private Queues – Main Queue• A queue can execute operation in Sync or Async
  • 12. Queuesdispatch_queue_t dispatch_get_global_queue( long priority, unsigned long flags);DISPATCH_QUEUE_PRIORITY_HIGHDISPATCH_QUEUE_PRIORITY_DEFAULTDISPATCH_QUEUE_PRIORITY_LOWdispatch_queue_t dispatch_queue_create( const char *label dispatch_queue_attr_t attr);dispatch_queue_t dispatch_get_main_queue(void);
  • 13. Using Queues
  • 14. Using Queues
  • 15. Using Queues• the block thats submitted with the barrier function doesnt run concurrently with other work on that queue• pointless on a serial queue• non-functional when used on the global queues
  • 16. Blocks
  • 17. Blocks: What is it?• Blocks are a nonstandard extension added by Apple Inc. to the C, C++, and Objective- C programming languages that uses a lambda expression-like syntax to create closures within these languages. Blocks are supported for programs developed for Mac OS X 10.6+ and iOS 4.0+. – wikipedia
  • 18. What is it?• A block is an anonymous inline collection of code that: – Has a typed argument list just like a function
  • 19. What is it?• A block is an anonymous inline collection of code that: – Has an inferred or declared return type
  • 20. What is it?• A block is an anonymous inline collection of code that: – Can capture state from the lexical scope within which it is defined
  • 21. What is it?• A block is an anonymous inline collection of code that: – Can optionally modify the state of the lexical scope
  • 22. What is it?• A block is an anonymous inline collection of code that: – Can share the potential for modification with other blocks defined within the same lexical scope • Multiple blocks in the same lexical score shares the same instance. • If a variable is __block is is passed as reference and hence can be accessed by multiple blocks
  • 23. What is it?• A block is an anonymous inline collection of code that: – Can continue to share and modify state defined within the lexical scope (the stack frame) after the lexical scope (the stack frame) has been destroyed • Each __block has a __strong reference hence even if current stack frame is destroyed it can work on that variable. • The compiler and runtime arrange that all variables referenced from the block are preserved for the life of all copies of the block
  • 24. What is it?• You can copy a block and even pass it to other threads for deferred execution (or, within its own thread, to a runloop). (use Block_copy instead)
  • 25. Blocks Usage• Used for lightweight task, Blocks represent typically small, self-contained pieces of code.• They’re particularly useful as a means of encapsulating units of work that may be executed concurrently, or over items in a collection, or as a callback when another operation has finished.
  • 26. Small, Self contained
  • 27. Work over over items in a collection
  • 28. Callbacks• Asynchronus Network tasks • Snippet from MKNetworkEngine.m by @mugunthkumar
  • 29. Usage in cocoa• Asynchronus UI tasks
  • 30. Under the Hood• Extracted from "Pro Multithreading and Memory Management for iOS and OS X with ARC, Grand Central Dispatch, and Blocks" by Kazuki Sakamoto and Tomohiko Furumotovoid (^blk)(void) = ^{printf("Blockn");};is translated tostatic void __main_block_func_0(struct __main_block_impl_0*__cself) {printf("Blockn"); }by compiler, there is lot of other boilerplatecode created to help invocation of this methodand other blocks operation (sharing a variable,copy, pass by reference)
  • 31. Dispatch Source
  • 32. Dispatch Source• dispatch source is an object which monitors for one of following event : – Mach port send right state changes. – Mach port receive right state changes. – External process state change. – File descriptor ready for read. – File descriptor ready for write. – Filesystem node event. (kqueue) – POSIX signal. – Custom timer. – Custom event.
  • 33. Dispatch Source example
  • 34. Thank You!• Sources: – Apple Documentation – libdispatch Wiki – CGD Technology Brief Prepared for PuneCocoa By Prashant Rane (@the69geeks)

×