iOS 關於多線程的一些基本概念

來源:互聯網
上載者:User

標籤:執行順序   turn   開啟   技術   上下   bsp   oid   代碼   方案   

一 什麼是進程

進程是在系統中正在啟動並執行應用程式!普通的應用程式並不是進程,只有正在啟動並執行應用程式才是一個進程,

在系統中每個進程之間是相互獨立的,每個進程均在其專享的且受保護的記憶體空間內。但是一個應用程式可以對用多個進程,比如 你可以在MAC上開啟兩個QQ。

二 什麼是線程

一個進程想要執行任務 必須得有進程(每一個進程至少包含一個線程)

一個進程(程式)的所有任務 都線上程中完成。2.1 線程的串列

線程裡面任務的執行順序是串列的,就是一個線程中執行任務時有順序的,一個接一個的,如果一個線程中有多個任務,這些任務是一個接一個完成的,在同一時間內 一個線程只能執行一個任務.也可以說線程是進程中的一個執行路徑。

2.2 進程和線程的關係

線程是CPU調用(執行任務)的最小單位

進程是CPU分配資源和調度單位 (CPU 調度進程 進程調用線程執行任務)

一個程式可以對應多個進程,一個進程至少包含一個線程

同一個進程內的線程共用進程的資源

三 多線程

一個進程中可以開啟多個線程,每條線程可以並行(同時)執行不同的任務(但是每條線程執行任務時串列的)

3.1 多線程的原理

在同一時間內CPU職能處理一條線程,只有一條線程在工作

多線程並發(同時)執行,其實是CPU快速在多條線程之間的調度(切換)

上面的理論只存在在單CPU之間

如果CPU調度線程的時間足夠快就會造成多線程並發的假象.

所以並不是開闢越多的線程就越好,因為CPU在調度線程的時候也會消耗資源(比如儲存上下文 即每條線程執行任務的進度節點) 通常我們在開發中會開3-5條線程

3.2多線程的優缺點

優點

1.可以適當的提高程式的執行效率

2.能適當的提高資源使用率(CPU,記憶體利用率)

缺點

建立多線程是有開銷的,在ISO下主要成本包括,核心資料結構(大約1KB) 棧空間(自線程512KB 注線程1MB,也可以通過setStackSize:   來設定,但必須是4K的倍數,而且最小是16K)建立線程大約需要90毫秒的建立時間.

如果開啟大量的線程 會降低程式的效能

線程越多,CPU在調度線程上的開銷就會越大

線程設計更加複雜,比如線程之間的通訊,多線程資料共用 等等

四 多線程在IOS中的應用4.1 什麼是主線程

一個iOS程式運行之後,預設會開啟一條線程,這個線程就叫做主線程(UI線程)

主線程的主要任務是 顯示、重新整理UI介面 處理UI事件(點擊事件 滾動事件 拖拽事件)

凡是跟UI相關的所有操作 必須在主線程之間運行 但是不要把耗時操作放到主線程之間

因為耗時操作會卡住主線程,給使用者造成卡頓的感覺(因為線程中的任務是串列執行的,會等到耗時操作完成後才執行其他任務)

耗時操作的執行最好放在子線程中(後台線程,非主線程) 比如列印就是耗時操作

一些簡單代碼

- (void)viewDidLoad {    [super viewDidLoad];    //擷取主線程    NSThread *mainThread = [NSThread mainThread];        //擷取當前此案成    NSThread *currentThread = [NSThread currentThread];    NSLog(@"主線程 %@ 當前線程%@",mainThread,currentThread);    //判斷是否為主線程    // 判斷number == 1    //類方法    BOOL isMainThread = [NSThread isMainThread];    //對象方法    BOOL isMainThread1 = [currentThread isMainThread];    NSLog(@"%zd --- %zd",isMainThread,isMainThread1);    }
五 iOS中多線程的實現方案

六Pthread的簡單實用
#import "ViewController.h"#import <pthread.h>@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    [self openThreadByPthread];}- (void)openThreadByPthread {    pthread_t thread;    /*     *第一個參數:線程對象的地址     *第二個參數:線程的一些屬性 不想傳久NULL     *第三個參數:指向函數的指標     *第四個參數:函數需要接受的參數 不需要傳NULL     */    pthread_create(&thread, NULL, task, NULL);    }//多線程要執行的函數void * _Nullable task(void * _Nullable params) {    NSLog(@"%@",[NSThread currentThread]);    return NULL;}

 

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.