(一)程式、程序與執行緒:
程式:相當於乙個應用。
程序:程式執行資源(記憶體資源)的最小分配單位,乙個程式可以有多個程序。
執行緒:cpu最小的排程單位,必須依賴程序而存在。執行緒沒有獨立資源,所有執行緒共享該程序的全部資源。
執行緒的劃分尺度比程序小。
(二)為什麼多程序和多執行緒可以提高程式的執行速度?
1、提高程式的執行速度的第一種方法:提高cpu的利用率。
解決方式:cpu不用休息。----多執行緒
程式中如果只有乙個執行緒,cpu就只處理它。如果在程式中遇到了阻塞,一旦阻塞了,cpu就休息了,休息的時間裡,浪費了cpu的資源。
造成阻塞的方法:
a、time.sleep()
b、遇到io
而多執行緒指多個任務。cpu會在這多個任務之間切換,若其中乙個執行緒阻塞了,cpu不會休息,會處理其他執行緒。
2、提高程式執行速度的第二種方法:增加cpu,讓每個cpu處理乙個任務。
cpu是多核的。---利用cpu的多核進行解決。cpu每乙個核處理乙個程序。----多程序
(三)什麼是多執行緒:
程式中包含多個並行執行流。
1、多執行緒的開啟方法:
(1)使用threading模組的方法
t=threading.thread(
target=執行緒執行的任務(方法)名字,
args=執行方法的引數,是乙個元組型別
)#建立執行緒
t.start()#啟動執行緒
(2)使用自定義類的形式來建立執行緒
利用物件導向繼承的思想。
自定義執行緒類:
a、繼承threading.thread
b、保證父類的init方法能夠被呼叫。
如何呼叫父類的init方法:
super().__init__()
threading.thread.__init__(self)
用類去建立執行緒的步驟:
1、繼承thread
2、重寫run方法
3、例項化執行緒類,就相當於建立乙個執行緒,用這個物件呼叫start方法,就可以啟動這個執行緒。
4、如果自定義執行緒類要實現init方法,必須先呼叫父類的init方法。
2、執行緒的名稱:可以幫助我們測試時了解哪個執行緒在做哪件事。
執行緒物件.name檢視:預設是thread-1,thread-2....
自定義名稱:其實就是給self.name賦值
3、檢視執行緒的數量:
threading.enumerate()---可以檢視當前程序中的執行緒數量。
4、執行緒的執行順序是混亂、隨機的。
原因:執行緒的狀態決定。
5、死鎖的條件:
死鎖的發生會讓程式永久阻塞。
(1)同乙個執行緒,先後獲取兩次鎖物件,在第二次獲取鎖物件時,會死鎖。
(2)執行緒a擁有鎖1,執行緒b擁有鎖2,執行緒a在不釋放鎖1的情況下,試圖獲取鎖2,執行緒b在不釋放鎖2的情況下試圖獲取鎖1,此時在獲取對方鎖的時候,會發生死鎖。
1、功能:多執行緒和多程序都能做到多工。
2、區別:
(1)關係:乙個程式至少有乙個程序,乙個程序至少有乙個執行緒;
(2)有無資源:程序擁有獨立資源,執行緒依賴於程序,沒有獨立資源,所有該程序的執行緒共享所在程序的所有資源。
(3)劃分尺度:執行緒的劃分尺度小於程序(資源比程序少),使得多執行緒程式併發性更高。
3、優缺點:
執行緒:執行緒的執行開銷小,但不利於資源的管理和儲存。
程序:多個程序間相互獨立,不利於程序間資訊互動。程序擁有獨立資源。
4、如何選擇:
在設計資料互動頻繁的場景,多執行緒比多程序更加適合。
在併發程度上,多程序比多執行緒的效率更高。
應該按照實際開發情況進行選擇。
爬蟲基礎知識
大資料時代,要進行資料分析,首先要有資料來源。而學習爬蟲,可以讓我們獲取更多的資料來源,並且這些資料來源可以按我們的目的進行採集,去掉很多無關資料。網路爬蟲 又被稱為網頁蜘蛛,網路機械人 就是模擬客戶端傳送網路請求,接收請求響應,一種按照一定的規則,自動地抓取網際網路資訊的程式。只要是瀏覽器能做的事...
爬蟲基礎知識整理
網路爬蟲 又被稱為網頁蜘蛛,網路機械人 就是模擬客戶端 主要指瀏覽器 傳送網路請求,接收請求響應,一種按照一定的規則,自動地抓取網際網路資訊的程式。網路爬蟲就是根據網頁的位址來尋找網頁的,也就是url。舉乙個簡單的例子,我們在瀏覽器的位址列中輸入的字串就是url,例如 url就是同意資源定位符 un...
爬蟲基礎知識(柒)
1 mongodb 文件資料庫,儲存的是文件 bson json的二進位製化 json資料儲存的就是js中物件和陣列。2 mongodb特點 內部執行引擎為js直譯器,把文件儲存成bson結構,在查詢時轉換為js物件,並可以通過熟悉的js語法來操作。3 mongo和傳統型資料庫的不同 4 mongo...