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