前言
什么是線程燕耿?
線程是能夠獨立運行的基本單位颖变,也是獨立調(diào)度和分派的基本單位。
什么是進程饮焦?
進程是指在系統(tǒng)中正在運行的一個應用程序琼掠,就是一段程序的執(zhí)行過程,它具有一定獨立功能的程序關(guān)于某次數(shù)據(jù)集合的一次運行活動皆串,它是操作系統(tǒng)分配資源的基本單元。每個進程之間是相互獨立的, 每個進程均運行在其專用且受保護的內(nèi)存空間內(nèi)眉枕。
進程和線程的關(guān)系
線程是進程的執(zhí)行單元恶复,進程的所有任務(wù)都在線程中執(zhí)行;
線程是 CPU 調(diào)用的最小單位;
進程是 CPU 分配資源和調(diào)度的單位;
一個程序可以對應過個進程,一個進程中可有多個線程,但至少要有一條線程;
同一個進程內(nèi)的線程共享進程資源怜森。
相同點:
進程和線程都是有操作系統(tǒng)所提供的程序運行的基本單元,系統(tǒng)利用這些基本單元實現(xiàn)系統(tǒng)對應用程序的并發(fā)性谤牡。
不同點:
- 進程和線程的主要差別在于他們是不同的操作系統(tǒng)資源管理方式副硅。
- 進程有獨立的地址空間,一個進程
crash
后翅萤,在保護模式下不會對其他進程產(chǎn)生影響,而線程只是一個進程中的不同執(zhí)行路徑恐疲。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間套么。一個線程crash
就等于整個進程crash
培己。
多進程的程序比單線程的程序健壯,但在進程切換時胚泌,耗費資源較大省咨,效率要差一些。但對于一些要求同時進行并且又要共享某些變量的并發(fā)操作玷室,只能用線程零蓉,不能用進程。
什么是多線程穷缤?
多線程是指實現(xiàn)多個線程并發(fā)執(zhí)行的技術(shù)敌蜂。
什么是并發(fā)?
并發(fā)是指一個時間段中有幾個程序都處于已啟動運行到運行完畢之間津肛,且這幾個程序都是在同一個處理機上運行章喉,但任一個時刻點上只有一個程序在處理機上運行。
多線程的優(yōu)點和缺點
優(yōu)點
可以大大提交軟件的執(zhí)行效率和資源(CPU身坐、內(nèi)存)利用率囊陡。
缺點
當線程過多會消耗大量的資源,每開一條線程也是需要耗費資源的(iOS主線程占用1MB內(nèi)存空間掀亥,子線程占用512KB)。
iOS開發(fā)中的多線程
iOS程序在啟動后會自動開啟一個線程妥色,稱為主線程
搪花,用來顯示、刷新UI界面嘹害,處理點擊撮竿、滾動等事件,所以耗費時間的事件(比如網(wǎng)絡(luò)請求笔呀、磁盤操作等)盡量不要放在主線程幢踏,避免造成阻塞主線程造成界面卡頓。
線程執(zhí)行任務(wù)方式分為:
- 異步執(zhí)行
異步是指在多線程中许师,進程A在執(zhí)行的進程線程B不等待線程A是否執(zhí)行完成房蝉,而是直接執(zhí)行它的相應操作僚匆。
- 同步執(zhí)行
同步執(zhí)行指的是在多線程中,一個進程A在執(zhí)行的時候搭幻,若線程A需要一段時間才能執(zhí)行完成咧擂,那么另外一個線程B將會一直等待下去,直到線程A執(zhí)行完成才會繼續(xù)執(zhí)行檀蹋。
在iOS開發(fā)過程中多線程的實現(xiàn)方式有:
pthread
NSThread
NSOperation
GCD