Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit cf56c51

Browse files
author
zhangyanqiang
committed
Site updated: 2018年09月18日 16:17:39
1 parent c3020a5 commit cf56c51

File tree

4 files changed

+27
-10
lines changed

4 files changed

+27
-10
lines changed

‎2018/09/09/进程和线程的区别/index.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868

6969

7070

71-
<meta name="keywords" content="进程,线程," />
71+
<meta name="keywords" content="线程,进程," />
7272

7373

7474

@@ -80,7 +80,7 @@
8080

8181

8282
<meta name="description" content="本文对比操作系统中比较容易混淆的概念进程和线程,主要从如下几个方面来对比 举例对比二者区别 进程介绍 线程介绍 二者的区别和联系 总结 多任务操作系统简介 先给出结论: 进程是资源分配的基本单位,线程是调度的基本单位。进程包含线程,线程共用进程的资源 引用知乎上某大神的答案如下:进程和线程都是一个时间段的描述,是CPU工作时间段的描述。">
83-
<meta name="keywords" content="进程,线程">
83+
<meta name="keywords" content="线程,进程">
8484
<meta property="og:type" content="article">
8585
<meta property="og:title" content="进程和线程的区别">
8686
<meta property="og:url" content="https://github.com/Richard-zhang-iOS/Richard-zhang-iOS.github.io/2018/09/09/进程和线程的区别/index.html">
@@ -465,10 +465,10 @@ <h3 id="分类"><a href="#分类" class="headerlink" title="分类"></a>分类</
465465

466466
<div class="post-tags">
467467

468-
<a href="/tags/进程/" rel="tag"># 进程</a>
469-
470468
<a href="/tags/线程/" rel="tag"># 线程</a>
471469

470+
<a href="/tags/进程/" rel="tag"># 进程</a>
471+
472472
</div>
473473

474474

‎2018/09/18/多线程基础概念 /index.html

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,18 +79,18 @@
7979

8080

8181

82-
<meta name="description" content="本文主要对比了iOS多线程编程中所涉及的一些概念 进程 vs. 线程 同步 vs. 异步 串行 vs. 并发 并行 vs. 并发 任务 vs. 队列 队列 vs. 线程 同步 vs. 互斥">
82+
<meta name="description" content="本文主要对比了iOS多线程编程中所涉及的一些概念 进程 vs. 线程 同步 vs. 异步 串行 vs. 并发 并行 vs. 并发 任务 vs. 队列 队列 vs. 线程 同步 vs. 互斥 异步 + 串行 异步 + 并发 同步 + 串行(很少使用、可能死锁) 同步 + 并发(很少使用)">
8383
<meta name="keywords" content="线程">
8484
<meta property="og:type" content="article">
8585
<meta property="og:title" content="多线程基础概念">
8686
<meta property="og:url" content="https://github.com/Richard-zhang-iOS/Richard-zhang-iOS.github.io/2018/09/18/多线程基础概念 /index.html">
8787
<meta property="og:site_name" content="Richard-zhang-iOS的博客">
88-
<meta property="og:description" content="本文主要对比了iOS多线程编程中所涉及的一些概念 进程 vs. 线程 同步 vs. 异步 串行 vs. 并发 并行 vs. 并发 任务 vs. 队列 队列 vs. 线程 同步 vs. 互斥">
88+
<meta property="og:description" content="本文主要对比了iOS多线程编程中所涉及的一些概念 进程 vs. 线程 同步 vs. 异步 串行 vs. 并发 并行 vs. 并发 任务 vs. 队列 队列 vs. 线程 同步 vs. 互斥 异步 + 串行 异步 + 并发 同步 + 串行(很少使用、可能死锁) 同步 + 并发(很少使用)">
8989
<meta property="og:locale" content="zh-Hans">
90-
<meta property="og:updated_time" content="2018-09-18T07:49:29.490Z">
90+
<meta property="og:updated_time" content="2018-09-18T08:17:30.261Z">
9191
<meta name="twitter:card" content="summary">
9292
<meta name="twitter:title" content="多线程基础概念">
93-
<meta name="twitter:description" content="本文主要对比了iOS多线程编程中所涉及的一些概念 进程 vs. 线程 同步 vs. 异步 串行 vs. 并发 并行 vs. 并发 任务 vs. 队列 队列 vs. 线程 同步 vs. 互斥">
93+
<meta name="twitter:description" content="本文主要对比了iOS多线程编程中所涉及的一些概念 进程 vs. 线程 同步 vs. 异步 串行 vs. 并发 并行 vs. 并发 任务 vs. 队列 队列 vs. 线程 同步 vs. 互斥 异步 + 串行 异步 + 并发 同步 + 串行(很少使用、可能死锁) 同步 + 并发(很少使用)">
9494

9595

9696

@@ -361,6 +361,10 @@ <h1 class="post-title" itemprop="name headline">多线程基础概念</h1>
361361
<li>任务 vs. 队列</li>
362362
<li>队列 vs. 线程</li>
363363
<li>同步 vs. 互斥</li>
364+
<li>异步 + 串行</li>
365+
<li>异步 + 并发</li>
366+
<li>同步 + 串行(很少使用、可能死锁)</li>
367+
<li>同步 + 并发(很少使用)</li>
364368
</ul>
365369
<a id="more"></a>
366370
<h2 id="进程-vs-线程"><a href="#进程-vs-线程" class="headerlink" title="进程 vs. 线程"></a>进程 vs. 线程</h2><ul>
@@ -412,6 +416,15 @@ <h2 id="同步-vs-互斥"><a href="#同步-vs-互斥" class="headerlink" title="
412416
<li>互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。 </li>
413417
<li>同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。</li>
414418
</ul>
419+
<h2 id="异步-串行"><a href="#异步-串行" class="headerlink" title="异步 + 串行"></a>异步 + 串行</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">- (void)asyncSerial &#123;</span><br><span class="line"> /* 1. 创建一个串行队列 */</span><br><span class="line"> dispatch_queue_t serialQueue = dispatch_queue_create(&quot;download.tsaievan.com&quot;, DISPATCH_QUEUE_SERIAL);</span><br><span class="line"> </span><br><span class="line"> /* 2. 将不同的任务添加到队列中 */</span><br><span class="line"> dispatch_async(serialQueue, ^&#123;</span><br><span class="line"> NSLog(@&quot;download1--------%@&quot;,[NSThread currentThread]);</span><br><span class="line"> &#125;);</span><br><span class="line"> </span><br><span class="line"> dispatch_async(serialQueue, ^&#123;</span><br><span class="line"> NSLog(@&quot;download2--------%@&quot;,[NSThread currentThread]);</span><br><span class="line"> &#125;);</span><br><span class="line"> </span><br><span class="line"> dispatch_async(serialQueue, ^&#123;</span><br><span class="line"> NSLog(@&quot;download3--------%@&quot;,[NSThread currentThread]);</span><br><span class="line"> &#125;);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
420+
<p>结论:开启了新的线程, 但是不管任务有多少个, 只开启一条新的线程, 任务的执行顺序也是按照队列中的顺序执行的, <strong>因为同一条线程中, 必须等到前一个任务执行完毕后, 才能执行下一个任务.</strong></p>
421+
<h2 id="异步-并发"><a href="#异步-并发" class="headerlink" title="异步 + 并发"></a>异步 + 并发</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">- (void)asyncConcurrent &#123;</span><br><span class="line"> </span><br><span class="line"> /* 1. 创建一个并发队列 */</span><br><span class="line"> dispatch_queue_t concurrentQueue = dispatch_queue_create(&quot;download.tsaievan.com&quot;, DISPATCH_QUEUE_CONCURRENT);</span><br><span class="line"> </span><br><span class="line"> /* 2. 将任务放到队列中, 下面的代码将三个任务放到队列中 */</span><br><span class="line"> dispatch_async(concurrentQueue, ^&#123;</span><br><span class="line"> NSLog(@&quot;download1-------%@&quot;,[NSThread currentThread]);</span><br><span class="line"> &#125;);</span><br><span class="line"> dispatch_async(concurrentQueue, ^&#123;</span><br><span class="line"> NSLog(@&quot;download2-------%@&quot;,[NSThread currentThread]);</span><br><span class="line"> &#125;);</span><br><span class="line"> dispatch_async(concurrentQueue, ^&#123;</span><br><span class="line"> NSLog(@&quot;download3-------%@&quot;,[NSThread currentThread]);</span><br><span class="line"> &#125;);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
422+
<p>结论:开启了不同的线程, 任务完成的顺序也是随机的,但是开启的线程数量不是无限的,到了上限之后就会复用之前的线程。</p>
423+
<h2 id="同步-串行"><a href="#同步-串行" class="headerlink" title="同步 + 串行"></a>同步 + 串行</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">- (void)syncSerial &#123;</span><br><span class="line"> /* 1. 创建串行队列 */</span><br><span class="line"> dispatch_queue_t serialQueue = dispatch_queue_create(&quot;download.tsaievan.com&quot;, DISPATCH_QUEUE_SERIAL);</span><br><span class="line"> </span><br><span class="line"> /* 2. 将任务放到队列中 */</span><br><span class="line"> dispatch_sync(serialQueue, ^&#123;</span><br><span class="line"> NSLog(@&quot;download1--------%@&quot;,[NSThread currentThread]);</span><br><span class="line"> &#125;);</span><br><span class="line"> </span><br><span class="line"> dispatch_sync(serialQueue, ^&#123;</span><br><span class="line"> NSLog(@&quot;download2--------%@&quot;,[NSThread currentThread]);</span><br><span class="line"> &#125;);</span><br><span class="line"> </span><br><span class="line"> dispatch_sync(serialQueue, ^&#123;</span><br><span class="line"> NSLog(@&quot;download3--------%@&quot;,[NSThread currentThread]);</span><br><span class="line"> &#125;);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
424+
<p>结论:没有开启新线程,会阻塞当前线程,按照添加到队列的顺序执行。如果是当前线程同步到当前线程会造成死锁。</p>
425+
<p>相当于方法A调用了方法B执行,方法B执行时发现需要等待方法A执行结束才能执行,所以会造成A等待B,B等待A的死循环情况。</p>
426+
<h2 id="同步-并发"><a href="#同步-并发" class="headerlink" title="同步 + 并发"></a>同步 + 并发</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">- (void)syncConcurrent &#123;</span><br><span class="line"> </span><br><span class="line"> /* 1. 创建一条并发队列 */</span><br><span class="line"> dispatch_queue_t concurrentQueue = dispatch_queue_create(&quot;download.tsaievan.com&quot;, DISPATCH_QUEUE_CONCURRENT);</span><br><span class="line"> </span><br><span class="line"> /* 2. 把任务放到队列中 */</span><br><span class="line"> dispatch_sync(concurrentQueue, ^&#123;</span><br><span class="line"> NSLog(@&quot;download1--------%@&quot;,[NSThread currentThread]);</span><br><span class="line"> &#125;);</span><br><span class="line"> </span><br><span class="line"> dispatch_sync(concurrentQueue, ^&#123;</span><br><span class="line"> NSLog(@&quot;download1--------%@&quot;,[NSThread currentThread]);</span><br><span class="line"> &#125;);</span><br><span class="line"> </span><br><span class="line"> dispatch_sync(concurrentQueue, ^&#123;</span><br><span class="line"> NSLog(@&quot;download1--------%@&quot;,[NSThread currentThread]);</span><br><span class="line"> &#125;);</span><br><span class="line"> </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
427+
<p>结论:没有开启新线程,会阻塞当前线程,执行顺序按照添加到队列的顺序执行。</p>
415428

416429

417430
</div>
@@ -602,7 +615,7 @@ <h2 id="同步-vs-互斥"><a href="#同步-vs-互斥" class="headerlink" title="
602615

603616

604617

605-
<div class="post-toc-content"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#进程-vs-线程"><span class="nav-number">1.</span> <span class="nav-text">进程 vs. 线程</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#同步-vs-异步"><span class="nav-number">2.</span> <span class="nav-text">同步 vs. 异步</span></a><ol class="nav-child"><li class="nav-item nav-level-5"><a class="nav-link" href="#另外-还有一点需要明确的是"><span class="nav-number">2.0.0.1.</span> <span class="nav-text">另外, 还有一点需要明确的是</span></a></li></ol></li></ol></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#串行-vs-并发"><span class="nav-number">3.</span> <span class="nav-text">串行 vs. 并发</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#并行-vs-并发"><span class="nav-number">4.</span> <span class="nav-text">并行 vs. 并发</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#任务-vs-队列"><span class="nav-number">5.</span> <span class="nav-text">任务 vs. 队列</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#队列-vs-线程"><span class="nav-number">6.</span> <span class="nav-text">队列 vs. 线程</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#同步-vs-互斥"><span class="nav-number">7.</span> <span class="nav-text">同步 vs. 互斥</span></a></li></ol></div>
618+
<div class="post-toc-content"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#进程-vs-线程"><span class="nav-number">1.</span> <span class="nav-text">进程 vs. 线程</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#同步-vs-异步"><span class="nav-number">2.</span> <span class="nav-text">同步 vs. 异步</span></a><ol class="nav-child"><li class="nav-item nav-level-5"><a class="nav-link" href="#另外-还有一点需要明确的是"><span class="nav-number">2.0.0.1.</span> <span class="nav-text">另外, 还有一点需要明确的是</span></a></li></ol></li></ol></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#串行-vs-并发"><span class="nav-number">3.</span> <span class="nav-text">串行 vs. 并发</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#并行-vs-并发"><span class="nav-number">4.</span> <span class="nav-text">并行 vs. 并发</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#任务-vs-队列"><span class="nav-number">5.</span> <span class="nav-text">任务 vs. 队列</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#队列-vs-线程"><span class="nav-number">6.</span> <span class="nav-text">队列 vs. 线程</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#同步-vs-互斥"><span class="nav-number">7.</span> <span class="nav-text">同步 vs. 互斥</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#异步-串行"><span class="nav-number">8.</span> <span class="nav-text">异步 + 串行</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#异步-并发"><span class="nav-number">9.</span> <span class="nav-text">异步 + 并发</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#同步-串行"><span class="nav-number">10.</span> <span class="nav-text">同步 + 串行</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#同步-并发"><span class="nav-number">11.</span> <span class="nav-text">同步 + 并发</span></a></li></ol></div>
606619

607620

608621
</div>

‎css/main.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1823,7 +1823,7 @@ pre .javascript .function {
18231823
width: 4px;
18241824
height: 4px;
18251825
border-radius: 50%;
1826-
background: #375c03;
1826+
background: #7ff5ff;
18271827
}
18281828
.links-of-blogroll {
18291829
font-size: 13px;

‎index.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,10 @@ <h1 class="post-title" itemprop="name headline">
360360
<li>任务 vs. 队列</li>
361361
<li>队列 vs. 线程</li>
362362
<li>同步 vs. 互斥</li>
363+
<li>异步 + 串行</li>
364+
<li>异步 + 并发</li>
365+
<li>同步 + 串行(很少使用、可能死锁)</li>
366+
<li>同步 + 并发(很少使用)</li>
363367
</ul>
364368
<!--noindex-->
365369
<div class="post-button text-center">

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /