python是怎麽處理並發編程的(實用技巧)
在處理並發編程之前我們先來了解一下基礎知識,這是我們並發編程問題的核心
1、什麽是程序?什麽是進程?
程序說白了就是一堆文件
進程就是一個正在執行的過程/程序
所以說進程是一個抽象的概念
這個概念起源操作系統
2、什麽是操作系統
定義:
操作系統是位於計算機硬件與應用軟件之間
用於協調、管理、控制計算機硬件與軟件的資源的一種控制程序
3、操作系統的兩大作用:
1、把復雜醜陋的硬件操作都封裝成美麗的接口,提供給應用程序使用
2、把進程對硬件的競爭變的有序
4、多道技術
多道的產生背景是想要在單個cpu的情況下實現多個進程並發執行的效果
空間上的復用 (多道程序復用內存的空間)
時間上的復用 (多道程序復用CPU時間)
cpu遇到IO操作要切換(提升效率)
一個進程占用cpu時間過長也切(降低效率)
進程與進程之間的內存空間是互相隔離的
python並發編程之多進程
1 什麽是進程
一個進程就是 一個正在進行的程序或者任務
2 進程與程序的區別
程序是一堆代碼,或者說一個文件, 進程是程序的運行過程
需要註意的是:qq是一個程序,我在電腦上用qq登陸馬化疼的qq,同時又登陸了馬化騰大媳婦的qq,這是兩個進程
3 並發與並行
無論是並行還是並發,在用戶看來都是‘同時‘運行的,不管是進程還是線程,都只是一個任務而已,真是幹活的是cpu,cpu來做這些任務,而一個cpu同一時刻只能執行一個任務
並發:單cpu,是偽並行,即看起來是同時運行,其實不是,單個cpu+多道技術就可以實現並發
比如你可以一邊看電視同事吃飯
並行 :同時運行,只有具備多個cpu才能實現並行
單核下,可以利用多道技術,多個核,每個核也都可以利用多道技術(多道技術是針對單核而言的)
有四個核,六個任務,這樣同一時間有四個任務被執行,假設分別被分配給了cpu1,cpu2,cpu3,cpu4,
一旦任務1遇到I/O就被迫中斷執行,此時任務5就拿到cpu1的時間片去執行,這就是單核下的多道技術
而一旦任務1的I/O結束了,操作系統會重新調用它(需知進程的調度、分配給哪個cpu運行,由操作系統說了算
所有現代計算機經常會在同一時間做很多件事,一個用戶的PC(無論是單cpu還是多cpu),都可以同時運行多個任務(一個任務可以理解為一個進程)。
啟動一個進程來殺毒(360軟件)
啟動一個進程來看電影(暴風影音)
啟動一個進程來聊天(騰訊QQ)
所有的這些進程都需被管理,於是一個支持多進程的多道程序系統是至關重要的
多道技術概念回顧:內存中同時存入多道(多個)程序,cpu從一個進程快速切換到另外一個,使每個進程各自運行幾十或幾百毫秒,這樣,雖然在某一個瞬間,一個cpu只能執行一個任務,但在1秒內,cpu卻可以運行多個進程,這就給人產生了並行的錯覺,即偽並發,以此來區分多處理器操作系統的真正硬件並行(多個cpu共享同一個物理內存)
python是怎麽處理並發編程的(實用技巧)