NSThread與多執行緒操作

伊卡洛斯發表於2018-01-18

一、概述

首先,我們先假設大家都對執行緒有初步的瞭解。那麼我們都知道NSThread底層其實是呼叫的C語言中POISIX(可移植作業系統介面)框架下的pthread來實現執行緒控制的。

1.多執行緒基本原理

執行緒都是CPU來排程的,而(單核中)CPU同一時間是隻能對一條執行緒進行操作。而我們所看到的多個執行緒同時執行其實是一種假象。真實的情況是CPU及其快速的切換多條執行緒,造成了我們看到多執行緒“同步”執行的假象。

2.NSThread 和 pthread,GCD 和 NSOperation

NSThread是對pthread的高度封裝,使用了更加物件導向,更加簡單易用的方式,使我們用起來更加的方便。
而我們需要注意一點,就是在OC開發中,只有NSThread和pthread是真正的多執行緒操作。GCD 和 NSOperation並不是真正的執行緒操作(不是真正的執行緒操作,但是屬於多執行緒技術,是不是很拗口)。NSOperation是基於GCD的封裝,比GCD更加簡單實用。而GCD的底層是充分利用裝置的多核技術,旨在替換NSThread。(GCD和NSOperation將在下一篇文章中充分講解,這裡只做簡單瞭解)

3.執行緒的狀態

我認為執行緒的狀態有這麼五種情況:新建狀態,就緒狀態,執行狀態,阻塞狀態,死亡狀態(這裡可能會有歧義,我將其他的多種狀態也進行了合併,如等待狀態、鎖池狀態等)。他們的關係如下圖所示:

NSThread與多執行緒操作

而我們常說的加鎖方式其實是將多條執行緒以序列的方式來執行。(這裡補充,就是單條執行緒中,所有的呼叫都是以序列的方式執行的。就像我們常遇到的這種情況:點選螢幕好幾個位置沒反應,然後過了一段時間各種介面就開始跳了。其根源就是執行緒在執行耗時操作,我們的點選操作被排到了後面執行)。如圖:

NSThread與多執行緒操作

這是我在掘金髮的第一篇文章。由於最近比較忙,所以目前只寫了概述,還有用法和注意事項沒有寫,本文內容還會更新,敬請大家期待。

相關文章