iOS-多線程的底層實現

來源:互聯網
上載者:User

標籤:

  (1)首先回答什麼是線程

  1個進程要想執行任務,必須得有線程.線程是進程的基本執行單元,一個進程(程式)的所有任務都線上程中執行

  (2)什麼是多線程

  1個進程中可以開啟多條線程,每條線程可以並行(同時)執行不同的任務。  多線程的作用:更新顯示UI介面、處理使用者觸摸事件。  (3)Mach是第一個以多線程方式處理任務的系統,因此多線程的底層實現機制是基於Mach的線程。  (4)開發中實現多線程的方案       1》C語言的POSIX介面:#include<pthread.h>       2》OC的NSThread       3》 C語言的GCD介面(效能最好,代碼更精簡)         4》  OC的NSOperation和NSOperationQueue(基於GCD)  2.線程的通訊  (1)GCD:

 

  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

      // 下載圖片

       UIImage *image = nil;

       dispatch_async(dispatch_get_main_queue(), ^{

            // 回到主線程

       });

 

  (2)NSThread的線程通訊

  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        // 下載圖片

         UIImage *image = nil;

   [self performSelector:@selector(settingImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:YES modes:nil];

   }  

  這種情況 也適用於子線程之間的通訊。

   (3)NSThread的線程通訊

  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        // 下載圖片

         UIImage *image = nil;

  [self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:YES];

   }

  3.網狀圖片處理問題中怎麼解決一個相同的網路地址重複請求的問題

     利用字典圖片地址為key,下載操作為value

  4. 列舉cocoa中常見對幾種多線程的實現,並談談多安全執行緒的幾種解決辦法及多安全執行緒怎麼控制?

  1》開發中實現多線程的方案

       1》C語言的POSIX介面:#include<pthread.h>       2》OC的NSThread       3》 C語言的GCD介面(效能最好,代碼更精簡)         4》  OC的NSOperation和NSOperationQueue(基於GCD)  2》多安全執行緒的解決方案       1》只在主線程重新整理訪問UI       2》如果要防止資源搶奪,得用synchronize進行加鎖保護。       3》如果非同步作業要保證安全執行緒等問題,盡量使用GCD。(GCD有些函數預設就是安全的)  5.GCD內部怎麼實現的    1》 iOS和OSX的核心是XNU核心(蘋果電腦發展的作業系統核心),GCD是基於XNU核心實現的。    2》GCD的API全部在libdispatch庫中    3》GCD的底層實現主要有:Dispatch Queue和Dispatch Source      Dispatch Queue :管理block操作      Dispatch Source:處理事件(比如說線程間的通訊)  6.GCD和NSOperationQueue     1》GCD是純C語言的API,NSOperationQueue是基於GCD的OC版本的封裝     2》GCD只支援FIFO的隊列,NSOperationQueue可以很方便的調整執行順序,可以添加依賴設定最大並發數量。     3》GCD的執行速度比NSOperationQueue快     4》NSOperationQueue支援KVO,可以檢測Operation是否正在執行,是否結束,是否取消。  如何進行選擇?  任務之間不太相互依賴,選用GCD;  任務之間有依賴,或者要監聽任務的執行情況:NSOperationQueue

iOS-多線程的底層實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.