在python中并發(fā)是指一次處理多件事,而并行是指一次做多件事。也可以理解為在做事情時,或者計算機的資源需要處理時,在此時刻計算機需要處理資源時而把人做事情映射成計算機工作時可以或者互不干擾處理資源,這也就反射出貌似同步和異步處理時,這就是并行,而并發(fā)時計算機的資源需要處理時,在此時刻內(nèi)具體負責處理的工作或事情,強調(diào)的是具體,某個時段內(nèi)要做的工作,一個可以看做廣度,這個可以看做深度,而此時并發(fā)處理的資源多了起來,很多的在此時高并發(fā)也就衍生出來了。
并發(fā)的解決方案有幾下幾種:
1,隊列,緩沖區(qū),
隊列先進先出,計算機排順序的處理資源,
緩沖區(qū),資源處理前有一個緩沖地帶可以處理時
2,爭搶,
資源需要處理時被某個程序也好,還是什么的東西,反正就是此資源被鎖定了資源,而其他就只能繼續(xù)等待這個資源值了,直到此資源被釋放了在重新使用或運行等等。而爭搶的模式的弊端在于一旦占據(jù)資源時導致其他得不到這個資源,也可能存在資源的浪費等等。
3,預(yù)處理,
資源值來臨前需要提前需要預(yù)加載,預(yù)先做好一部分工作,如手機的緩存的功能等
4,提速,
加強提高處理資源的工具,處理器cpu不行了,4核不夠上8核,內(nèi)層不夠,8g ,16,32g等
5,消息中間件
這個不同于緩沖,中間件常見的有RabbitMQ、ActiveMQ(Apache)、RocketMQ(阿里Apache)、kafka(Apache),反正就是買服務(wù)啦,第三方云等等。
線程
上猶網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
上面圖片中此電腦中線程進程可以看一下,是指進程程對計算機程序中資源的分配和調(diào)度和使用,線程可以看做輕量級進程,包含在進程之內(nèi),線程存在就緒,運行,阻塞,終止四種狀態(tài)。python中線程使用threaing庫,
導入threading庫即可。
import threading
def a():
print("111111111111")
print("2222222222222222")
t = threading.Thread(target=a, name='worker') # 線程對象
t.start() #線程啟動
在此創(chuàng)建了一個線程對象,target是目標函數(shù),名稱等,調(diào)用時需要啟動start,python并沒有線程退出的方案,要么繼續(xù)執(zhí)行完畢,或者拋出異常,
import threading
import time
def worker():
count = 0
while True:
if (count > 5):
# raise RuntimeError(count) #拋出
# return
break
time.sleep(1)
print("I'm work------")
count += 1
t = threading.Thread(target=worker, name='worker')
t.start()
print('==End==')
線程如何傳參,
import threading
import time
def add(x, y):
print('{} + {} = {}'.format(x, y, x + y, threading.current_thread().ident))
thread1 = threading.Thread(target=add, name='add', args=(4, 5))
thread1.start()
time.sleep(2)
thread2 = threading.Thread(target=add, name='add', args=(5,), kwargs={'y': 4})
thread2.start()
time.sleep(2)
thread3 = threading.Thread(target=add, name='add', kwargs={'x': 4, 'y': 5})
thread3.start()
線程的屬性和方法:
在此有了start和run的方法,start和run就是start啟動線程時每一個線程需要執(zhí)行該方法一次,啟動了一個新線程,而run時運行該線程函數(shù),并沒有啟動一個新線程,只是一個普通函數(shù)而已。