iOS Concurrency Programming Guide
iOS ºÍ Mac OS ´«Í³µÄ²¢·¢±à³ÌÄ£ÐÍÊÇỊ̈߳¬²»¹ýÏß³ÌÄ£ÐÍÉìËõÐÔ²»Ç¿£¬¶øÇÒ±àдÕýÈ·µÄÏ̴߳úÂëÒ²²»ÈÝÒס£Mac OS ºÍ iOS ²ÉÈ¡ asynchronous design approach À´½â¾ö²¢·¢µÄÎÊÌâ¡£
ÒýÈëµÄÒì²½¼¼ÊõÓÐÁ½¸ö£º
Grand Central Dispatch£ºÏµÍ³¹ÜÀíỊ̈߳¬Äã²»ÐèÒª±àдÏ̴߳úÂë¡£Ö»Ð趨ÒåÏëÒªÖ´ÐеÄÈÎÎñ£¬È»ºóÌí¼Óµ½Êʵ±µÄdispatch queue¡£Grand Central Dispatch»á¸ºÔð´´½¨Ï̺߳͵÷¶ÈÄãµÄÈÎÎñ¡£ÏµÍ³Ö±½ÓÌṩÏ̹߳ÜÀí£¬±ÈÓ¦ÓÃʵÏÖ¸ü¼Ó¸ßЧ¡£
Operation Queue£ºObjective-C¶ÔÏó£¬ÀàËÆÓÚdispatch queue¡£Ä㶨ÒåÏëÒªÖ´ÐеÄÈÎÎñ£¬²¢Ìí¼ÓÈÎÎñµ½operation queue£¬ºóÕ߸ºÔðµ÷¶ÈºÍÖ´ÐÐÕâЩÈÎÎñ¡£ºÍGrand Central DispatchÒ»Ñù£¬Operation QueueÒ²¹ÜÀíÁËỊ̈߳¬¸ü¼Ó¸ßЧ¡£
Dispatch Queue
»ùÓÚCµÄÖ´ÐÐ×Ô¶¨ÒåÈÎÎñ»úÖÆ¡£dispatch queue°´ÏȽøÏȳöµÄ˳Ðò£¬´®Ðлò²¢·¢µØÖ´ÐÐÈÎÎñ¡£serial dispaptch queueÒ»´ÎÖ»ÄÜÖ´ÐÐÒ»¸öÈÎÎñ£¬Ö±½Óµ±Ç°ÈÎÎñÍê³É²Å¿ªÊ¼³öÁв¢Æô¶¯ÏÂÒ»¸öÈÎÎñ¡£¶øconcurrent dispatch queueÔò¾¡¿ÉÄÜ¶àµØÆô¶¯ÈÎÎñ²¢·¢Ö´ÐС£
Óŵ㣺
Ö±¹Û¶ø¼òµ¥µÄ±à³Ì½Ó¿Ú
Ìṩ×Ô¶¯ºÍÕûÌåµÄÏ̳߳عÜÀí
Ìṩ»ã±à¼¶µ÷ÓŵÄËÙ¶È
¸ü¼Ó¸ßЧµØÊ¹ÓÃÄÚ´æ
²»»átrapÄÚºËunder load
Òì²½·ÖÅÉÈÎÎñµ½dispatch queue²»»áµ¼ÖÂqueueËÀËø
ÉìËõÐÔÇ¿
serial dispatch queue±ÈËøºÍÆäËüͬ²½ÔÓï¸ü¼Ó¸ßЧ
Dispatch Sources
Dispatch Sources ÊÇ»ùÓÚCµÄϵͳʼþÒì²½´¦Àí»úÖÆ¡£Ò»¸öDispatch Source·â×°ÁËÒ»¸öÌØ¶¨ÀàÐ͵Äϵͳʼþ£¬µ±Ê¼þ·¢ÉúʱÌá½»Ò»¸öÌØ¶¨µÄblock¶ÔÏó»òº¯Êýµ½dispatch queue¡£
Äã¿ÉÒÔʹÓÃDispatch Sources¼à¿ØÒÔÏÂÀàÐ͵Äϵͳʼþ£º
¶¨Ê±Æ÷
ÐźŴ¦ÀíÆ÷
ÃèÊö·ûÏà¹ØµÄʼþ
½ø³ÌÏà¹ØµÄʼþ
Mach portʼþ
Äã´¥·¢µÄ×Ô¶¨Òåʼþ
Operation Queues
Operation QueuesÊÇCocoa°æ±¾µÄ²¢·¢dispatch queue£¬ÓÉ NSOperationQueue ÀàʵÏÖ¡£dispatch queue×ÜÊǰ´ÏȽøÏȳöµÄ˳ÐòÖ´ÐÐÈÎÎñ£¬¶ø Operation Queues ÔÚÈ·¶¨ÈÎÎñÖ´ÐÐ˳Ðòʱ£¬»¹»á¿¼ÂÇÆäËüÒòËØ¡£×îÖ÷ÒªµÄÒ»¸öÒòËØÊÇÖ¸¶¨ÈÎÎñÊÇ·ñÒÀÀµÓÚÁíÒ»¸öÈÎÎñµÄÍê³É¡£ÄãÔÚ¶¨ÒåÈÎÎñʱÅäÖÃÒÀÀµÐÔ£¬´Ó¶ø´´½¨¸´ÔÓµÄÈÎÎñÖ´ÐÐ˳Ðòͼ¡£
Ìá½»µ½Operation QueuesµÄÈÎÎñ±ØÐëÊÇ NSOperation ¶ÔÏó£¬operation object·â×°ÁËÄãÒªÖ´ÐеŤ×÷£¬ÒÔ¼°ËùÐèµÄËùÓÐÊý¾Ý¡£ÓÉÓÚ NSOperation ÊÇÒ»¸ö³éÏó»ùÀ࣬ͨ³£ÄãÐèҪʵÏÖÒ»¸ö×Ô¶¨Òå×ÓÀàÀ´Ö´ÐÐÈÎÎñ¡£²»¹ýFoundation framework×Ô´øÁËһЩ¾ßÌå×ÓÀ࣬Äã¿ÉÒÔ´´½¨²¢Ö´ÐÐÏà¹ØµÄÈÎÎñ¡£
Operation objects»á²úÉúkey-value observing(KVO)֪ͨ£¬¶ÔÓÚ¼à¿ØÈÎÎñµÄ½ø³Ì·Ç³£ÓÐÓá£ËäÈ»operation queue×ÜÊDz¢·¢µØÖ´ÐÐÈÎÎñ£¬Äã¿ÉÒÔʹÓÃÒÀÀµ£¬ÔÚÐèҪʱȷ±£Ë³ÐòÖ´ÐС£
Òì²½Éè¼Æ¼¼Êõ
ͨ¹ýÈ·±£Ö÷Ïß³Ì×ÔÓÉÏìÓ¦Óû§Ê¼þ£¬²¢·¢¿ÉÒԺܺõØÌá¸ßÓ¦ÓõÄÏìÓ¦ÐÔ¡£Í¨¹ý½«¹¤×÷·ÖÅäµ½¶àºË£¬»¹ÄÜÌá¸ßÓ¦Óô¦ÀíµÄÐÔÄÜ¡£µ«ÊDz¢·¢Ò²´øÀ´Ò»¶¨µÄ¶îÍ⿪Ïú£¬²¢ÇÒʹ´úÂë¸ü¼Ó¸´ÔÓ£¬¸üÄѱàдºÍµ÷ÊÔ´úÂë¡£
Òò´ËÔÚÓ¦ÓÃÉè¼Æ½×¶Î£¬¾ÍÓ¦¸Ã¿¼ÂDz¢·¢£¬Éè¼ÆÓ¦ÓÃÐèÒªÖ´ÐеÄÈÎÎñ£¬¼°ÈÎÎñËùÐèµÄÊý¾Ý½á¹¹¡£
Operation Queues
»ùÓÚObjective-C£¬Òò´Ë»ùÓÚCocoaµÄÓ¦ÓÃͨ³£»áʹÓÃOperation Queues
Operation Objects
operation object ÊÇ NSOperation ÀàµÄʵÀý£¬·â×°ÁËÓ¦ÓÃÐèÒªÖ´ÐеÄÈÎÎñ£¬ºÍÖ´ÐÐÈÎÎñËùÐèµÄÊý¾Ý¡£NSOperation ±¾ÉíÊdzéÏó»ùÀ࣬ÎÒÃDZØÐëʵÏÖ×ÓÀà¡£Foundation frameworkÌṩÁËÁ½¸ö¾ßÌå×ÓÀ࣬Äã¿ÉÒÔÖ±½ÓʹÓãº