計算機操作系統(tǒng)都有的基本概念,以下概念簡單方式來描述捅彻。
進程
:就是在系統(tǒng)中组去,正在運行的一個應(yīng)用程序。
線程
:是 CPU 調(diào)度的最基本的單位步淹,它有自己棧和寄存器从隆。
進程和線程的區(qū)別
進程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式诚撵,進程有獨立的地址空間,一個進程崩潰后键闺,在保護模式下不會對其它進程產(chǎn)生影響寿烟,而線程只是一個進程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量辛燥,但線程之間沒有單獨的地址空間筛武,一個線程死掉就等于整個進程死掉,所以多進程的程序要比多線程的程序健壯挎塌,但在進程切換時徘六,耗費資源較大,效率要差一些榴都。但對于一些要求同時進行并且又要共享某些變量的并發(fā)操作待锈,只能用線程,不能用進程嘴高。
并發(fā)
:多個任務(wù)同時發(fā)生竿音,需要被處理。比如阳惹,田徑賽場上的起跑線上有多個運動員等待起跑谍失。
并行
:在某一個時間能夠同時處理多個任務(wù)。比如莹汤,火車站開放了多個檢票口快鱼,同一時間能夠服務(wù)多個旅客。
串行
:線程執(zhí)行只能依次逐一先后有序的執(zhí)行纲岭,串行中抹竹,一個任務(wù)的執(zhí)行必須以上一個任務(wù)執(zhí)行結(jié)束為前提。
串行和并行主要區(qū)別在于一個任務(wù)的執(zhí)行是否以上一個任務(wù)的完成為前提止潮。串行中窃判,一個任務(wù)的執(zhí)行必須以上一個任務(wù)執(zhí)行結(jié)束為前提,并行中喇闸,一個任務(wù)的執(zhí)行與上一個任務(wù)的執(zhí)行狀態(tài)無關(guān)袄琳。以排隊買票為例,串行像單個買票隊伍燃乍,單個賣票窗口唆樊,必須一個一個來,串行像單個買票隊伍刻蟹,多個賣票窗口逗旁,多個人可以同時買票。
同步
:就是順序往下執(zhí)行舆瘪。舉例:燒完水后泡茶
異步
:就是幾件事情同時在執(zhí)行片效。燒水的時候拿出茶具红伦,洗茶具,然后泡茶淀衣。其中燒水和拿茶具昙读,洗茶具是同時進行的。
二舌缤、iOS 多線程方案
在iOS
中其實目前有4套多線程方案箕戳,他們分別是:
1、pthreads
2国撵、NSThread
3陵吸、GCD
4、NSOperation & NSOperationQueue
三介牙、iOS 多線程原理
同一時間壮虫,CPU 只能處理一條線程,就是只有一條線程在工作环础,多線程之間的并發(fā)操作囚似,其實就是 CPU 在多條線程之間快速的切換。如果 CPU 調(diào)度的線程的時間足夠快线得,就造成了多線程并發(fā)執(zhí)行的假象饶唤。