python和golang協(xié)程學(xué)習(xí)雜記

今天在學(xué)python協(xié)程的時(shí)候有一些疑惑绞佩,向源源大神請(qǐng)教了一下寺鸥,學(xué)到好多,總結(jié)一下品山。

python是線程安全的

python語(yǔ)言的基本數(shù)據(jù)結(jié)構(gòu)設(shè)定的時(shí)候就是線程安全的胆建,一個(gè)線程執(zhí)行的時(shí)候,會(huì)有GIL鎖肘交,別的線程拿不到鎖無(wú)法執(zhí)行笆载,所以python沒辦法多線程并發(fā)。所以python的多線程是個(gè)特例涯呻。

CPU的最小調(diào)度單元是線程不是進(jìn)程凉驻,所以單進(jìn)程多線程也可以利用多核CPU

以前學(xué)操作系統(tǒng)的時(shí)候,記得CPU一次只能執(zhí)行一個(gè)進(jìn)程复罐,別的進(jìn)程只能等待涝登。沒有錯(cuò),但是要明確一點(diǎn) “CPU的最小調(diào)度單元是線程不是進(jìn)程”效诅。

項(xiàng)目一般分類為計(jì)算密集型和IO密集型

對(duì)于I/O密集型胀滚,一般不會(huì)用python做趟济,因?yàn)椴荒苡枚嗑€程。
對(duì)于異步I/O咽笼,雖然不能利用多線程顷编,但是可以利用協(xié)程
python2的gevent或是greenlet庫(kù)是python3的async io出來(lái)前的協(xié)程解決方案
但是gevent和greenlet的學(xué)習(xí)成本比較大,對(duì)于I/O密集型可以選擇golang褐荷。

golang的語(yǔ)言特性

goalng沒有多進(jìn)程勾效,它是單進(jìn)程:m線程:n協(xié)程的結(jié)構(gòu),由于CPU的執(zhí)行最小單元是線程叛甫,所以golang可以有效利用多核。但是golang的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)比如map就不是線程安全杨伙,有時(shí)候要考慮加鎖其监。那么在加鎖的情況下,golang其實(shí)這段代碼其實(shí)同時(shí)只有一個(gè)協(xié)程可以跑限匣。

golang的協(xié)程

golang的goroutine是語(yǔ)言自帶的協(xié)程,實(shí)現(xiàn)起來(lái)沒有歷史包袱抖苦,可以有效的利用多核,在一些新內(nèi)核特性的支持下米死,它的I/O處理性能可以非承坷恐怖。并且編程復(fù)雜度也不是很高峦筒。

協(xié)程

一般來(lái)說(shuō)協(xié)程都是n:m的協(xié)程究西,即n個(gè)協(xié)程在m個(gè)線程里跑,有一個(gè)runtime協(xié)程作為調(diào)度物喷,所以可以有效利用多核卤材。
但是python的協(xié)程是n:1的協(xié)程,即n個(gè)協(xié)程在1個(gè)線程里跑峦失,可以實(shí)現(xiàn)異步I/O扇丛,但是不能有效利用多核。

對(duì)于I/O 密集型尉辑,python可以利用協(xié)程來(lái)解決帆精,有非阻塞I/O,不需要多核隧魄,比如node就是計(jì)算單線程卓练,I/O用的內(nèi)部的線程池。Python加入async io后堤器,可能會(huì)對(duì)一些場(chǎng)景下的io性能有提升

python的協(xié)程庫(kù)

gevent(greenlet)應(yīng)該可以用n:m協(xié)程模式昆庇。python把輸入給gevent模塊,gevent自己里面的C模塊調(diào)用新的一套進(jìn)程線程模式闸溃,把結(jié)果返回給python整吆。所謂的n:m指的是gevent里的實(shí)現(xiàn)拱撵,跟python沒什么關(guān)系,是透明的表蝙,所以可以是n:m模式拴测。(所謂“語(yǔ)言的擴(kuò)展”用另一門語(yǔ)言來(lái)擴(kuò)充當(dāng)前語(yǔ)言的語(yǔ)法,相當(dāng)與你擴(kuò)充了Python的語(yǔ)法用法特性)

庫(kù)

庫(kù)分為原生的和二進(jìn)制封裝的府蛇。原生代碼就是說(shuō)用Python寫了一個(gè)Python庫(kù)集索,然后用Python執(zhí)行它,它的所有特性都在Python解釋器的語(yǔ)法用法范圍內(nèi)汇跨。但是也可以用C寫一個(gè)Python庫(kù)务荆,編譯成動(dòng)態(tài)鏈接庫(kù),然后在Python里面執(zhí)行它穷遂,執(zhí)行到這個(gè)庫(kù)的時(shí)候函匕,邏輯就到了的動(dòng)態(tài)鏈接庫(kù)里,這個(gè)時(shí)候Python解釋器是控制不了的蚪黑,也就相當(dāng)與擴(kuò)充了Python的語(yǔ)法用法特性盅惜。平常所見的NumPy,Gevent忌穿,TensorFlow都是后者抒寂。

對(duì)于計(jì)算密集型

對(duì)于計(jì)算密集型,python和node之類的就要利用多進(jìn)程來(lái)彌補(bǔ)計(jì)算資源的不足掠剑,但是golang多線程就會(huì)比較自然了屈芜。

由一個(gè)協(xié)程問題請(qǐng)教了這么多,不是說(shuō)golang比python好澡腾,只是在某些特性方面各有利弊沸伏。python類似一個(gè)膠水語(yǔ)言,簡(jiǎn)單易學(xué)易上手动分,入手快毅糟,不用編譯,腳本型語(yǔ)言澜公,然后在高性能庫(kù)/應(yīng)用中間做一個(gè)膠水姆另。但是這么好上手還是學(xué)起來(lái)。

最后發(fā)個(gè)源源大神愛的抱抱~ 筆芯~ ????????????????????


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坟乾,一起剝皮案震驚了整個(gè)濱河市迹辐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌甚侣,老刑警劉巖明吩,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異殷费,居然都是意外死亡印荔,警方通過查閱死者的電腦和手機(jī)低葫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)仍律,“玉大人嘿悬,你說(shuō)我怎么就攤上這事∷” “怎么了善涨?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)草则。 經(jīng)常有香客問我钢拧,道長(zhǎng),這世上最難降的妖魔是什么畔师? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任娶靡,我火速辦了婚禮,結(jié)果婚禮上看锉,老公的妹妹穿的比我還像新娘。我一直安慰自己塔鳍,他們只是感情好伯铣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著轮纫,像睡著了一般腔寡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掌唾,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天放前,我揣著相機(jī)與錄音,去河邊找鬼糯彬。 笑死凭语,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的撩扒。 我是一名探鬼主播似扔,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼搓谆!你這毒婦竟也來(lái)了炒辉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤泉手,失蹤者是張志新(化名)和其女友劉穎黔寇,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斩萌,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缝裤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年屏轰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倘是。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡亭枷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出搀崭,到底是詐尸還是另有隱情叨粘,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布瘤睹,位于F島的核電站升敲,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏轰传。R本人自食惡果不足惜驴党,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望获茬。 院中可真熱鬧港庄,春花似錦、人聲如沸恕曲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)佩谣。三九已至把还,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茸俭,已是汗流浹背吊履。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留调鬓,地道東北人艇炎。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像袖迎,于是被迫代替她去往敵國(guó)和親冕臭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355