做開發(fā)這么久了,多線程一直都在用,卻沒有好好總結(jié)過.如今年底了,準(zhǔn)備總結(jié)一波.也方便以后自己再回來看.
我不太喜歡糾結(jié)概念上的東西這里就簡單淺顯的說下我的理解,實(shí)踐是檢驗(yàn)真理的唯一途徑,所以我比較喜歡直接擼代碼.
以下是大致的理論概括圖文:
-
開發(fā)多線程,首先要了解什么是進(jìn)程.其實(shí)通俗的來講,一般一個(gè)線程指的就是一個(gè)程序.比如我們mac上運(yùn)行的一個(gè)軟件比如我們的Xcode.iPhone上運(yùn)行的一個(gè)app,其實(shí)就是一個(gè)進(jìn)程.
-
什么是線程,線程就是進(jìn)程的最小組成單元.
-
線程的執(zhí)行有2種
各個(gè)線程按順序執(zhí)行,總時(shí)間是各個(gè)線程的耗時(shí)之和.
并行,是多個(gè)線程同時(shí)執(zhí)行.總時(shí)間取決于耗時(shí)最長的子線程.
其實(shí)并行也不一定就是真的同時(shí)執(zhí)行多個(gè)線程
-
單核操作系統(tǒng),其實(shí)是cpu來回的在多個(gè)線程中調(diào)度.實(shí)質(zhì)上還是一次只能執(zhí)行一個(gè)線程的任務(wù)
2.多核操作系統(tǒng)
-
多線程的優(yōu)點(diǎn)
- 簡化了編程模型:在一個(gè)比較復(fù)雜的系統(tǒng)設(shè)計(jì)中,如果我們想在單一的線程中高效的處理比較大的或者比較零散任務(wù)的時(shí)候其實(shí)是很難實(shí)現(xiàn)的 有了多線程,其實(shí)我們就可以將大的任務(wù)進(jìn)行切割,這樣就大大的簡化了我們的模型
- 更加的輕量級(jí)
-
提高了執(zhí)行效率
說通俗點(diǎn),就好比原來一個(gè)人的活變成好幾個(gè)人同時(shí)干了,效率自然就提升了 - 提高資源利用率
- 多線程缺點(diǎn)
-
增加了程序設(shè)計(jì)復(fù)雜性
雖然前面說它可以簡化編程模型,但程序的復(fù)雜性也大大增加了,多線程其實(shí)要解決的最大問題是資源共享以及線程讀寫的問題.這個(gè)在我們的實(shí)際項(xiàng)目中經(jīng)常會(huì)遇到, 比如我們?cè)诓僮饕粋€(gè)數(shù)據(jù)庫,如果一個(gè)線程在執(zhí)行寫操作,另一個(gè)線程其實(shí)是不允許同時(shí)執(zhí)行寫操作的,否則在寫的過程中,就會(huì)出錯(cuò). 再比如有個(gè)變量,你在一個(gè)線程中修改它的值,同時(shí)在另一個(gè)線程中也改了它的值.這個(gè)時(shí)候你再去讀這個(gè)值的時(shí)候,很可能這個(gè)值,就不是你所預(yù)期的了. 所以這些種種的問題,都是我們?cè)谧鼍€程開發(fā)中需要注意的.所以這樣就大大增加了我們程序設(shè)計(jì)的復(fù)雜性. -
占用內(nèi)存空間.
在剛接觸多線程的時(shí)候,我發(fā)現(xiàn)這個(gè)東西真的很好用啊,提高執(zhí)行效率,結(jié)果造成不分場合,不分地點(diǎn)的亂用.這樣就會(huì)導(dǎo)致程序內(nèi)存的增加.對(duì)于客戶端開發(fā),程序的內(nèi)存是至關(guān)重要的.他直接影響了程序的使用性.所以多線程要用得適度,用得合理. -
增大了cpu的調(diào)度開銷
系統(tǒng)在做時(shí)間片輪轉(zhuǎn),調(diào)度的時(shí)候.cpu會(huì)在多個(gè)線程中切來切去,勢必會(huì)增大cpu的開銷,導(dǎo)致cpu的占用率增加,對(duì)系統(tǒng)會(huì)造成一定的影響.
接下來就是oc中常用到的幾種開辟線程需要用到的模塊.將在后文中一一探索.