91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python中的多核CPU共享數據之協程詳解

馬哥Linux運維 ? 2017-12-07 10:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一 : 科普一分鐘

盡管進程間是獨立存在的,不能相互訪問彼此的數據,但是在python中卻存在進程間的通信方法,來幫助我們可以利用多核CPU也能共享數據.

對于多線程其實也是存在一些缺點的,不是任何場景我們都用多線程來完成并發處理任務,因為CPU操作線程,所以線程多了,對于計算機的資源消耗是十分嚴重的,多線程適合IO操作密集的任務,那么怎么辦呢, 協程的出現幫我們解決了這個問題 ,協程是比線程更小的一個單位,但是它的作用卻不容忽視.

二 : 多進程

1.多進程簡單了解 :

進程之間是獨立的,是操作系統自己來維護和管理的,python通過C接口起了一個進程,多進程可以充分的利用多核CPU

2. 多進程的創建 :

3. 多進程間的通信 :

進程間獨立,如果想相互訪問,就必須有一個中間翻譯,下面提供了幾種進程間通信的方法。

進程Queue

解析 :

Queue通信,相當于父進程賦值了一個Queue給子進程,子進程在這個Queue放好數據后,序列化一個中間翻譯,然后在反序列化返回給父進程,

因為進程之間內存獨立,不能傳遞對象傳遞的其實就是序列化的數據

Pipe

多進程還有一種數據傳遞方式叫管道原理和Queue相同

4. 進程鎖

雖然內存獨立,但是即使是打印也會造成打印數據錯誤,為了防止進程間搶屏幕打印輸出,加了進程鎖。

5. 進程池

創建一個子進程相當于copy一份父進程內存數據,為了防止頻繁創建,導致內存不足,所以有了進程池作為限制。

三 : 協程

1. 協程的簡單了解 :

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

2. 協程的創建和使用:

gevent是一個三方庫,可以輕松通過gevent實現并發同步或者異步編程

解析:嘗試運行發現,運行時間為Sleep最長的時間,也就是說協程能繞過IO,進行執行,極大的提高了效率.

IO(從硬盤上讀一塊數據,從網絡讀數據,從內存里讀一塊數據) 操作不占用CPU,計算占用CPU

3. 協程簡單爬網頁 :

4. 協程實現socketServer:

通過協程,我們可以寫出一個socketServer,真正socketServer的底層是用多線程來實現,我們用寫成寫出的效率很高,而且非常節省內存

四 : 總結

協程的優點:

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

無需原子操作控制流,簡化編程模型

高并發,高擴展,低成本.

無論是多進程,多線程還是協程在不同的場景用不同的模型才能高效的完成任務.

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11080

    瀏覽量

    217132
  • python
    +關注

    關注

    56

    文章

    4827

    瀏覽量

    86786

原文標題:Python篇-多進程與協程的理解與使用

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    談談的那些事兒

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

    進程、線程、傻傻分不清?一文帶你徹底扒光它們的\"底褲\"!

    ;) ? asyncio.run(main()) 輸出結果: markdown 抓取完成!共 10 條數據 「三大門派」終極對比表(含「社死」現場) 特性 進程 線程 資源開銷 高(買房)
    發表于 03-26 09:27

    基于共享內存多核數據結構研究

    隨著計算機硬件技術的發展,如今我們已經邁入了多核CPU時代.然而,作為軟件核心的數據結構仍然是按照單核CPU和順序型準則來設計的.在基于共享
    發表于 01-15 11:34 ?0次下載

    Python自動化運維函數賦值過程

    的優點:(1)無需線程上下文切換的開銷,避免了無意義的調度,由此可以提高性能(但也因此,程序員必須自己承擔調度的責任,同時,
    的頭像 發表于 03-18 11:22 ?3930次閱讀

    關于C++ 20最全面詳解

    花了一兩周的時間后,我想寫寫 C++20 的基本用法,因為 C++ 的讓我感到很奇怪,寫一個
    的頭像 發表于 04-12 11:10 ?1.4w次閱讀
    關于C++ 20<b class='flag-5'>協</b><b class='flag-5'>程</b>最全面<b class='flag-5'>詳解</b>

    Python后端項目的是什么

    最近公司 Python 后端項目進行重構,整個后端邏輯基本都變更為采用“異步”的方式實現。看著滿屏幕經過 async await(
    的頭像 發表于 09-23 14:38 ?1534次閱讀

    Python與JavaScript的對比及經驗技巧

    對這兩個語言有興趣的新人理解和吸收。 共同訴求隨著 cpu 多核化,都需要實現由于自身歷史原因(單線程環境)下的并發功能 簡化代碼,避免回調地獄,關鍵字支持 有效利用操作系統資源和硬件:
    的頭像 發表于 10-20 14:30 ?2159次閱讀

    使用channel控制數量

    goroutine 是輕量級線程,調度由 Go 運行時進行管理的。Go 語言的并發控制主要使用關鍵字 go 開啟 goroutine。Go (Goroutine)之間通過信道(
    的頭像 發表于 09-19 15:06 ?1380次閱讀

    詳解Linux線程、線程與異步編程、與異步

    不是系統級線程,很多時候被稱為“輕量級線程”、“微線程”、“纖(fiber)”等。簡單來說可以認為
    的頭像 發表于 03-16 15:49 ?1438次閱讀

    的概念及的掛起函數介紹

    是一種輕量級的線程,它可以在單個線程實現并發執行。與線程不同,不需要操作系統的上下文切換,因此可以更高效地使用系統資源。Kotli
    的頭像 發表于 04-19 10:20 ?1196次閱讀

    Kotlin實戰進階筑基篇1

    。 Android 的每個應用都會運行一個主線程,它主要是用來處理 UI,如果主線程上需要處理的任務太多,應用就感覺被卡主一樣影響用戶體驗,得讓那些耗時的任務不阻塞主線程的運行。要做到處理網絡請求不會阻塞主線程,一個常用的做法就是使用回調,另一種是使用
    的頭像 發表于 05-30 16:24 ?1103次閱讀
    Kotlin<b class='flag-5'>協</b><b class='flag-5'>程</b>實戰進階<b class='flag-5'>之</b>筑基篇1

    Kotlin實戰進階筑基篇2

    。 Android 的每個應用都會運行一個主線程,它主要是用來處理 UI,如果主線程上需要處理的任務太多,應用就感覺被卡主一樣影響用戶體驗,得讓那些耗時的任務不阻塞主線程的運行。要做到處理網絡請求不會阻塞主線程,一個常用的做法就是使用回調,另一種是使用
    的頭像 發表于 05-30 16:25 ?1065次閱讀
    Kotlin<b class='flag-5'>協</b><b class='flag-5'>程</b>實戰進階<b class='flag-5'>之</b>筑基篇2

    Kotlin實戰進階筑基篇3

    。 Android 的每個應用都會運行一個主線程,它主要是用來處理 UI,如果主線程上需要處理的任務太多,應用就感覺被卡主一樣影響用戶體驗,得讓那些耗時的任務不阻塞主線程的運行。要做到處理網絡請求不會阻塞主線程,一個常用的做法就是使用回調,另一種是使用
    的頭像 發表于 05-30 16:26 ?987次閱讀

    FreeRTOS任務與介紹

    FreeRTOS 應用既可以使用任務,也可以使用(Co-Routine),或者兩者混合使用。但是任務和協使用不同的API函數,因此不能通過隊列(或信號量)將
    的頭像 發表于 09-28 11:02 ?1283次閱讀

    何選擇一個合適的來獲得CPU執行權

    如今雖不敢說已經是紅的發紫,但確實是越來越受到了大家的重視。Golang的已經是只有goroutine,以至于很多go程序員是只知有
    的頭像 發表于 11-13 14:10 ?609次閱讀
    何選擇一個合適的<b class='flag-5'>協</b><b class='flag-5'>程</b>來獲得<b class='flag-5'>CPU</b>執行權
    主站蜘蛛池模板: 亚洲精品乱码久久久久久蜜桃图片 | 曰本女人一级毛片看一级毛 | 久久激情综合网 | 国产一区二区三区美女图片 | 狠狠色狠狠色综合久久一 | 日韩毛片网| 天天激情站 | 午夜影院一区二区三区 | 亚洲地址一地址二地址三 | 成人午夜大片免费视频77777 | 亚洲一区免费在线观看 | 老汉影视永久免费视频 | 日本三级日本三级人妇三级四 | 日本护士69xx00 | 天天欧美 | 99精品在免费线视频 | 69japanese日本100 69ww免费视频播放器 | se视频在线观看 | 欧美乱xxxxxxxxx | 白嫩美女一级高清毛片免费看 | 黄色福利网 | 中文字幕一区二区三区乱码aⅴ | 色丁香影院| 91久久婷婷国产综合精品青草 | 456主播喷水在线观看 | 五月天婷婷在线视频国产在线 | 最近最新中文字幕在线第一页 | 国产成人一区二区三中文 | 123综合网在线 | 欧美一区二区三区综合色视频 | 国产高清不卡一区二区 | 性视频一区 | 午夜在线观看免费视频 | 亚洲免费一级视频 | 亚洲a级毛片 | 狠狠综合 | 亚洲成色在线综合网站 | 黄色一级毛片在线观看 | 欧美一区二区三区视频在线观看 | 国产精品免费视频拍拍拍 | 国产农村一一级特黄毛片 |