單道批處理系統:多個程式序列使用cpu
多道程式設計技術:多個程式同時進入計算機的主儲存器並啟動,巨集觀上是並行的,多道程式處在執行中;微觀上是序列的,各道程式輪流交替使用cpu.空間上的復用,乙個cpu可以讓多個使用者使用
當乙個程式占用cpu時間過長,會斷開當前cpu使用權
先進先出演算法
最先進入的程序最先執行,一直到該程序結束,或阻塞時,釋放
缺點:若長時間先進入,後面無法使用
短程序優先
誰用時短,誰優先執行
缺點:長時間程序需要被控很長時間
時間片輪轉法
cpu執行時間1s中,載入n個程式,將1s等分未n個時間片.
多級反饋佇列
將執行優先分為多層級別
1:優先順序最高
2:優先順序第二
3:以此類推
指的是提交任務的方式
同步:傳送方發出資料後,等接收方回響應以後才發下乙個資料報的通訊方式
非同步:傳送方發出資料後,不等待接收方發回響應,接著傳送下個資料報的通訊方式
同步時阻塞模式,非同步是非阻塞模式.
注意:阻塞和非阻塞,同步和非同步不是同乙個概念!
父程序先於子程序結束,則子程序成為孤兒程序,子程序的父程序成為init程序,稱為init程序領養孤兒程序
子程序終止,父程序尚未對其id進行**,變成殭屍程序.
序列:排成一隊乙個個處理
好的程式都是串並行結合的
併發和並行的區別
並行,parallel
同時做某些事,可以互不干擾的同乙個時刻做多件事
併發,同時乙個時刻或某一段時間內,需要有多件事需要做
並行可以解決併發問題
比如:十輛車要同時經過單車道,修建4車道,就是通過並行解決併發的問題
併發的解決
食堂打飯模型
12點開飯,都湧向食堂,這就是併發.如果人特別多,這就時高併發.
1.佇列.緩衝區
排成佇列,就是乙個緩衝地帶,就是緩衝區
如若有女士,那女士隊就是乙個優先佇列
2.爭搶
有人搶這打飯,搶到了就相當於鎖定視窗,只是一種鎖機制
是一種解決高併發的解決方案,但是不好,因為有人長時間搶不到
如果爭搶,一定要有鎖機制,不然爭到了也會很快被別人搶掉
3.預處理
提前做80%的菜預備著
一種提前載入使用者需要的資料的思路,預處理思想,快取常用
4.並行
相當於開多個視窗讓人打飯,成本上公升
日常可以通過購買更多伺服器,或多開程序,程序實現並行處理,來解決併發問題
這些都是水平擴充套件思想
注:如果執行緒在單cpu上處理,就不是並行了
但是多數伺服器都是多cpu的,服務的不是往往是多機的,分布的,這都是並行處理,
5.提速
提高單個視窗的打飯速度,也是解決併發的方式.
提高單個cpu效能,或單個伺服器安裝更多的cpu
這是一種垂直擴充套件的思想
缺點:容易觸到技術天花板,而且**到後面會飆公升
6.訊息中介軟體
相當於緩衝,但是在系統外面(第三方)緩衝
在實現了執行緒的作業系統中,執行緒是作業系統能夠進行運算排程的最小單位.它被包含在程序之中,是程序中的實際運作單位.乙個程式的執行例項就是乙個程序.
程序(process)是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎.
程序執行緒的理解
現代作業系統提出程序的概念,每乙個程序都認為自己獨佔所有的計算機硬體資源,
程序就是獨立的王國,程序間不可以隨便的共享資料
執行緒就是省份,同乙個程序內的執行緒可以共享程序的資源,每乙個執行緒擁有自己獨立的堆疊.
每個執行緒都有乙個獨立的執行緒id,用以區分不同的執行緒
執行態該時刻,該執行緒正在占用cpu
就緒態可隨時轉換為執行態,因為其他執行緒正在執行而暫停,該執行緒不占用cpu
阻塞態除非某些外部事情發生,否則執行緒不能執行.等條件滿足時,執行
狀態含義
就緒(ready)
執行緒能夠執行,但在等待被排程.可能執行緒剛剛建立啟動,或剛剛從阻塞中恢復,或被其他執行緒搶占
執行(running)
執行緒正在執行
阻塞(blocked)
執行緒等待外部事件發生而無法執行,如i/o操作
終止(terminated)
執行緒完成,或退出,或被取消
1.cpu密集型
cpython中使用了gil.多執行緒的時候鎖相互競爭,且多核優勢不能發揮,python多程序效率更高
2.io密集型
適合使用多執行緒,可以減少多程序間io的序列化開銷.且在io等待的時候,切換到其他執行緒繼續執行,效率大大的好.
也叫快取保定問題,是乙個經典的,多程序同步問題.
生產者往緩衝取寫入資料,消費者從緩衝區拿去資料,兩者同過緩衝區來進行通訊,這樣的話生產者不必擔心要等待消費者使用完資料,消費者也不用擔心不夠時間處理所有資料
協程是單執行緒下的併發,又稱微執行緒,纖程,英文名coroutine.
協程是一種使用者態的輕量執行緒,即協程是由使用者程式自己控制排程.
注意:python執行緒是核心級別,即由作業系統控制排程,所以單執行緒遇到io或者執行時間過長就會被迫交出cpu執行許可權,切換其他執行緒執行.
單執行緒內開啟協程,一旦遇到io,就會從應用程式級別(非作業系統)控制切換,以此來提公升效率.
優點:協程的切換開銷更小,屬於程式級別的切換,作業系統感覺不到,所以更加輕量級
單執行緒內就可以實現併發的效果,最大限度的利用cpu
缺點:協程的本質是單執行緒,無法利用多核.所以可以是乙個程式開啟開啟多個程序,每個程序內開啟多個執行緒,每個執行緒開啟協程.
協程是單個執行緒,所以一旦出現阻塞,就會阻塞整個執行緒.
使用gevent模組
執行緒和程序
標準的定義是 程序是執行緒的容器,乙個程序可於乙個或者多個執行緒,它是系統分配資源的基本單位 同乙個程序下,執行緒共享位址空降 已經開啟的檔案 訊號處理函式 報警訊號和其他,執行緒自己只保留程式計數器和棧。但是很遺憾的,這個只是教科書上的定義,實際情況是每個作業系統實現的作業系統特性不同,實現的方法...
程序和執行緒
乙個程序就是當前正在執行的乙個程式,包括程式的暫存器 程式計數器和變數的當前值。不同的程序擁有不同的位址空間。而執行緒可以理解為是程序中的控制流。同乙個程序內也就是說在同乙個位址空間內可以有多個控制流。也就是可以有多個線 程,他們共享位址空間。我們通常將程序視為是資源的集合,程序中有程式的正文 資料...
執行緒和程序
對於求職者,在面試的時候大多都會被問到 你對多執行緒了解麼?給我講講執行緒和程序的區別吧。在unix中,乙個程序可以理解為執行緒 位址空間 檔案描述符 資料,道破現實,其實就相當於老闆和員工,老闆就是程序,員工就是執行緒。老闆需要僱傭若干員工 執行緒 還要有辦公樓 位址空間 還要有若干的辦公裝置 檔...