1. 程式人生 > >python爬蟲番外篇(一)進程,線程的初步了解

python爬蟲番外篇(一)進程,線程的初步了解

換來 文本 上下 處理器 www 同時 正在 cnblogs 多人

原文地址https://www.cnblogs.com/zhaof/p/6994991.html

整理這番外篇的原因是希望能夠讓爬蟲的朋友更加理解這塊內容,因為爬蟲爬取數據可能很簡單,但是如何高效持久的爬,利用進程,線程,以及異步IO,其實很多人和我一樣,故整理此系列番外篇

一、進程

程序並不能單獨和運行只有將程序裝載到內存中,系統為他分配資源才能運行,而這種執行的程序就稱之為進程。程序和進程的區別在於:程序是指令的集合,它是進程的靜態描述文本;進程是程序的一次執行活動,屬於動態概念。

例如我們寫一個hello程序,當這個程序再操作系統上運行的時候,操作系統會給我們一種假象,好像系統上就這一個程序在運行。程序看上去是獨占的使用處理器,主存,和IO設備,處理器看上去就像在不間斷的執行程序中的指令,即該程序的代碼和數據是操作系統內存中唯一的對象。這其實就是通過進程實現的。

進程的概念

進程是操作系統對一個正在運行的程序的一種抽象。即進程是處理器,主存,IO設備的抽象
操作系統可以同時運行多個進程,而每個進程都好像在獨占的使用硬件

並發運行

並發運行:一個進程的指令和另外一個進程的指令是交錯執行的。

上下文切換
CPU看上去像是在並發的執行多個進程,這是通過處理器在進程之間切換來實現的,操作系統實現這種交錯執行的機制稱為上下文切換

操作系統保持跟蹤進程運行所需的所有狀態信息。這種狀態,就是上下文。
在任何一個時刻,操作系統都只能執行一個進程代碼,當操作系統決定把控制權從當前進程轉移到某個新進程時,就會進行上下文切換,即保存當前進程的上下文,恢復新進程的上下文,然後將控制權傳遞到新進程,新進程就會從它上次停止的地方開始。

我們還通過hello這個程序進行理解這個過程(環境為linux):

技術分享圖片

shell進程和hello進程。

  1. 開始,shell進程在運行,等待命令行的輸入
  2. 執行hello程序,shell通過系統調用來執行我們的請求,這個時候系統調用會講控制權傳遞給操作系統。操作系統保存shell進程的上下文,創建一個hello進程以及其上下文並將控制權給新的hello進程。
  3. hello進程終止後,操作系統恢復shell進程的上下文,並將控制權傳回給shell進程
  4. shell進程繼續等待下個命令的輸入

二、線程

線程的概念

線程是操作系統能夠進行運算調度的最小單位,它被包含在進程中,是進程中的實際運作單位

一個進程實際上可以由多個線程的執行單元組成。每個線程都運行在進程的上下文中,並共享同樣的代碼和全局數據。

由於在實際的網絡服務器中對並行的需求,線程成為越來越重要的編程模型,因為多線程之間比多進程之間更容易共享數據,同時線程一般比進程更高效

三、並發和並行的概念

並發指的是同時具有多個活動的系統

並行值得是用並發來使一個系統運行的更快。並行可以在操作系統的多個抽象層次進行運用

python爬蟲番外篇(一)進程,線程的初步了解