在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ Python并發(fā)簡介
事件驅動程序
反應式編程
進程池
線程
線程池
Python并發(fā)簡介
并發(fā)vs并行
同步線程
調試線程應用程序
進程間通信
線程通信
Python并發(fā)編程教程
測試線程應用程序
基準和性能分析
系統(tǒng)和內存架構
線程的實現(xiàn)
多進程

Python并發(fā)簡介

在本章中,我們將理解Python中的并發(fā)概念,并了解線程和進程的區(qū)別。

什么是并發(fā)?

簡而言之,并發(fā)是指同時發(fā)生兩個或多個事件。 并發(fā)是一種自然現(xiàn)象,因為許多事件在任何給定的時間同時發(fā)生。

就編程而言,并發(fā)是兩個任務在執(zhí)行過程中重疊的時候。 通過并發(fā)編程,我們的應用程序和軟件系統(tǒng)的性能可以得到提高,因為我們可以同時處理請求,而不是等待前一個完成再處理下一個。

并發(fā)性的歷史回顧

以下幾點將給我們簡要的并發(fā)歷史回顧 -

鐵路概念
并發(fā)性與鐵路概念密切相關。 有了鐵路,就需要在同一條鐵路系統(tǒng)上處理多列火車,以便每列火車都能安全到達目的地。

并行計算在學術界
對計算機科學并發(fā)性的興趣始于1965年由Edsger W. Dijkstra發(fā)表的研究論文。在本文中,他確定并解決了互斥問題,即并發(fā)控制的性質。

高級并發(fā)基元
最近,由于引入了高級并發(fā)基元,程序員正在改進并發(fā)解決方案。

改進了編程語言的并發(fā)性
Google的Golang,Rust和Python等編程語言在幫助我們獲得更好的并發(fā)解決方案的領域取得了令人難以置信的發(fā)展。

什么是線程和多線程?

線程是可以在操作系統(tǒng)中執(zhí)行的最小執(zhí)行單元。 它本身不是一個程序,而是在程序中運行。 換句話說,線程并不相互獨立。 每個線程與其他線程共享代碼段,數(shù)據(jù)段等。 他們也被稱為輕量級流程。

一個線程由以下組件組成 -

  • 程序計數(shù)器由一個可執(zhí)行指令的地址組成
  • 寄存器組
  • 唯一的ID

多線程,在另一方面,是CPU的通過同時執(zhí)行多個線程管理使用操作系統(tǒng)的能力。 多線程的主要思想是通過將進程分成多個線程來實現(xiàn)并行性。 以下示例的幫助理解多線程的概念。

示例
假設我們正在運行一個特殊的過程,在這個過程中我們打開MS Word來輸入內容。 一個線程將被分配以打開MS Word,另一個線程將需要在其中輸入內容。 而現(xiàn)在,如果要編輯現(xiàn)有的文檔內容,那么將需要另一個線程來執(zhí)行編輯任務等等。

什么是進程和多進程?

進程被定義為一個實體,它代表了系統(tǒng)中要實施的基本工作單元。 簡而言之,我們將計算機程序編寫成文本文件,當我們執(zhí)行這個程序時,它就成為執(zhí)行程序中提到的所有任務的過程。 在進程生命周期中,它經(jīng)歷了不同的階段 - 開始,準備,運行,等待和終止。

下圖顯示了一個過程的不同階段 -

一個進程只能有一個線程,稱為主線程,或者多線程擁有自己的一組寄存器,程序計數(shù)器和堆棧。 以下圖表顯示了它們的區(qū)別 -

另一方面,多進程是在一個計算機系統(tǒng)內使用兩個或多個CPU單元。 我們的主要目標是充分利用我們的硬件。 為了實現(xiàn)這一點,我們需要利用我們的計算機系統(tǒng)中可用的全部CPU核心。 多多進程是最好的方法。

Python是一種最流行的編程語言。 以下是一些適合并發(fā)應用的原因 -

語法糖
語法糖是一種編程語言中的語法,旨在使事情更容易閱讀或表達。 它使語言“更甜”供人類使用:事物可以更清晰,更簡潔地表達,或以偏好為基礎的另一種風格表達。 Python帶有Magic方法,可以將其定義為對對象起作用。 這些Magic方法被用作語法糖,并綁定到更容易理解的關鍵字。

社區(qū)龐大
Python語言在AI,機器學習,深度學習和定量分析領域的數(shù)據(jù)科學家和數(shù)學家之間見證了大量采用率。

并發(fā)編程的API
Python 2和3有大量專用于并行/并發(fā)編程的API。 其中最受歡迎的是:threading,multiprocessing,asyncio,geventgreenlets等。

Python在實現(xiàn)并發(fā)應用程序中的局限性

Python對并發(fā)應用程序有一個限制。 這種限制稱為GIL(全局解釋器鎖),它存在于Python中。 GIL從來不允許我們利用CPU的多個內核,因此可以說Python中沒有真正的線程。 我們可以理解GIL的概念如下 -

GIL(全局解釋器鎖)
這是Python世界中最具爭議的話題之一。 在CPython中,GIL是互斥鎖 - 互斥鎖,它使線程安全。 換句話說,我們可以說GIL阻止了多個線程并行執(zhí)行Python代碼。 鎖一次只能由一個線程保存,如果想執(zhí)行一個線程,那么它必須先獲取鎖。下面的圖表將幫助您了解GIL的工作。

但是,Python中有一些庫和實現(xiàn),如:Numpy,Jpython和IronPytbhon。 這些庫與GIL沒有任何交互。