ÔÚ˵GCD֮ǰ£¬ÏÈ˵¼¸¸öºËÐĵĸÅÄî
ÈÎÎñ£ºÖ´ÐÐʲô²Ù×÷
¶ÓÁУºÓÃÀ´´æ·ÅÈÎÎñ
1 - ²¢·¢¶ÓÁУ¨Concurrent Dispatch Queue£© ¿ÉÒÔÈöà¸öÈÎÎñ²¢·¢£¨Í¬Ê±£©Ö´ÐУ¨×Ô¶¯¿ªÆô¶à¸öÏß³ÌͬʱִÐÐÈÎÎñ£© ²¢·¢¹¦ÄÜÖ»ÓÐÔÚÒì²½£¨dispatch_async£©º¯ÊýϲÅÓÐЧ
2 - ´®ÐжÓÁУ¨Serial Dispatch Queue£©
ÈÃÈÎÎñÒ»¸ö½Ó×ÅÒ»¸öµØÖ´ÐУ¨Ò»¸öÈÎÎñÖ´ÐÐÍê±Ïºó£¬ÔÙÖ´ÐÐÏÂÒ»¸öÈÎÎñ£© |
ͬ²½ºÍÒì²½µÄÇø±ð
ͬ²½£ºÖ»ÄÜÔÚµ±Ç°Ïß³ÌÖÐÖ´ÐÐÈÎÎñ£¬²»¾ß±¸¿ªÆôÐÂÏ̵߳ÄÄÜÁ¦
Òì²½£º¿ÉÒÔÔÚеÄÏß³ÌÖÐÖ´ÐÐÈÎÎñ£¬¾ß±¸¿ªÆôÐÂÏ̵߳ÄÄÜÁ¦ |
GCDʹÓò½Öè
Ò»¡¢´´½¨ÈÎÎñ
¶þ¡¢½«ÈÎÎñÌí¼Óµ½¶ÓÁÐÖÐ
GCD»á×Ô¶¯½«¶ÓÁÐÖеÄÈÎÎñÈ¡³ö£¬·Åµ½¶ÔÓ¦µÄÏß³ÌÖÐÖ´ÐÐ
ÈÎÎñµÄÈ¡³ö×ñѶÓÁеÄFIFOÔÔò£ºÏȽøÏȳö£¬ºó½øºó³ö
GCDÏ̶߳ÓÁеĴ´½¨·½·¨
1¡¢´´½¨Ò»¸ö´®ÐжÓÁÐ
/** * ´´½¨Ò»¸ö´®ÐжÓÁÐ * * @param "Mazy" ¶ÓÁеıêʾ·û * @param DISPATCH_QUEUE_SERIAL ´®ÐжÓÁÐ DISPATCH_QUEUE_CONCURRENT ²¢·¢¶ÓÁÐ * * @return ·µ»Ø´®ÐжÓÁÐ */ dispatch_queue_t serialQueue = dispatch_queue_create("Mazy", DISPATCH_QUEUE_SERIAL); |
2¡¢´´½¨Ò»¸ö²¢·¢¶ÓÁÐ
/** * ´´½¨Ò»¸ö²¢·¢¶ÓÁÐ * * @param "Mazy" ¶ÓÁеıêʾ·û * @param DISPATCH_QUEUE_CONCURRENT ²¢·¢¶ÓÁÐ * * @return ·µ»Ø²¢·¢¶ÓÁÐ */ dispatch_queue_t concurrentQueue = dispatch_queue_create("Mazy", DISPATCH_QUEUE_CONCURRENT); |
3¡¢»ñµÃÈ«¾Ö²¢·¢¶ÓÁÐ
/** * »ñµÃÈ«¾Ö²¢·¢¶ÓÁÐ * * @param DISPATCH_QUEUE_PRIORITY_DEFAULT Ï̶߳ÓÁеÄÓÅÏȼ¶
DISPATCH_QUEUE_PRIORITY_HIGH 2 ¸ß
DISPATCH_QUEUE_PRIORITY_DEFAULT 0 Ò»°ã ĬÈÏ
DISPATCH_QUEUE_PRIORITY_LOW (-2) µÍ
DISPATCH_QUEUE_PRIORITY_BACKGROUND ºÜµÍ
* @param 0 ϵͳ±£Áô²ÎÊý
*
* @return ·µ»ØÈ«¾Ö²¢·¢¶ÓÁÐ
*/
dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
0); |
3¡¢»ñµÃÖ÷¶ÓÁÐ
/** * »ñµÃÖ÷¶ÓÁÐ * * @return ·µ»ØÖ÷Ï̶߳ÓÁÐ */ dispatch_queue_t mainQueue = dispatch_get_main_queue(); |
ͬ²½/Òì²½ + ´®ÐÐ/²¢·¢¶ÓÁеÄ×éºÏ
1¡¢Í¬²½ + ´®ÐжÓÁÐ
// ͬ²½ + ´®ÐжÓÁУº²»»á¿ªÆôеÄỊ̈߳¬ÔÚµ±Ç°Ïß³ÌÖ´ÐÐÈÎÎñ¡£ÈÎÎñÊÇ´®Ðеģ¬Ö´ÐÐÍêÒ»¸öÈÎÎñ£¬ÔÙÖ´ÐÐÏÂÒ»¸öÈÎÎñ -(void)sync_serial { // ´´½¨Ò»¸ö´®ÐжÓÁÐ dispatch_queue_t queue = dispatch_queue_create("Mazy", DISPATCH_QUEUE_SERIAL); // ͬ²½Ö´ÐÐÈý¸öÈÎÎñ dispatch_sync(queue, ^{ NSLog(@"1 %@",[NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"2 %@",[NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"3 %@",[NSThread currentThread]); }); } |
´òÓ¡½á¹û£º

×ܽ᣺ûÓд´½¨ÐÂỊ̈߳¬Ö÷Ïß³ÌÖ´ÐÐÈÎÎñ£¬ÈÎÎñ´®ÐÐÖ´ÐÐ
2¡¢Òì²½ + ´®ÐжÓÁÐ
// Òì²½ + ´®ÐжÓÁУº¿ªÆôеÄỊ̈߳¬µ«Ö»¿ªÆôÒ»Ìõ -(void)async_serial { // ´´½¨Ò»¸ö´®ÐжÓÁÐ dispatch_queue_t queue = dispatch_queue_create("Mazy", DISPATCH_QUEUE_SERIAL); // Òì²½Ö´ÐÐÈý¸öÈÎÎñ dispatch_async(queue, ^{ NSLog(@"1 %@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"2 %@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"3 %@",[NSThread currentThread]); }); } |
´òÓ¡½á¹û£º

×ܽ᣺¿ªÆôÁËÒ»ÌõỊ̈߳¬ÈÎÎñ´®ÐÐÖ´ÐÐ
3¡¢Í¬²½ + ²¢·¢¶ÓÁÐ
// ͬ²½ + ²¢·¢¶ÓÁУº²»»á¿ªÆôеÄÏß³Ì -(void)sync_concurrent { // ´´½¨Ò»¸öÈ«¾Ö²¢·¢¶ÓÁÐ dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // ͬ²½Ö´ÐÐÈý¸öÈÎÎñ dispatch_sync(queue, ^{ NSLog(@"1 %@",[NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"2 %@",[NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"3 %@",[NSThread currentThread]); }); } |
´òÓ¡½á¹û£º

×ܽ᣺²»¿ªÆôÐÂỊ̈߳¬Ö÷Ïß³ÌÖ´ÐÐÈÎÎñ£¬ÈÎÎñÒ²ÊÇ˳ÐòÖ´ÐÐ
4¡¢Òì²½ + ²¢·¢¶ÓÁÐ
// Òì²½ + ²¢·¢¶ÓÁУºÍ¬Ê±¿ªÆô¶àÌõÏß³Ì -(void)async_concurrent { // ´´½¨Ò»¸öÈ«¾Ö²¢·¢¶ÓÁÐ dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // Òì²½Ö´ÐÐÈý¸öÈÎÎñ dispatch_async(queue, ^{ NSLog(@"1 %@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"2 %@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"3 %@",[NSThread currentThread]); }); } |
´òÓ¡½á¹û£º

×ܽ᣺¿ªÆô¶àÌõỊ̈߳¬²¢·¢Ö´ÐÐÈÎÎñ
GCDÏß³ÌÖ®¼äµÄͨÐÅ
´Ó×ÓÏ̻߳ص½Ö÷Ïß³Ì
´Ó×ÓÏ̻߳ص½Ö÷Ïß³Ì dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // Ö´ÐкÄʱµÄÒì²½²Ù×÷... dispatch_async(dispatch_get_main_queue(), ^{ // »Øµ½Ö÷Ị̈߳¬Ö´ÐÐUIˢвÙ×÷ }); }); |
Ïß³ÌÖ®¼äµÄͨОßÌåʵÏÖʵÀý
// ´´½¨ Òì²½ È«¾Ö²¢·¢¶ÓÁÐ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // ͼƬµÄÍøÂç·¾¶ NSURL *url = [NSURL URLWithString:@"http://xxx.jpg"];
// ¼ÓÔØÍ¼Æ¬
NSData *data = [NSData dataWithContentsOfURL:url];
// Éú³ÉͼƬ
UIImage *image = [UIImage imageWithData:data];
// »Øµ½Ö÷Ïß³ÌÉèÖÃͼƬ
dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image = image;
});
}); |
GCDµÄÆäËûʹÓÃ
ÑÓ³ÙÖ´ÐÐ
/** * ÑÓ³ÙÖ´ÐÐ */ -(void)delay { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ NSLog(@"---ÎÒ±»ÑÓ³ÙÁË3ÃëÖ´ÐÐ---"); }); } |
ÆäËûÑÓ³ÙÖ´Ðз½·¨
// method 1 [self performSelector:@selector(do_method) withObject:nil afterDelay:3.0];
// method 2
[NSTimer scheduledTimerWithTimeInterval:3.0 target:self
selector:@selector(do_method) userInfo:nil repeats:NO]; |
Ö»Ö´ÐÐÒ»´Î£¨ÓÃÓÚʵÏÖµ¥Àýģʽ£©
/** * Ö»Ö´ÐÐÒ»´Î */ -(void)onlyOnce { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSLog(@"---ÎÒÖ»»á±»Ö´ÐÐÒ»´Î---"); }); } |
¿ìËÙ±éÀú
/** * ¿ìËÙ±éÀú */ -(void)apply { // ´´½¨Ò»¸öÈ«¾Ö²¢·¢¶ÓÁÐ dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); NSInteger count = 10; dispatch_apply(count, queue, ^(size_t index) { NSLog(@"%zd--%@",index,[NSThread currentThread]); }); } |
´òÓ¡½á¹û£º

×ܽ᣺¿ªÆô¶àÌõÏß³ÌÖ´ÐÐÈÎÎñ£¬ËÙ¶ÈÔ¶±È£¨for¡in¡£© ±éÀú¿ì£¬¶ÔÓÚÎÞÐòµÄ±éÀú£¬´Ë·½·¨±È½ÏºÏÊÊ
´´½¨Ïß³ÌȺ×é
ÀýÈçͬһ¸öÎļþ·Ö¶ÎÏÂÔØ£¬´ýËùÓзֶÎÈÎÎñÏÂÔØÍê³Éºó£¬ºÏ²¢ÈÎÎñ
/** * ´´½¨Ïß³ÌȺ×é */ -(void)group { // ´´½¨Ò»¸öÈ«¾Ö²¢·¢¶ÓÁÐ dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // ´´½¨Ò»¸ö¶ÓÁÐ×é dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{
NSLog(@"ÎÒÊÇÈÎÎñ-1 %@",[NSThread currentThread]);
});
dispatch_group_async(group, queue, ^{
NSLog(@"ÎÒÊÇÈÎÎñ-2 %@",[NSThread currentThread]);
});
dispatch_group_async(group, queue, ^{
NSLog(@"ÎÒÊÇÈÎÎñ-3 %@",[NSThread currentThread]);
});
// ´ýȺ×éÖеÄÿ¸öÈÎÎñÖ´ÐÐÍê³Éºó£¬Ö´Ðд˷½·¨
dispatch_group_notify(group, queue, ^{
NSLog(@"ÎÒÊÇÖÕ¼«ÈÎÎñ£¬Ö»ÓÐÔÚgroupÀïÃæµÄÈÎÎñÖ´ÐÐÍê±Ïºó²ÅÖ´ÐÐ");
NSLog(@"%@",[NSThread currentThread]);
});
} |
´òÓ¡½á¹û£º

×ܽ᣺¿ªÆô¶àÌõỊ̈߳¬È¥Ö´ÐÐȺ×éÖеÄÈÎÎñ£¬µ±Èº×éÄÚµÄÈý¸öÈÎÎñÖ´ÐÐÍê±Ïºó£¬ÔÙÈ¥Ö´ÐÐnotifyÀïÃæµÄÈÎÎñ
´´½¨ÆÁÕÏÏ̶߳ÓÁÐ
/** * ´´½¨ÆÁÕÏÏ̶߳ÓÁÐ */ -(void)barrier { // ´´½¨Ò»¸ö²¢·¢¶ÓÁÐ dispatch_queue_t queue = dispatch_queue_create("Mazy", DISPATCH_QUEUE_CONCURRENT); // ´´½¨ËĸöÒì²½ÈÎÎñ dispatch_async(queue, ^{ NSLog(@"ÎÒÊÇÈÎÎñ-1 %@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"ÎÒÊÇÈÎÎñ-2 %@",[NSThread currentThread]); });
// ´´½¨ÆÁÕÏÏ̶߳ÓÁÐ
dispatch_barrier_async(queue, ^{
NSLog(@"----barrier-----%@", [NSThread
currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"ÎÒÊÇÈÎÎñ-3 %@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"ÎÒÊÇÈÎÎñ-4 %@",[NSThread currentThread]);
});
} |
´òÓ¡½á¹û£º

×ܽ᣺»áÓÅÏÈÖ´ÐÐÆÁÕÏÇ°ÃæµÄÈÎÎñ£¬µ±ÆÁÕÏǰµÄËùÓÐÈÎÎñÖ´ÐÐÍê±Ïºó£¬ÔÙÈ¥Ö´ÐкóÃæµÄÈÎ
×¢Ò⣺ʹÓÃsyncͬ²½º¯ÊýÍùµ±Ç°´®ÐжÓÁÐÖÐÌí¼ÓÈÎÎñ£¬»á¿¨×¡µ±Ç°µÄ´®ÐжÓÁÐ
|