<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ios并发编程 on adolsai's echo</title><link>https://adolsai.com/tag/ios%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/</link><description>Recent content in ios并发编程 on adolsai's echo</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Fri, 07 Aug 2015 18:05:45 +0800</lastBuildDate><atom:link href="https://adolsai.com/tag/ios%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>Concurrency Programming Guide 5 Dispatch Sources</title><link>https://adolsai.com/archives/Concurrency-Programming-Guide-5-Dispatch-Sources.html</link><pubDate>Thu, 06 Aug 2015 10:58:00 +0800</pubDate><guid>https://adolsai.com/archives/Concurrency-Programming-Guide-5-Dispatch-Sources.html</guid><description/></item><item><title>Concurrency Programming Guide 4 Dispatch Queues</title><link>https://adolsai.com/archives/Concurrency-Programming-Guide-4-Dispatch-Queues.html</link><pubDate>Fri, 31 Jul 2015 00:39:00 +0800</pubDate><guid>https://adolsai.com/archives/Concurrency-Programming-Guide-4-Dispatch-Queues.html</guid><description>&lt;h1 id="dispatch-queues"&gt;Dispatch Queues&lt;/h1&gt;&#10;&lt;h2 id="type-of-dispatch-queues"&gt;type of Dispatch Queues&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;类型&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;描述&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;限制&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Serial&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;也叫&lt;em&gt;private dispatch queue&lt;/em&gt;，串行执行queue上的每一个task。 每一个task都在独立的线程里运行，由dispatch queue统一管理。经常用来控制对特定资源的访问（如临界资源）。&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;木有限制，你可以创建任意多个的serial dispatch queue，他们之间是并行的。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Concurrent&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;也叫&lt;em&gt;global diapatch queue&lt;/em&gt;，并行执行queue里面的每一个task。每一个task都在独立的线程里运行，由dispatch queue统一管理。并行的数量是动态地，由system当前的资源状态决定。&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;concurrent dispatch queue有四个，由系统提供，根据优先级别区分为default、low、high、background。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Main dispatch queue&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;这个diapatch queue在main thread里串行执行task。所以这个queue是关联main thread的run loop的，用来执行dispatch source相关的任务。因为该queue在main thread执行task，所以常用作各任务的同步点&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;全局唯一的特殊serial dispatch queue&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;</description></item><item><title>Concurrency Programming Guide 3 Operation Queues</title><link>https://adolsai.com/archives/Concurrency-Programming-Guide-3-Operation-Queues.html</link><pubDate>Tue, 28 Jul 2015 19:55:00 +0800</pubDate><guid>https://adolsai.com/archives/Concurrency-Programming-Guide-3-Operation-Queues.html</guid><description>&lt;h1 id="operation-queues"&gt;Operation Queues&lt;/h1&gt;&#10;&lt;h2 id="与gcd对比"&gt;与&lt;strong&gt;GCD&lt;/strong&gt;对比&lt;/h2&gt;&#10;&lt;ol start="0"&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;稍微慢一点点，因为是&lt;strong&gt;NSOperation&lt;/strong&gt;和&lt;strong&gt;NSOperationQueue&lt;/strong&gt;基于&lt;strong&gt;GCD&lt;/strong&gt;的(在Mac OS X v10.6 &amp;amp; iOS 4之后&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;);&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Operation Queue可以实现operation的dependency功能，使之在制定的operation完成之后再运行。而且指定线程可以在不同的operation queue里跑;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;可以重用、取消、暂停operation;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;可以使用&lt;strong&gt;KVO&lt;/strong&gt;，方便监控operation的运行状态;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Operation既可以直接调用&lt;code&gt;start&lt;/code&gt;方法独立运行也可以add到operation queue里面跑;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;可以使用&lt;code&gt;setCompletionBlock:&lt;/code&gt;设置一个operation执行完之后的动作;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;可以定义operation优先级别&lt;code&gt;setQueuePriority:&lt;/code&gt;;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;</description></item><item><title>Concurrency Programming Guide 2 Concurrency and Application Design</title><link>https://adolsai.com/archives/Concurrency-Programming-Guide-2-Concurrency-and-Application-Design.html</link><pubDate>Tue, 28 Jul 2015 18:02:00 +0800</pubDate><guid>https://adolsai.com/archives/Concurrency-Programming-Guide-2-Concurrency-and-Application-Design.html</guid><description>&lt;h1 id="concurrency-and-application-design"&gt;Concurrency and Application Design&lt;/h1&gt;&#10;&lt;p&gt;关于iOS多线程先看这个：&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;a href="http://geeklu.com/2012/02/thread/"&gt;Mac&amp;amp;iOS之多线程&lt;/a&gt;&#10;###一.线程概述&lt;/p&gt;&#10;&lt;p&gt;有些程序是一条直线，起点到终点；有些程序是一个圆，不断循环，直到将它切断。直线的如简单的Hello World，运行打印完,它的生命周期便结束了，像昙花一现那样；圆如操作系统，一直运行直到你关机。&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item><item><title>Concurrency Programming Guide 1 Glossary</title><link>https://adolsai.com/archives/Concurrency-Programming-Guide-1-Glossary.html</link><pubDate>Tue, 28 Jul 2015 14:05:00 +0800</pubDate><guid>https://adolsai.com/archives/Concurrency-Programming-Guide-1-Glossary.html</guid><description>&lt;h1 id="术语表"&gt;术语表&lt;/h1&gt;&#10;&lt;h4 id="application"&gt;application&lt;/h4&gt;&#10;&lt;p&gt;我们常说的APP，包含用户互交界面的应用程序&lt;/p&gt;&#10;&lt;h4 id="asynchronous-design-approach"&gt;asynchronous design approach&lt;/h4&gt;&#10;&lt;p&gt;异步设计方法&lt;/p&gt;&#10;&lt;p&gt;asynchonous是指让代码跑在别的线程上，而不是发起的线程上。使用多核处理器资源来提高程序的运行效率。&lt;/p&gt;&#10;&lt;h4 id="block-object"&gt;block object&lt;/h4&gt;&#10;&lt;p&gt;一种C结构体，包含了代码和相关数据。使用block可以很方便的把一段包含数据的代码交给其他线程执行。关于block的具体介绍见 &lt;em&gt;Block Programing Guide&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>