Listen(backlog)數(shù)值代表的含義?
監(jiān)聽(tīng)變主動(dòng)為被動(dòng),backlog指定最多允許多少個(gè)客戶連接到服務(wù)器。它的值至少為1。收到連接請(qǐng)求后,這些請(qǐng)求需要排隊(duì),如果隊(duì)列滿,就拒絕請(qǐng)求。請(qǐng)注意,最大限制是取決于操作系統(tǒng),Ubuntu上默認(rèn)是128
TCP服務(wù)端recv解堵塞的兩種方式?
1、收到客戶端發(fā)送的數(shù)據(jù)
2、客戶端關(guān)閉了套接字
可以通過(guò)判斷收到數(shù)據(jù)的長(zhǎng)度來(lái)判斷客戶端是否下線,長(zhǎng)度為0代表已下線。
什么是多任務(wù)?
簡(jiǎn)單地說(shuō),就是操作系統(tǒng)可以同時(shí)運(yùn)行多個(gè)任務(wù)。實(shí)現(xiàn)多任務(wù)有多種方式,線程、進(jìn)程、協(xié)程。
并行和并發(fā)的區(qū)別?
并發(fā):指的是任務(wù)數(shù)多余cpu核數(shù),通過(guò)操作系統(tǒng)的各種任務(wù)調(diào)度算法,實(shí)現(xiàn)用多個(gè)任務(wù)“一起”執(zhí)行(實(shí)際上總有一些任務(wù)不在執(zhí)行,因?yàn)榍袚Q任務(wù)的速度相當(dāng)快,看上去一起執(zhí)行而已)
并行:指的是任務(wù)數(shù)小于等于cpu核數(shù),即任務(wù)真的是一起執(zhí)行的
真的多任務(wù)叫并行,假的多任務(wù)叫并發(fā)。
什么是線程?
可以簡(jiǎn)單理解為同一進(jìn)程中有多個(gè)計(jì)數(shù)器,每個(gè)線程的執(zhí)行時(shí)間不確定,而每個(gè)進(jìn)程的時(shí)間片相等,線程是操作系統(tǒng)調(diào)度執(zhí)行的最小單位
線程的創(chuàng)建步驟
Import threading
# 創(chuàng)建一個(gè)線程對(duì)象
t1 = threading.Thread(target=func_name, args=(num,), name=”子線程名字”)
# 創(chuàng)建一個(gè)線程并啟動(dòng)
t1.start()
# 等待子線程執(zhí)行完畢之后再繼續(xù)向下執(zhí)行主線程
t1.join()
備注:主線程會(huì)等待子線程結(jié)束之后才會(huì)結(jié)束,主線程一死,子線程也會(huì)死。線程的調(diào)度是隨機(jī)的,并沒(méi)有先后順序。
枚舉函數(shù)enumerate的用法
enumerate()是python的內(nèi)置函數(shù),在字典上是枚舉、列舉的意思。用于將一個(gè)可遍歷的數(shù)據(jù)對(duì)象(如列表、元組或字符串)組合為一個(gè)索引序列,同時(shí)列出數(shù)據(jù)和數(shù)據(jù)下標(biāo),一般用在 for 循環(huán)當(dāng)中。通過(guò)threading.enumerate()就可以獲取線程列表。
互斥鎖的運(yùn)用
由于多線程之間共享全局變量就會(huì)導(dǎo)致出現(xiàn)資源競(jìng)爭(zhēng)的問(wèn)題,為了避免這種競(jìng)爭(zhēng)出現(xiàn),利用互斥鎖可以實(shí)現(xiàn)線程同步。
# 創(chuàng)建鎖
Mutex = threading.Lock()
# 加鎖
Mutex.acquire()
# 釋放鎖
Mutex.release()
什么是死鎖?
在線程間共享多個(gè)資源的時(shí)候,如果兩個(gè)線程分別占有一部分資源并且同時(shí)等待對(duì)方的資源,就會(huì)造成死鎖,盡管死鎖很少發(fā)生,但一旦發(fā)生就會(huì)造成應(yīng)用的停止響應(yīng)。
什么是進(jìn)程?