官术网_书友最值得收藏!

第2章 并發(fā)編程的其他基礎(chǔ)知識(shí)

2.1 什么是多線程并發(fā)編程

首先要澄清并發(fā)和并行的概念,并發(fā)是指同一個(gè)時(shí)間段內(nèi)多個(gè)任務(wù)同時(shí)都在執(zhí)行,并且都沒有執(zhí)行結(jié)束,而并行是說在單位時(shí)間內(nèi)多個(gè)任務(wù)同時(shí)在執(zhí)行。并發(fā)任務(wù)強(qiáng)調(diào)在一個(gè)時(shí)間段內(nèi)同時(shí)執(zhí)行,而一個(gè)時(shí)間段由多個(gè)單位時(shí)間累積而成,所以說并發(fā)的多個(gè)任務(wù)在單位時(shí)間內(nèi)不一定同時(shí)在執(zhí)行。在單CPU的時(shí)代多個(gè)任務(wù)都是并發(fā)執(zhí)行的,這是因?yàn)閱蝹€(gè)CPU同時(shí)只能執(zhí)行一個(gè)任務(wù)。在單CPU時(shí)代多任務(wù)是共享一個(gè)CPU的,當(dāng)一個(gè)任務(wù)占用CPU運(yùn)行時(shí),其他任務(wù)就會(huì)被掛起,當(dāng)占用CPU的任務(wù)時(shí)間片用完后,會(huì)把CPU讓給其他任務(wù)來使用,所以在單CPU時(shí)代多線程編程是沒有太大意義的,并且線程間頻繁的上下文切換還會(huì)帶來額外開銷。

圖2-1所示為在單個(gè)CPU上運(yùn)行兩個(gè)線程,線程A和線程B是輪流使用CPU進(jìn)行任務(wù)處理的,也就是在某個(gè)時(shí)間內(nèi)單個(gè)CPU只執(zhí)行一個(gè)線程上面的任務(wù)。當(dāng)線程A的時(shí)間片用完后會(huì)進(jìn)行線程上下文切換,也就是保存當(dāng)前線程A的執(zhí)行上下文,然后切換到線程B來占用CPU運(yùn)行任務(wù)。

圖2-1

圖2-2所示為雙CPU配置,線程A和線程B各自在自己的CPU上執(zhí)行任務(wù),實(shí)現(xiàn)了真正的并行運(yùn)行。

圖2-2

而在多線程編程實(shí)踐中,線程的個(gè)數(shù)往往多于CPU的個(gè)數(shù),所以一般都稱多線程并發(fā)編程而不是多線程并行編程。

主站蜘蛛池模板: 温宿县| 定兴县| 金寨县| 合川市| 江达县| 平定县| 紫金县| 南平市| 女性| 昭平县| 临澧县| 紫金县| 沂源县| 漳州市| 综艺| 庆安县| 徐闻县| 鄂托克前旗| 马龙县| 河北省| 丹凤县| 工布江达县| 浮山县| 枣阳市| 电白县| 阜南县| 屏东县| 理塘县| 安溪县| 永善县| 铁岭县| 湟中县| 客服| 诸城市| 基隆市| 巴林左旗| 邳州市| 灵川县| 荥经县| 合作市| 凌海市|