女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python中的多核CPU共享數(shù)據(jù)之協(xié)程詳解

馬哥Linux運(yùn)維 ? 2017-12-07 10:23 ? 次閱讀

一 : 科普一分鐘

盡管進(jìn)程間是獨(dú)立存在的,不能相互訪問(wèn)彼此的數(shù)據(jù),但是在python中卻存在進(jìn)程間的通信方法,來(lái)幫助我們可以利用多核CPU也能共享數(shù)據(jù).

對(duì)于多線程其實(shí)也是存在一些缺點(diǎn)的,不是任何場(chǎng)景我們都用多線程來(lái)完成并發(fā)處理任務(wù),因?yàn)镃PU操作線程,所以線程多了,對(duì)于計(jì)算機(jī)的資源消耗是十分嚴(yán)重的,多線程適合IO操作密集的任務(wù),那么怎么辦呢, 協(xié)程的出現(xiàn)幫我們解決了這個(gè)問(wèn)題 ,協(xié)程是比線程更小的一個(gè)單位,但是它的作用卻不容忽視.

二 : 多進(jìn)程

1.多進(jìn)程簡(jiǎn)單了解 :

進(jìn)程之間是獨(dú)立的,是操作系統(tǒng)自己來(lái)維護(hù)和管理的,python通過(guò)C接口起了一個(gè)進(jìn)程,多進(jìn)程可以充分的利用多核CPU

2. 多進(jìn)程的創(chuàng)建 :

3. 多進(jìn)程間的通信 :

進(jìn)程間獨(dú)立,如果想相互訪問(wèn),就必須有一個(gè)中間翻譯,下面提供了幾種進(jìn)程間通信的方法。

進(jìn)程Queue

解析 :

Queue通信,相當(dāng)于父進(jìn)程賦值了一個(gè)Queue給子進(jìn)程,子進(jìn)程在這個(gè)Queue放好數(shù)據(jù)后,序列化一個(gè)中間翻譯,然后在反序列化返回給父進(jìn)程,

因?yàn)檫M(jìn)程之間內(nèi)存獨(dú)立,不能傳遞對(duì)象傳遞的其實(shí)就是序列化的數(shù)據(jù)

Pipe

多進(jìn)程還有一種數(shù)據(jù)傳遞方式叫管道原理和Queue相同

4. 進(jìn)程鎖

雖然內(nèi)存獨(dú)立,但是即使是打印也會(huì)造成打印數(shù)據(jù)錯(cuò)誤,為了防止進(jìn)程間搶屏幕打印輸出,加了進(jìn)程鎖。

5. 進(jìn)程池

創(chuàng)建一個(gè)子進(jìn)程相當(dāng)于copy一份父進(jìn)程內(nèi)存數(shù)據(jù),為了防止頻繁創(chuàng)建,導(dǎo)致內(nèi)存不足,所以有了進(jìn)程池作為限制。

三 : 協(xié)程

1. 協(xié)程的簡(jiǎn)單了解 :

協(xié)程又稱微線程,coroutne,協(xié)程是一種用戶態(tài)的輕量級(jí)線程。通俗點(diǎn)講就是周末我在家里休息,假如我先洗漱,再煮飯,再下載電影看會(huì)很慢,用了協(xié)程的效果就好比,我在下載電影的時(shí)候去點(diǎn)火煮飯,此時(shí)我馬上洗漱,等我洗漱好了,飯也好了,吃完飯了,電影下好了,我可以看了。

2. 協(xié)程的創(chuàng)建和使用:

gevent是一個(gè)三方庫(kù),可以輕松通過(guò)gevent實(shí)現(xiàn)并發(fā)同步或者異步編程。

解析:嘗試運(yùn)行發(fā)現(xiàn),運(yùn)行時(shí)間為Sleep最長(zhǎng)的時(shí)間,也就是說(shuō)協(xié)程能繞過(guò)IO,進(jìn)行執(zhí)行,極大的提高了效率.

IO(從硬盤(pán)上讀一塊數(shù)據(jù),從網(wǎng)絡(luò)讀數(shù)據(jù),從內(nèi)存里讀一塊數(shù)據(jù)) 操作不占用CPU,計(jì)算占用CPU

3. 協(xié)程簡(jiǎn)單爬網(wǎng)頁(yè) :

4. 協(xié)程實(shí)現(xiàn)socketServer:

通過(guò)協(xié)程,我們可以寫(xiě)出一個(gè)socketServer,真正socketServer的底層是用多線程來(lái)實(shí)現(xiàn),我們用寫(xiě)成寫(xiě)出的效率很高,而且非常節(jié)省內(nèi)存

四 : 總結(jié)

協(xié)程的優(yōu)點(diǎn):

線程在單線程下切換,減少資源消耗

無(wú)需原子操作控制流,簡(jiǎn)化編程模型

高并發(fā),高擴(kuò)展,低成本.

無(wú)論是多進(jìn)程,多線程還是協(xié)程在不同的場(chǎng)景用不同的模型才能高效的完成任務(wù).

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11033

    瀏覽量

    215967
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4825

    瀏覽量

    86163

原文標(biāo)題:Python篇-多進(jìn)程與協(xié)程的理解與使用

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    談?wù)?b class='flag-5'>協(xié)的那些事兒

    隨著異步編程的發(fā)展以及各種并發(fā)框架的普及,協(xié)作為一種異步編程規(guī)范在各類(lèi)語(yǔ)言中地位逐步提高。我們不單單會(huì)在自己的程序中使用協(xié),各類(lèi)框架如fastapi,aiohttp等也都是基于異步
    的頭像 發(fā)表于 01-26 11:36 ?1359次閱讀
    談?wù)?b class='flag-5'>協(xié)</b><b class='flag-5'>程</b>的那些事兒

    進(jìn)程、線程、協(xié)傻傻分不清?一文帶你徹底扒光它們的\"底褲\"!

    ;) ? asyncio.run(main()) 輸出結(jié)果: markdown 抓取完成!共 10 條數(shù)據(jù) 「三大門(mén)派」終極對(duì)比表(含「社死」現(xiàn)場(chǎng)) 特性 進(jìn)程 線程 協(xié) 資源開(kāi)銷(xiāo) 高(買(mǎi)房)
    發(fā)表于 03-26 09:27

    基于共享內(nèi)存多核數(shù)據(jù)結(jié)構(gòu)研究

    隨著計(jì)算機(jī)硬件技術(shù)的發(fā)展,如今我們已經(jīng)邁入了多核CPU時(shí)代.然而,作為軟件核心的數(shù)據(jù)結(jié)構(gòu)仍然是按照單核CPU和順序型準(zhǔn)則來(lái)設(shè)計(jì)的.在基于共享
    發(fā)表于 01-15 11:34 ?0次下載

    Python自動(dòng)化運(yùn)維協(xié)函數(shù)賦值過(guò)程

    協(xié)的優(yōu)點(diǎn):(1)無(wú)需線程上下文切換的開(kāi)銷(xiāo),協(xié)避免了無(wú)意義的調(diào)度,由此可以提高性能(但也因此,程序員必須自己承擔(dān)調(diào)度的責(zé)任,同時(shí),協(xié)
    的頭像 發(fā)表于 03-18 11:22 ?3887次閱讀

    關(guān)于C++ 20協(xié)最全面詳解

    花了一兩周的時(shí)間后,我想寫(xiě)寫(xiě) C++20 協(xié)的基本用法,因?yàn)?C++ 的協(xié)讓我感到很奇怪,寫(xiě)一個(gè)協(xié)
    的頭像 發(fā)表于 04-12 11:10 ?1.3w次閱讀
    關(guān)于C++ 20<b class='flag-5'>協(xié)</b><b class='flag-5'>程</b>最全面<b class='flag-5'>詳解</b>

    Python后端項(xiàng)目的協(xié)是什么

    最近公司 Python 后端項(xiàng)目進(jìn)行重構(gòu),整個(gè)后端邏輯基本都變更為采用“異步”協(xié)的方式實(shí)現(xiàn)。看著滿屏幕經(jīng)過(guò) async await(協(xié)
    的頭像 發(fā)表于 09-23 14:38 ?1486次閱讀

    Python協(xié)與JavaScript協(xié)的對(duì)比及經(jīng)驗(yàn)技巧

    對(duì)這兩個(gè)語(yǔ)言有興趣的新人理解和吸收。 共同訴求隨著 cpu 多核化,都需要實(shí)現(xiàn)由于自身歷史原因(單線程環(huán)境)下的并發(fā)功能 簡(jiǎn)化代碼,避免回調(diào)地獄,關(guān)鍵字支持 有效利用操作系統(tǒng)資源和硬件:協(xié)
    的頭像 發(fā)表于 10-20 14:30 ?2100次閱讀

    使用channel控制協(xié)數(shù)量

    goroutine 是輕量級(jí)線程,調(diào)度由 Go 運(yùn)行時(shí)進(jìn)行管理的。Go 語(yǔ)言的并發(fā)控制主要使用關(guān)鍵字 go 開(kāi)啟協(xié) goroutine。Go 協(xié)(Goroutine)之間通過(guò)信道(
    的頭像 發(fā)表于 09-19 15:06 ?1321次閱讀

    詳解Linux線程、線程與異步編程、協(xié)與異步

    協(xié)不是系統(tǒng)級(jí)線程,很多時(shí)候協(xié)被稱為“輕量級(jí)線程”、“微線程”、“纖(fiber)”等。簡(jiǎn)單來(lái)說(shuō)可以認(rèn)為
    的頭像 發(fā)表于 03-16 15:49 ?1287次閱讀

    協(xié)的概念及協(xié)的掛起函數(shù)介紹

    協(xié)是一種輕量級(jí)的線程,它可以在單個(gè)線程實(shí)現(xiàn)并發(fā)執(zhí)行。與線程不同,協(xié)不需要操作系統(tǒng)的上下文切換,因此可以更高效地使用系統(tǒng)資源。Kotli
    的頭像 發(fā)表于 04-19 10:20 ?1125次閱讀

    Kotlin協(xié)實(shí)戰(zhàn)進(jìn)階筑基篇1

    。 Android 的每個(gè)應(yīng)用都會(huì)運(yùn)行一個(gè)主線程,它主要是用來(lái)處理 UI,如果主線程上需要處理的任務(wù)太多,應(yīng)用就感覺(jué)被卡主一樣影響用戶體驗(yàn),得讓那些耗時(shí)的任務(wù)不阻塞主線程的運(yùn)行。要做到處理網(wǎng)絡(luò)請(qǐng)求不會(huì)阻塞主線程,一個(gè)常用的做法就是使用回調(diào),另一種是使用協(xié)
    的頭像 發(fā)表于 05-30 16:24 ?1040次閱讀
    Kotlin<b class='flag-5'>協(xié)</b><b class='flag-5'>程</b>實(shí)戰(zhàn)進(jìn)階<b class='flag-5'>之</b>筑基篇1

    Kotlin協(xié)實(shí)戰(zhàn)進(jìn)階筑基篇2

    。 Android 的每個(gè)應(yīng)用都會(huì)運(yùn)行一個(gè)主線程,它主要是用來(lái)處理 UI,如果主線程上需要處理的任務(wù)太多,應(yīng)用就感覺(jué)被卡主一樣影響用戶體驗(yàn),得讓那些耗時(shí)的任務(wù)不阻塞主線程的運(yùn)行。要做到處理網(wǎng)絡(luò)請(qǐng)求不會(huì)阻塞主線程,一個(gè)常用的做法就是使用回調(diào),另一種是使用協(xié)
    的頭像 發(fā)表于 05-30 16:25 ?1027次閱讀
    Kotlin<b class='flag-5'>協(xié)</b><b class='flag-5'>程</b>實(shí)戰(zhàn)進(jìn)階<b class='flag-5'>之</b>筑基篇2

    Kotlin協(xié)實(shí)戰(zhàn)進(jìn)階筑基篇3

    。 Android 的每個(gè)應(yīng)用都會(huì)運(yùn)行一個(gè)主線程,它主要是用來(lái)處理 UI,如果主線程上需要處理的任務(wù)太多,應(yīng)用就感覺(jué)被卡主一樣影響用戶體驗(yàn),得讓那些耗時(shí)的任務(wù)不阻塞主線程的運(yùn)行。要做到處理網(wǎng)絡(luò)請(qǐng)求不會(huì)阻塞主線程,一個(gè)常用的做法就是使用回調(diào),另一種是使用協(xié)
    的頭像 發(fā)表于 05-30 16:26 ?926次閱讀

    FreeRTOS任務(wù)與協(xié)介紹

    FreeRTOS 應(yīng)用既可以使用任務(wù),也可以使用協(xié)(Co-Routine),或者兩者混合使用。但是任務(wù)和協(xié)使用不同的API函數(shù),因此不能通過(guò)隊(duì)列(或信號(hào)量)將
    的頭像 發(fā)表于 09-28 11:02 ?1205次閱讀

    何選擇一個(gè)合適的協(xié)來(lái)獲得CPU執(zhí)行權(quán)

    如今雖不敢說(shuō)協(xié)已經(jīng)是紅的發(fā)紫,但確實(shí)是越來(lái)越受到了大家的重視。Golang的已經(jīng)是只有g(shù)oroutine,以至于很多go程序員是只知有協(xié)
    的頭像 發(fā)表于 11-13 14:10 ?566次閱讀
    何選擇一個(gè)合適的<b class='flag-5'>協(xié)</b><b class='flag-5'>程</b>來(lái)獲得<b class='flag-5'>CPU</b>執(zhí)行權(quán)