丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預覽,將在時失效
人工智能開發(fā)者 正文
發(fā)私信給skura
發(fā)送

0

如何利用并發(fā)性加速你的python程序(一):相關概念

本文作者: skura 2019-01-31 18:48
導語:并發(fā)、并行、CPU綁定、I/O綁定

雷鋒網 AI 科技評論按,作為目前最流行的編程語言之一,python 在人工智能相關的領域備受青睞。在編碼時,代碼的運行時間是我們需要考慮的重要因素之一。如何加快程序運行的速度?這是很多開發(fā)者經常會思考的問題。

工程師 Jim Anderson 分享了他的經驗,他寫了一篇關于「通過并發(fā)性加快 python 程序的速度」的文章。Jim 有多年的編程經驗,并且使用過各種編程語言。他曾做過嵌入式系統(tǒng)相關的工作,開發(fā)過分布式系統(tǒng),并且參加過許多會議。

如果你聽過很多關于 asyncio 被添加到 python 的討論,但是好奇它與其他并發(fā)方法相比怎么樣,或者你很好奇什么是并發(fā),以及它如何加速你的程序,那么你需要看下 Jim Anderson 的這篇文章,雷鋒網編譯整理。

在本文中,你將了解以下內容:

  • 什么是并發(fā)?

  • 什么是并行?

  • 一些 python 并發(fā)方法的比較,包括線程、異步和多進程

  • 在程序中何時使用并發(fā)性以及使用哪個模塊

本文假設讀者對 python 有一個基本的了解,并且使用 python3.6 及以上版來運行示例。你可以從 Real python GitHub repo 下載示例。

什么是并發(fā)?

并發(fā)這個詞在字典里面定義是「同時發(fā)生」。在 python 中,同時發(fā)生的事情由線程、任務、進程調用,但在高層,它們都是指按順序運行的一系列指令。

我喜歡把它們看作是不同的思維方式。它們都可以在特定的點上停止,此時,正在處理它們的 CPU 或大腦可以切換到其它的點上。每件事的狀態(tài)都會被保存,這樣它就可以在中斷的地方重新啟動。

你可能想知道為什么 python 對相同的概念使用不同的詞。事實證明,只有從宏觀意義上看線程、任務和進程時,它們才是相同的。一旦你開始深入了解細節(jié),它們都代表著一些稍微不同的東西。隨著示例的不斷深入,你將看到更多不同之處。

你必須小心謹慎,因為當你深入到細節(jié)的時候,實際上只有多進程在同一時間運行著多個任務。線程和異步都在單個處理器上運行,因此一次只能處理一個任務。他們只是聰明地找到方法輪流加速整個過程。即使它們不同時運行不同的程序,我們仍然稱之為并發(fā)。

線程或任務輪流執(zhí)行的方式是線程和異步之間的巨大區(qū)別。在線程中,操作系統(tǒng)實際上知道每個線程,并且可以隨時中斷它以開始運行不同的線程。這被稱為先占式多工法(pre-emptive multitasking),因為操作系統(tǒng)可以對線程進行切換。雷鋒網

先占式多工法(pre-emptive multitasking)很方便,因為線程中的代碼不需要做任何事情來進行切換。但它也是困難的,因為「在任何時候」都可能需要進行任務切換。這種轉換可以發(fā)生在單個 python 語句的中間,甚至是像 x=x+1 這樣的簡單語句。

另一方面,asyncio 使用協(xié)同多任務處理。這些任務必須通過宣布它們何時準備好被關閉來協(xié)同合作。這意味著要實現(xiàn)這一點,任務中的代碼必須稍微更改才能實現(xiàn)這一點。

提前做這些額外的工作的好處是,你總是知道你的任務將在哪里被切換。除非該語句被標記,否則任務不會在 python 語句的中間被切換。接下來你將看到如何簡化設計的各個部分。

什么是并行?

到目前為止,你已經研究了在單個處理器上發(fā)生的并發(fā)。那么對于你的新筆記本電腦上的那么多 CPU 核會怎么樣呢?你如何利用它們?答案就是多進程。

通過多進程,python 創(chuàng)建了新的進程。這里的一個進程可以被看作是一個完全不同的程序,盡管從技術上講,它們通常被定義為一個資源的集合,其中的資源包括內存、文件句柄和類似的東西。每個進程都在自己的 python 解釋器中運行。

因為它們是不同的進程,所以在多進程中的每一個進程都可以在不同的核上運行。在不同的核心上運行意味著它們實際上可以同時運行,這太棒了。這樣做會產生一些復雜的情況,但是在大多數情況下,python 都能很好地平衡它們。

并發(fā)何時有用?

并發(fā)性可以對兩種類型的問題產生很大的影響。這通常稱為 CPU 綁定和 I/O 綁定。

I/O 綁定問題會導致程序運行速度減慢,因為它常常需要等待來自某些外部資源的輸入/輸出(I/O)。當你的程序處理比你的 CPU 慢得多的東西時,這種情況經常發(fā)生。

比你的 CPU 慢的事情很多,但謝天謝地,它們中間的大多數都不會與你的程序有關聯(lián)。你的程序最常與之交互的緩慢的事情是文件系統(tǒng)和網絡連接。

讓我們看看它們是什么樣子的:

如何利用并發(fā)性加速你的python程序(一):相關概念

在上面的示意圖中,藍色框顯示程序工作的時間,紅色框顯示等待 I/O 操作完成的時間。這個圖并不是按比例繪制的,因為 Internet 上的請求時間可能比 CPU 指令長幾個數量級,所以你的程序最終可能會花費大部分時間等待操作完成。這是你的瀏覽器在大多數時間里所做的事情。

另一方面,有一些程序可以在不與網絡通信或不訪問文件的情況下進行重要的計算。這些是 CPU 綁定的程序,因為限制程序速度的資源是 CPU,而不是網絡或文件系統(tǒng)。

以下是 CPU 綁定程序的示意圖:

如何利用并發(fā)性加速你的python程序(一):相關概念

當你完成下面部分中的示例時,你將看到不同形式的并發(fā)在 CPU 綁定的程序和 I/O 綁定的程序中工作得更好或更差。向程序添加并發(fā)性會增加額外的代碼,增大復雜性,因此你需要確定潛在的加速是否值得付出這些代價??赐瓯疚模銘撚凶銐虻男畔黹_始做這個決定。

關于概念的介紹就到這里啦,下面的文章中,你將看到 I/O 綁定程序相關的內容,之后,你將看到一些處理 CPU 綁定程序的代碼。

接下來的部分請查看:

如何利用并發(fā)性加速你的python程序(二):I/O 綁定程序加速

如何利用并發(fā)性加速你的python程序(三):CPU 綁定程序加速

via:http://www.ozgbdpf.cn/news/201901/JfoLltRClm3bZzuB.html?type=preview

雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知。

如何利用并發(fā)性加速你的python程序(一):相關概念

分享:
相關文章
當月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經綁定,現(xiàn)在您可以設置密碼以方便用郵箱登錄
立即設置 以后再說