hexo與wordpress區(qū)別百度優(yōu)化服務(wù)
為什么需要多線程
- CPU、內(nèi)存、IO之間的性能差異巨大
- 多核心CPU的發(fā)展
- 線程的本質(zhì)是增加一個(gè)可以執(zhí)行代碼工人
多線程的優(yōu)點(diǎn)
多個(gè)執(zhí)行流,并行執(zhí)行。(多個(gè)工人,干不一樣的活)
多線程的缺點(diǎn)
- 上下文切換慢,切換上下文典型值1us vs 0.3ns/cycle
CPU在執(zhí)行A任務(wù)(A沒(méi)有執(zhí)行完)時(shí),切換到任務(wù)B,需要保存A的上下文內(nèi)容,等待CPU切換到執(zhí)行A任務(wù)使用。需要消耗大概1000個(gè)時(shí)鐘周期。
不是說(shuō)多線程是可以提高效率,怎么又說(shuō)多線程慢呢。這里慢單純指的是線程之間切換時(shí)消耗的時(shí)間和CPU的時(shí)鐘周期相比慢。針對(duì)內(nèi)存尋址、硬盤尋址是有提升的。
- 占用資源:每個(gè)線程有獨(dú)立的方法棧。
推薦閱讀:我是一個(gè)CPU:這個(gè)世界慢!死!了!
線程相關(guān)概念
程序
程序(Program):程序的為了讓計(jì)算機(jī)執(zhí)行某些操作或解決某個(gè)問(wèn)題而編寫(xiě)一系列
有序的指令集合
。軟件的目的:提高人們的工作效率,簡(jiǎn)化工作流程。靜態(tài)概念。
進(jìn)程
進(jìn)程(Process):進(jìn)程是計(jì)算機(jī)中的程序關(guān)于某數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),
是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位
,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。 動(dòng)態(tài)概念。
進(jìn)程的特點(diǎn):
- 結(jié)構(gòu)性:由程序塊CODE、數(shù)據(jù)塊DATA、控制塊CPU 組成。
- 共享性:同一程序運(yùn)行在不同的數(shù)據(jù)集上時(shí)構(gòu)成不同的進(jìn)程。即多個(gè)進(jìn)程可以共享一個(gè)程序。(如一臺(tái)電腦同時(shí)登陸多個(gè)QQ)
- 動(dòng)態(tài)性:進(jìn)程是程序在數(shù)據(jù)集合上的一次執(zhí)行過(guò)程,是動(dòng)態(tài)概念。它有生命周期,由創(chuàng)建、執(zhí)行、消亡、。
- 獨(dú)立性:每個(gè)進(jìn)程都以各自獨(dú)立的速度在CPU上執(zhí)行。
- 并發(fā)性:進(jìn)程的并發(fā)性能夠提高資源的利用率和系統(tǒng)的效率。
- 制約性:并發(fā)進(jìn)程之間存在制約關(guān)系,也需要相互等待或互通消息,保證程序執(zhí)行的可再現(xiàn)性和計(jì)算結(jié)果的唯一性。
進(jìn)程的狀態(tài):就緒態(tài)ready、運(yùn)行態(tài)running、阻塞blocked
進(jìn)程的缺點(diǎn):
占用較多的系統(tǒng)資源,浪費(fèi)內(nèi)存。
線程
線程(Thread):是操作系統(tǒng)進(jìn)程中能夠獨(dú)立執(zhí)行的實(shí)體(控制流),是處理器調(diào)度和分派的基本單位。 可以看成是進(jìn)程內(nèi)的多條執(zhí)行路徑。
進(jìn)程的特點(diǎn):并發(fā)性、共享性、動(dòng)態(tài)性、結(jié)構(gòu)性
- 線程是輕量級(jí)的進(jìn)程
- 一個(gè)進(jìn)程可以并行多個(gè)線程
- 進(jìn)程中的線程共享內(nèi)存
- 線程間通訊在共享內(nèi)存中的地址空間上執(zhí)行,不需要額外的通訊機(jī)制,故速度更快。
區(qū)別 | 進(jìn)程 | 線程 |
---|---|---|
本質(zhì)區(qū)別 | 程序是計(jì)算機(jī)分配資源單位 | 線程是進(jìn)程中CPU調(diào)度和執(zhí)行的單位 |
開(kāi)銷 | 進(jìn)程有獨(dú)立的計(jì)算機(jī)資源,進(jìn)程間切換會(huì)有較大的開(kāi)銷 | 線程可以當(dāng)做輕量級(jí)進(jìn)程,線程間資源共享,切換開(kāi)銷小 |
內(nèi)存分配 | 計(jì)算機(jī)會(huì)給進(jìn)程分配獨(dú)立的內(nèi)存資源 | 線程使用所在進(jìn)程的資源 |
關(guān)系 | 內(nèi)有線程的進(jìn)程可以當(dāng)做單線程;一個(gè)進(jìn)程可以有多個(gè)線程 | 線程是進(jìn)程的一部分,線程可以當(dāng)做一個(gè)輕量級(jí)的進(jìn)程 |