同步,多執行緒 ,多執行緒方式實現併發。

2021-08-19 21:30:23 字數 1611 閱讀 9489

io請求幾乎不佔cpu的。同步請求相當於排隊買東西,乙個卡主了,其他的都結不了賬了。執行緒並不是越多越好,如果他特別多還不如同步高,所以對執行緒要有個限制,所以就出現了執行緒池,執行緒池在python3裡才有的,python2裡沒有的。建立程序的話是耗費很多資源的,建立執行緒是幾乎不耗費資源的。建立程序相當於建乙個工廠,然後工廠裡有多人(這些人就相當於執行緒,共同分享程序的資源)。python的程序裡面有個執行緒鎖(gil)是不允許多個執行緒同時工作,前提是不允許cpu去排程(乙個cpu只能排程乙個執行緒(以前的cpu是一核的所以說乙個cpu同一時刻只能排程乙個執行緒)),但是現在的cpu是多核的,可以同時排程多個執行緒(但是python的程序裡有乙個執行緒鎖,到現在也不允許同時排程多個執行緒)。但是執行緒如果發io請求的話,跟cpu是沒有關係的,相當於cpu點一下它就可以去了(允許一下就可以了)。對於io請求的話python的鎖(gil)沒有多大的影響。io請求多的話就用多執行緒,gil只是負責cpu的排程,跟io請求沒有多大的關係的。    python中的每乙個程序外面都有乙個gil鎖(cpu要排程的時候只允許乙個執行緒出去)。python裡計算密集型就適合用多程序更好。

程序:預設有主線程(必須工作的那個),可以有多執行緒共存,並且共享內部資源。計算密型用程序比較合適(與cpu有關)

執行緒:執行緒是計算機中工作的最小單元。適合做io請求。但是也不是很好,可能出現執行緒在等待,所以就出現了協程。

協程:使用程序中的乙個執行緒去做多個任務(即是如果派乙個執行緒去打**給乙個人,但是那個人一直沒有接**,為了不讓這個執行緒閒下來,所以有派它去做另外的事情,即是多工,讓他不能閒下來),微執行緒。

gil:全域性直譯器鎖,這個東西是python特有的。這個東西用來對程序內的執行緒加上一把鎖,即是同一時刻被cpu排程的程序,程序中只有乙個執行緒可以出來。python特有,用於在程序中對所有的執行緒加鎖,保證同一時刻只有乙個執行緒被cpu排程

多執行緒 併發 同步

對比同步塊和同步方法,理解一下同步塊可以力度更小的鎖定資源。在力度更小的鎖定資源時我們盡可能的提公升它的效能。package com.sxt.syn 執行緒安全 在併發時保證資料的正確性 效率盡可能高 synchronized 1 同步方法 2 同步塊 public class synblockte...

多執行緒 16 併發同步

併發 同乙個物件多個執行緒同時操作,比如購買同一車次票。一定涉及到併發就會導致資料不準確問題,比如同一張票被多個人買到了,這稱為執行緒不安全。那怎麼使執行緒安全呢,比如只一台電腦,大家都想用怎麼辦,排隊。跟據演算法誰先用誰後用,保證乙個 人上來用,其他人等著,等這個人用完了下一人用,還是用乙個時間點...

併發程式設計 多執行緒(實現同步)二

當多個執行緒同時共享,同乙個全域性變數或靜態變數,做寫的操作時,可能會發生資料衝突問題,也就是執行緒安全問題。但是做讀操作是不會發生資料衝突問題。使用多執行緒之前的同步或者使用鎖 lock 原理 將可能傳送資料衝突問題,只能讓當前乙個執行緒進行。執行完成後釋放鎖,然後讓其它執行緒執行。執行緒之前同步...