成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 升級(jí)之路 ( Lv28 ) 并發(fā)編程初識(shí)

開(kāi)發(fā)
今天我們將學(xué)習(xí)并發(fā)編程涉及的幾個(gè)概念,包括CPU執(zhí)行任務(wù)的三種方式:串行、并行、并發(fā);程序的三種存在形式:進(jìn)程、線(xiàn)程、協(xié)程以及相關(guān)衍生概念;再加上消息通信的兩種方式:同步、異步。

今天我們將學(xué)習(xí)并發(fā)編程涉及的幾個(gè)概念,包括CPU執(zhí)行任務(wù)的三種方式:串行、并行、并發(fā);程序的三種存在形式:進(jìn)程、線(xiàn)程、協(xié)程以及相關(guān)衍生概念;再加上消息通信的兩種方式: 同步、異步。

今日冒險(xiǎn)片段上:

傳說(shuō)暗黑城的盡頭每次都會(huì)自動(dòng)改變路徑,許多前輩進(jìn)入這里再也沒(méi)有出來(lái),暗影迷宮因此得名。了不起從蜘蛛洞穴深入到迷宮后,便發(fā)覺(jué)這里到處充滿(mǎn)了陰森和恐懼。由于長(zhǎng)期生活在陰暗潮濕的環(huán)境中,精靈們發(fā)生了變異,這些類(lèi)似于人形的上位精靈不但各種屬性增強(qiáng)了許多,就連智商也在逐漸與人類(lèi)接近。??

眼看著就要突破迷宮的出口,三道黑影突然閃現(xiàn)在勇士的面前,嘴里還嘟囔著:“就憑你們也想活著走出這里?先過(guò)了我這關(guān)再說(shuō)吧。”說(shuō)話(huà)的這位就是暗影迷宮的領(lǐng)主——影子劍士剎影,邊上兩位毫無(wú)疑問(wèn)就是這里的將領(lǐng)了。身為阿拉德大陸的冒險(xiǎn)家們自然不會(huì)因?yàn)檫@句話(huà)就膽怯,一場(chǎng)戰(zhàn)斗一觸即發(fā),俗話(huà)說(shuō)的好“明槍易躲,暗箭難防!”這個(gè)強(qiáng)悍的影子劍士居然會(huì)鬼劍士的所有技能,什么鬼影步、鬼斬、冰霜薩亞,十分棘手,更可恨是,那兩位將領(lǐng)狩魂者和莫比一個(gè)不停的在遠(yuǎn)處釋放回旋鏢,一個(gè)在暗處安放地雷,著實(shí)令人頭疼。

一、串行 & 并行 & 并發(fā)

1. 串行

一句話(huà)概: 一個(gè)CPU上,按順序完成多個(gè)任務(wù)

串行圖解:

2. 并發(fā)

一句話(huà)概括: 一個(gè)cpu上, 交替執(zhí)行多個(gè)任務(wù)

并發(fā)圖解:

3. 并行

一句話(huà)概括: 多個(gè)cpu上, 同時(shí)執(zhí)行多個(gè)任務(wù)(任務(wù)數(shù)<=CPU核數(shù))并行必須有多cpu才能實(shí)現(xiàn),否則只能實(shí)現(xiàn)并發(fā)(偽并行)

并行圖解:

串行, 并行, 并發(fā)總結(jié)如下:

  • 串行:  一個(gè)CPU上,按順序完成多個(gè)任務(wù)
  • 并行: 多個(gè)cpu上, 同時(shí)執(zhí)行多個(gè)任務(wù)(任務(wù)數(shù)<=CPU核數(shù))
  • 并發(fā): 一個(gè)cpu上, 交替執(zhí)行多個(gè)任務(wù)

二、進(jìn)程 & 線(xiàn)程 & 協(xié)程

1. 進(jìn)程

進(jìn)程是資源(CPU、內(nèi)存等)分配的基本單位,它是程序執(zhí)行時(shí)的一個(gè)實(shí)例.程序運(yùn)行時(shí)系統(tǒng)就會(huì)創(chuàng)建一個(gè)進(jìn)程,并為它分配資源,然后把該進(jìn)程放入進(jìn)程就緒隊(duì)列,進(jìn)程調(diào)度器選中它的時(shí)候就會(huì)為它分配CPU時(shí)間,程序開(kāi)始真正運(yùn)行.

進(jìn)程的優(yōu)點(diǎn):

  • 可以使用計(jì)算機(jī)多核,進(jìn)行任務(wù)的并行執(zhí)行,提高執(zhí)行效率
  • 運(yùn)行不受其他進(jìn)程影響,創(chuàng)建方便
  • 空間獨(dú)立,數(shù)據(jù)安全

進(jìn)程的缺點(diǎn):

  • 進(jìn)程的創(chuàng)建和刪除消耗的系統(tǒng)資源較多

2. 線(xiàn)程

線(xiàn)程是程序執(zhí)行時(shí)的最小單位,也是CPU調(diào)度和分派的基本單位.一個(gè)進(jìn)程可以由很多個(gè)線(xiàn)程組成,擁有自己獨(dú)立的棧和共享的堆,共享堆,不共享?xiàng)#瑯?biāo)準(zhǔn)線(xiàn)程由操作系統(tǒng)調(diào)度. 線(xiàn)程由CPU獨(dú)立調(diào)度執(zhí)行,在多CPU環(huán)境下就允許多個(gè)線(xiàn)程同時(shí)運(yùn)行. 同樣多線(xiàn)程也可以實(shí)現(xiàn)并發(fā)操作,每個(gè)請(qǐng)求分配一個(gè)線(xiàn)程來(lái)處理.

多線(xiàn)程多線(xiàn)程可以理解為在同一個(gè)程序中能夠同時(shí)運(yùn)行多個(gè)不同的線(xiàn)程來(lái)執(zhí)行不同的任務(wù),這些線(xiàn)程可以同時(shí)利用CPU的多個(gè)核心運(yùn)行. 多線(xiàn)程編程能夠最大限度的利用CPU的資源: 如果某些線(xiàn)程不需要占用CPU時(shí)間片時(shí), 可以讓出當(dāng)前時(shí)間片, 讓其他線(xiàn)程獲取到CPU資源. 以此來(lái)達(dá)到最大限度利用CPU資源的目的. 這個(gè)過(guò)程也被成為上下文切換。

線(xiàn)程生命周期線(xiàn)程主要有“**新建”(NEW)、“就緒”(RUNNABLE)、“運(yùn)行”(RUNNING)、“阻塞”(BLOCKED)、“死亡”(DEAD)**** 五種狀態(tài). 各狀態(tài)間的轉(zhuǎn)換如下圖所示:

注意事項(xiàng):

  • 在運(yùn)行過(guò)程中,線(xiàn)程由就緒態(tài)(RUNNABLE )轉(zhuǎn)為非就緒態(tài)(BLOCKED )的過(guò)程就是線(xiàn)程上下文切換
  • 線(xiàn)程的狀態(tài)由運(yùn)行轉(zhuǎn)為阻塞 ,再由阻塞轉(zhuǎn)為就緒 ,然后再被調(diào)度器選中執(zhí)行,這就是一個(gè)上下文切換的過(guò)程
  • 當(dāng)一個(gè)線(xiàn)程從運(yùn)行狀態(tài)轉(zhuǎn)為阻塞狀態(tài)時(shí),我們稱(chēng)為一個(gè)線(xiàn)程的暫停,線(xiàn)程暫停被切出之后,操作系統(tǒng)會(huì)保存相應(yīng)的上下文,以便這個(gè)線(xiàn)程稍后再次進(jìn)入就緒狀態(tài)時(shí)能夠在之前執(zhí)行進(jìn)度的基礎(chǔ)上繼續(xù)執(zhí)行
  • 當(dāng)一個(gè)線(xiàn)程從阻塞狀態(tài)進(jìn)入到就緒狀態(tài)時(shí),我們稱(chēng)為一個(gè)線(xiàn)程的喚醒,此時(shí)線(xiàn)程將獲取上次保存的上下文繼續(xù)完成執(zhí)行
  • 頻繁的上下文切換會(huì)帶來(lái)系統(tǒng)開(kāi)銷(xiāo), 因此會(huì)導(dǎo)致系統(tǒng)性能下降. 所以我們?cè)谑褂枚嗑€(xiàn)程是應(yīng)該盡量避免出現(xiàn)上下文切換.

3. 協(xié)程

協(xié)程也叫作纖程(Fiber),是一種在線(xiàn)程中,比線(xiàn)程更加輕量級(jí)的存在,由程序員自己寫(xiě)程序來(lái)管理.我們可以將協(xié)程理解為運(yùn)行在線(xiàn)程上的代碼塊, 協(xié)程掛起并不會(huì)引起線(xiàn)程阻塞, 他的作用是提高線(xiàn)程的利用率.. 協(xié)程之間可以依靠郵箱來(lái)進(jìn)行通信和數(shù)據(jù)共享, 了避免內(nèi)存共享數(shù)據(jù)而帶來(lái)的線(xiàn)程安全問(wèn)題. 因?yàn)槠漭p量和高利用率的特點(diǎn), 即使創(chuàng)建上千個(gè)線(xiàn)程也不會(huì)對(duì)系統(tǒng)造成很大負(fù)擔(dān), 而線(xiàn)程則恰恰相反. 協(xié)程是一種設(shè)計(jì)思想,不僅僅局限于某一門(mén)語(yǔ)言. 在Go, Java, Python 等語(yǔ)言中均有實(shí)現(xiàn)。

協(xié)程的核心(控制流的讓出和恢復(fù)):

  • 每個(gè)協(xié)程有自己的執(zhí)行棧,可以保存自己的執(zhí)行現(xiàn)場(chǎng)
  • 可以由用戶(hù)程序按需創(chuàng)建協(xié)程(比如:遇到io操作)
  • 協(xié)程“主動(dòng)讓出(yield)”執(zhí)行權(quán)時(shí)候,會(huì)保存執(zhí)行現(xiàn)場(chǎng)(保存中斷時(shí)的寄存器上下文和棧),然后切換到其他協(xié)程
  • 協(xié)程恢復(fù)執(zhí)行(resume)時(shí),根據(jù)之前保存的執(zhí)行現(xiàn)場(chǎng)恢復(fù)到中斷前的狀態(tài),繼續(xù)執(zhí)行,這樣就通過(guò)協(xié)程實(shí)現(xiàn)了輕量的由用戶(hù)態(tài)調(diào)度的多任務(wù)模

進(jìn)程和線(xiàn)程之間的區(qū)別:

  • 每個(gè)進(jìn)程都有獨(dú)立的代碼和數(shù)據(jù)空間(進(jìn)程上下文),進(jìn)程間的切換會(huì)有較大的開(kāi)銷(xiāo).
  • 線(xiàn)程可以看成是輕量級(jí)的進(jìn)程,屬于同一進(jìn)程的線(xiàn)程共享代碼和數(shù)據(jù)空間,每個(gè)線(xiàn)程有獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器(PC),線(xiàn)程切換的開(kāi)銷(xiāo)小.
  • 線(xiàn)程和進(jìn)程最根本的區(qū)別在于:進(jìn)程是資源分配的單位,線(xiàn)程是調(diào)度和執(zhí)行的單位.
  • 多進(jìn)程: 在操作系統(tǒng)中能同時(shí)運(yùn)行多個(gè)任務(wù)(程序).
  • 多線(xiàn)程: 在同一應(yīng)用程序中有多個(gè)順序流同時(shí)執(zhí)行.
  • 線(xiàn)程是進(jìn)程的一部分,所以線(xiàn)程有的時(shí)候被稱(chēng)為輕量級(jí)進(jìn)程.
  • 一個(gè)沒(méi)有線(xiàn)程的進(jìn)程是可以被看作單線(xiàn)程的,如果一個(gè)進(jìn)程內(nèi)擁有多個(gè)線(xiàn)程,進(jìn)程的執(zhí)行過(guò)程不是一條線(xiàn)(線(xiàn)程)的,而是多條線(xiàn)(線(xiàn)程)共同完成的.
  • 系統(tǒng)在運(yùn)行的時(shí)候會(huì)為每個(gè)進(jìn)程分配不同的內(nèi)存區(qū)域,但是不會(huì)為線(xiàn)程分配內(nèi)存(線(xiàn)程所使用的資源是它所屬的進(jìn)程的資源),線(xiàn)程組只能共享資源.

線(xiàn)程, 進(jìn)程, 協(xié)程之間區(qū)別如圖所示:

三、同步 & 異步

同步和異步強(qiáng)調(diào)的是消息通信機(jī)制。

1. 同步

同步(synchronous):A調(diào)用B,等待B返回結(jié)果后,A繼續(xù)執(zhí)行.在同步的過(guò)程中, 存在一個(gè)等待的狀態(tài). 即: 某個(gè)事情執(zhí)行時(shí)需要等待另一個(gè)個(gè)事情的結(jié)果, 才能繼續(xù)向下執(zhí)行。

以打電話(huà)為例:A向B打電話(huà)時(shí), 發(fā)出電話(huà)邀請(qǐng), 只有B同意接聽(tīng)之后才會(huì)進(jìn)行通話(huà), 否則會(huì)一直處于等待狀態(tài)(阻塞). 這一過(guò)程稱(chēng)為同步。

2. 異步

異步(asynchronous ):A調(diào)用B,A繼續(xù)執(zhí)行,不等待B返回結(jié)果;B有結(jié)果了,通知A,A再做處理.

以發(fā)短信為例:A在給B發(fā)消息, 無(wú)需等待B的反饋, 便可以給C發(fā)消息. 這一過(guò)程成為異步.

今日冒險(xiǎn)片段下:

在這千鈞一發(fā)之際, 了不起突然想到了之前奧菲利亞送的卷軸. 利用這個(gè)卷軸可以召喚精靈王伊莎貝拉的虛影, 并存在一段時(shí)間. 于是二人便利用精靈王的虛影拖住影子劍士剎影, 先將實(shí)力較弱的狩魂者和莫比擊敗, 然后在三對(duì)一的情況下, 花費(fèi)接近一天的時(shí)間, 艱難的將這個(gè)劍士擊敗. 在未來(lái)的某一刻, 想到這里, 他們肯定會(huì)自豪, 因?yàn)樗麄儞魯〉氖且粋€(gè)能自由穿梭時(shí)空的職業(yè), 并精通鬼劍士四系職業(yè)的第五職業(yè)——暗黑武士. 就這樣, 擊敗領(lǐng)主剎影之后, 了不起也順利的晉升到了lv29.

責(zé)任編輯:趙寧寧 來(lái)源: Python技術(shù)
相關(guān)推薦

2025-01-20 13:19:02

2024-12-23 16:00:00

GUI編程tkinter

2025-03-24 10:06:35

2025-02-24 10:17:48

2025-03-04 07:40:00

Python模塊開(kāi)發(fā)

2025-03-03 10:16:04

2025-02-18 08:30:00

GUIPythontkinter

2024-12-23 14:54:47

2019-10-24 09:29:13

編程Python程序

2012-12-28 13:35:37

網(wǎng)絡(luò)無(wú)線(xiàn)網(wǎng)絡(luò)

2015-07-28 17:11:00

編程技術(shù)提升

2012-03-19 11:41:30

JavaSocket

2023-07-03 09:59:00

并發(fā)編程并發(fā)容器

2021-12-12 18:15:06

Python并發(fā)編程

2023-10-18 15:19:56

2016-10-31 20:13:41

大數(shù)據(jù)數(shù)據(jù)分析

2019-03-06 16:00:14

服務(wù)器架構(gòu)系統(tǒng)

2009-09-08 14:30:57

CCNA認(rèn)證考試

2018-03-21 21:31:28

Java9編程Java

2017-09-19 14:53:37

Java并發(fā)編程并發(fā)代碼設(shè)計(jì)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 五月婷六月丁香 | 国产盗摄视频 | 91在线免费视频 | 日韩一级在线 | 国产精品成人品 | 一a一片一级一片啪啪 | 中文在线一区二区 | 一区二区三区国产精品 | 国产一区二区av | 久草资源 | 国产91丝袜| 人妖无码 | 欧美在线视频a | 亚洲一二三区不卡 | 91超碰在线观看 | 久久精品国产久精国产 | 亚洲一区二区在线 | 久久婷婷av| 午夜影院 | av中文字幕在线播放 | 91九色视频 | 涩色视频在线观看 | 欧美aaaaa| 在线免费观看黄视频 | 欧美日一区 | 国产精品五区 | 成人av激情 | 国产一区视频在线 | www.久久| 在线观看亚洲精品视频 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 国产精品久久久久久久免费观看 | 日韩欧美综合在线视频 | 一级高清 | 亚洲精品播放 | 国产精品久久久久久福利一牛影视 | 久久久久久久久久久久一区二区 | 激情av在线| 午夜视频在线 | 国产又爽又黄的视频 | 欧美亚洲另类丝袜综合网动图 |