python 并發簡介
在本章中,我們將了解python中的并發概念,并了解不同的線程和進程。
什么是并發?
簡單來說,并發性是同時發生的兩個或多個事件。并發是一種自然現象,因為許多事件在任何給定時間同時發生。
在編程方面,并發性是指兩個任務在執行時重疊。通過并發編程,我們的應用程序和軟件系統的性能可以得到改善,因為我們可以同時處理請求而不是等待前一個請求完成。
并發的歷史回顧
以下幾點將為我們提供并發的簡要歷史回顧 -
從鐵路的概念
并發性與鐵路概念密切相關。對于鐵路,需要在同一鐵路系統上處理多列火車,以便每輛火車都能安全到達目的地。
學術界的并行計算
計算機科學并發的興趣始于edsger w. dijkstra于1965年發表的研究論文。在本文中,他發現并解決了互斥問題,即并發控制的特性。
高級并發原語
最近,由于引入了高級并發原語,程序員正在改進并發解決方案。
使用編程語言改進了并發性
google的golang,rust和python等編程語言在幫助我們獲得更好的并發解決方案的領域取得了令人難以置信的發展。
什么是線程和多線程?
線程 是可以在操作系統中執行的最小執行單元。它本身不是一個程序,而是在一個程序中運行。換句話說,線程不是彼此獨立的。每個線程與其他線程共享代碼段,數據段等。它們也被稱為輕量級過程。
線程由以下組件組成 -
- 程序計數器,包含下一個可執行指令的地址
- 堆
- 寄存器集
- 一唯一的id
多線程 是cpu通過并發執行多個線程來管理操作系統使用的能力。多線程的主要思想是通過將進程劃分為多個線程來實現并行性。在以下示例的幫助下,可以理解多線程的概念。
例
假設我們正在運行一個特定的過程,其中我們打開ms word以在其中鍵入內容。將分配一個線程來打開ms word,并且需要另一個線程在其中鍵入內容。現在,如果我們想編輯現有的,那么另一個線程將需要執行編輯任務,依此類推。
什么是流程和多處理?
過程 被定義為一個實體,它代表工作的基本單元,在該系統中實現。簡單來說,我們將計算機程序寫入文本文件中,當我們執行該程序時,它將成為執行程序中提到的所有任務的過程。在過程生命周期中,它經過不同的階段 開始,準備,運行,等待和終止。
下圖顯示了流程的不同階段 -
一個進程只能有一個線程,稱為主線程,或者多個線程有自己的寄存器,程序計數器和堆棧。下圖將向我們展示差異 -
多處理 是在單個計算機系統中使用兩個或更多個cpu單元。我們的主要目標是充分發揮硬件的潛力。為此,我們需要利用計算機系統中可用的全部cpu內核。多處理是這樣做的最佳方法。
python是最流行的編程語言之一。以下是使其適用于并發應用程序的一些原因
句法糖
語法糖是編程語言中的語法,旨在使事物更易于閱讀或表達。它使語言“更甜”供人類使用:事物可以更清晰,更簡潔地表達,或者根據偏好以另一種方式表達。python附帶了magic方法,可以定義它們作用于對象。這些magic方法被用作語法糖并綁定到更易于理解的關鍵字。
大社區
python語言已經見證了數據科學家和數學家的大量采用率,他們在ai,機器學習,深度學習和定量分析領域工作。
用于并發編程的有用api
python 2和3擁有大量專用于并行/并發編程的api。其中最受歡迎的是 線程,并發功能,多處理,asyncio,gevent和greenlets 等。
python在實現并發應用程序中的局限性
python對并發應用程序有限制。這種限制在python中存在,稱為 gil(全局解釋器鎖) 。gil從不允許我們使用多個cpu內核,因此我們可以說python中沒有真正的線程。我們可以理解gil的概念如下 -
gil(全球翻譯鎖)
它是python世界中最具爭議的話題之一。在cpython中,gil是互斥鎖 - 互斥鎖,它使線程安全。換句話說,我們可以說gil阻止多個線程并行執行python代碼。鎖一次只能由一個線程保存,如果我們想要執行一個線程,那么它必須首先獲取鎖。下面的圖表將幫助您了解gil的工作情況。
但是,python中有一些庫和實現,如 numpy,jpython 和 ironpytbhon。 這些庫在沒有與gil交互的情況下工作。
python 多線程并發教程導航
python并發簡介 | python并發與并行 | python系統和內存架構 | python線程 | python線程并發 |
python同步線程 | python線程通信 | python測試線程應用程序 | python調試線程應用程序 | python基準測試和分析 |
python線程池 | python進程池 | python多處理器 | python處理器通信 | python事件驅動編程 |
python反應式編程 |