线程简介
線程:程序的一個(gè)順序執(zhí)行流。
單線程:一個(gè)程序只有一條順序執(zhí)行流。
多線程:一個(gè)程序有多條順序執(zhí)行流。多個(gè)順序流之間互不干擾。
進(jìn)程:
進(jìn)程是處于運(yùn)行過(guò)程中的程序。它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。
每一個(gè)進(jìn)程都有自己私有的地址空間。
程序只是一個(gè)靜態(tài)的指令集合,而進(jìn)程是一個(gè)正在系統(tǒng)中活動(dòng)的指令。
多個(gè)進(jìn)程可在單個(gè)處理器上并發(fā)執(zhí)行,互不影響。
并發(fā)與并行:
并發(fā):指在同一時(shí)刻只能有一條指令執(zhí)行,但多個(gè)進(jìn)程指令被快速輪換執(zhí)行,給我們同時(shí)執(zhí)行了多個(gè)進(jìn)程的錯(cuò)覺(jué)。
并行:指在同一時(shí)刻,有多條指令在多個(gè)處理器上執(zhí)行。
線程與進(jìn)行的區(qū)別:
線程是進(jìn)程的執(zhí)行單元。線程在程序中是獨(dú)立、并發(fā)的執(zhí)行流。當(dāng)進(jìn)程被初始化后,主線程也就被創(chuàng)建了。
一個(gè)進(jìn)程可以擁有多個(gè)線程,它們可以并發(fā)執(zhí)行(輪流執(zhí)行)。線程可以擁有自己的堆棧、程序計(jì)數(shù)器、局部變量,但不能擁有系統(tǒng)資源它與父進(jìn)程的其他線程共享該進(jìn)程所擁有的全部資源。
當(dāng)前運(yùn)行的線程在任何時(shí)候都可能被掛起,以便輪換到另一個(gè)線程運(yùn)行。
一個(gè)線程可以創(chuàng)建和撤銷另一個(gè)線程。
總結(jié):
電腦可以同時(shí)啟動(dòng)多個(gè)程序,每個(gè)程序就是進(jìn)程;進(jìn)程可以同時(shí)執(zhí)行多個(gè)線程(任務(wù))。
多線程優(yōu)點(diǎn):
進(jìn)程在執(zhí)行過(guò)程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率。
線程共享的環(huán)境有:進(jìn)程代碼段、進(jìn)程公有數(shù)據(jù)、利用這些共享數(shù)據(jù)可實(shí)現(xiàn)線程相互之間的通信。
總結(jié)
- 上一篇: 深究AngularJS——排序
- 下一篇: 线程的3种创建方式