程序概念:
1、是計算機中的程式關于某資料集合上的一次運作活動,是系統進行資源配置設定和排程的基本機關,是作業系統結構的基礎。在早期面向程序設計的計算機結構中,程序是程式的基本執行實體;在當代面向線程設計的計算機結構中,程序是線程的容器。程式是指令、資料及其組織形式的描述,程序是程式的實體。
2、對于作業系統來說,一個任務就是一個程序,比方說打開浏覽器就是啟動一個浏覽器的程序
3、程序是作業系統中最基本、重要的概念。是多道程式系統出現後,為了刻畫系統内部出現的動态情況,描述系統内部各道程式的活動規律引進的一個概念,所有多道程式設計作業系統都建立在程序的基礎上
程序和程式的差別
程式是指令和資料的有序集合,其本身沒有任何運作的含義,是一個靜态的概念
而程序是程式在處理機上的一次執行過程,它是一個動态的概念
程式可以作為一種軟體資料長期存在,而程序是有一定生命期的。
程式是永久的,程序是暫時的
程序并發和并行
并發:如果系統隻有一個CPU,實際就是交替執行任務,之後交替比較快
是指一個時間段中有幾個程式都處于已啟動運作到運作完畢之間,且這幾個程式都是在同一個處理機上運作,但任一個時刻點上隻有一個程式在處理機上運作,是指系統具有處理多個任務的能力。黑線代表同一個cpu,紅塊代表處理任務
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CNxMmZlFDNjJzMmJWZ2kDZyMjM0UTYkJjMyM2YxEzMx8CX1IzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
并行:多核cpu.當系統有一個以上CPU時,則線程的操作有可能非并發。當一個CPU執行一個線程時,另一個CPU可以執行另一個線程,兩個線程互不搶占CPU資源,可以同時進行,這種方式我們稱之為并行(Parallel)。簡言之,是指系統具有同時處理多個任務的能力。 黑線表CPU,紅色代表cpu
程序優點
穩定性高,一個程序山崩潰了,不會影響其他程序
程序缺點
開銷比較大
windows檢視程序--任務管理
啟動程序的步驟
1、引入程序包 multiprocessing
2、編寫函數
3、建立啟用程序
linux 下可以使用fork函數建立程序。在windows系統multiprocessing子產品
linux是多任務系統
Process 功能介紹
Process 方法介紹
Process 屬性介紹
差別主程序和子程序
1、通過程序号判斷主程序還是子程序
2、debug的時候斷點要加在子程序,如果在主程序是無法看到的子程序的代碼
os.getpid() 擷取目前程序号 os.getppid() 擷取目前父程序号
程序參數
程序共享變量value
<code>multiprocessing.</code><code>Value</code>(typecode_or_type, *args[, lock])
字元串
from ctypes import c_char_p
ss = Value(c_char_p, 'ss')
ctype類型可從下表查閱
程序資料共享
程序池Pool(5),所謂程序池,就是控制程序的數量
close() 關閉pool,使其不在接受新的任務。
terminate() 結束工作程序,不在處理未完成的任務。
join() 主程序阻塞,等待子程序的退出, join方法要在close或terminate之後使用。
阻塞式和非阻塞式
-- 阻塞式 apply apply(func[, args[, kwds]])是阻塞的
-- 阻塞程序 p = Pool(5) 程序池一共起5個程序,一個程序一個程序做任務。阻塞程序是程序1的任務1完成了,再做程序2的任務
-- 非阻塞程序 p = Pool(5) 程序池一共起5個程序,5個程序共同做任務。程序1任務完成,會再進一個新任務。
運作結果
阻塞程序hello 0
end
阻塞程序hello 1
阻塞程序hello 2
阻塞程序hello 3
-- 非阻塞式 apply_async apply_async(func[, args[, kwds[, callback]]]) 它是非阻塞
非阻塞程序hello 0
非阻塞程序hello 1
非阻塞程序hello 2
非阻塞程序hello 3
:::: done非阻塞程序hello 0
:::: done非阻塞程序hello 1
:::: done非阻塞程序hello 2
:::: done非阻塞程序hello 3
阻塞程序的回調函數,回調函數在爬蟲中最常用。
回調函數的場景:程序池中任何一個任務一旦處理完了,就立即告知主程序:我好了額,你可以處理我的結果了。主程序則調用一個函數去處理該結果,該函數即回調函數
我們可以把耗時間(阻塞)的任務放到程序池中,然後指定回調函數(主程序負責執行),這樣主程序在執行回調函數時就省去了I/O的過程,直接拿到的是任務的結果。
程序通信
隊列
上班求生存,下班求發展