1、簡述計算機作業系統中的「中斷」的作用?
答:當程式執行中遇見中斷時,保留此時的狀態,轉而執行其他的操作,完成後繼續從上次切的狀態執行。
2、簡述計算機記憶體中的「核心態」和「使用者態」;
答:
核心態主要是作業系統,其受硬體保護,不能被使用者修改;大型、複雜、長壽。
使用者態主要是一些應用軟體以及介面程式,可以被使用者修改,比較小型。
作業系統可以隱藏複雜、醜陋的介面,同時使應用程式的競爭更加有序化。
3、程序間通訊方式有哪些?
答:不同的程序的記憶體是相互隔離的。
程序之間的通訊可以通過通道與佇列實現,queue模組,(put、get、full、empty)
4、簡述你對管道、佇列的理解;
6、什麼是同步i/o,什麼是非同步i/o?
答:同步i/o:遇見i/o阻塞時,主線程會在此等候,直到阻塞結束。
7、請問multiprocessing模組中的value、array類的作用是什麼?舉例說明它們的使用場景
答:實現程序之間資料記憶體的共享。
8、請問multiprocessing模組中的manager類的作用是什麼?與value和array類相比,manager的優缺點是什麼?
答:manager也是用於共享記憶體。其優點在於可以用於程序池/執行緒池中,缺點體現在windows中,會占用較多的資源(要置於if __name__ == "__main__"之下)。
9、寫乙個程式,包含十個執行緒,子執行緒必須等待主線程sleep 10秒鐘之後才執行,並列印當前時間;
答:
from threading import timer10、寫乙個程式,包含十個執行緒,同時只能有五個子執行緒並行執行;import time
def
eat(i):
print("%d: %f" % (i, time.time()))
p_li =
if __name__ == "__main__":
for i in
range(10):
p = timer(10
, eat,
args=(i,))
for p in p_li:
p.start()
print("主: %s" % time.time())
答:
from concurrent.futures import threadpoolexecutor11、寫乙個程式,要求使用者輸入使用者名稱和密碼,要求密碼長度不少於6個字元,且必須以字母開頭,如果密碼合法,則將該密碼使用md5演算法加密後的十六進製制概要值存入名為password.txt的檔案,超過三次不合法則退出程式;import time
def
drink(i):
time.sleep(0.5)
print(i)
pool = threadpoolexecutor(5) # 執行緒池
if __name__ == "__main__":
# for i in range(10):
# pool.submit(drink, i)
pool.map(drink,
range(0
, 9))
pool.shutdown()
print("主")
12、寫乙個程式,使用socketserver模組,實現乙個支援同時處理多個客戶端請求的伺服器,要求每次啟動乙個新執行緒處理客戶端請求;
import socketimport random
import time
from threading import thread
ip_addr = ("127.0.0.1"
, 8081)
def
communation(conn):
while true:
res = conn.recv(1024).decode("utf-8")
print("client(%s):%s" % (conn, res))
if not res:
break
if res == "quit":
break
time.sleep(random.randint(1
, 3))
conn.send(res.upper().encode("utf-8"))
print(time.time())
conn.close()
print("%s鏈結斷開" % conn)
def
sever():
sever = socket.socket(socket.af_inet, socket.sock_stream)
sever.setsockopt(socket.sol_socket, socket.so_reuseaddr,
1) sever.bind(ip_addr)
sever.listen(3)
while true:
conn, addr = sever.accept()
t = thread(target=communation,
args=(conn,)) # 建立乙個新子執行緒
t.start()
sever()
import socketip_addr = ("127.0.0.1"
, 8081)
def
communation(conn):
while true:
input_ = input("input:").strip().encode("utf-8")
if not input_:
continue
conn.send(input_)
res = conn.recv(1024).decode("utf-8")
print("sever:%s" % res)
conn.close()
print("%s鏈結斷開" % conn)
def
client():
client = socket.socket(socket.af_inet, socket.sock_stream)
client.setsockopt(socket.sol_socket, socket.so_reuseaddr,
1) client.connect(ip_addr)
communation(client)
client()
關於結對程式設計作業
第一次作業由於種種原因,做的很失敗,不想再說什麼了。一天改兩次作業要求的老師頭一次見,都懶得再吐槽了。千言萬語早已匯成乙個字。關於結對程式設計作業,也是第一次見放假前不留作業,假期過了兩天再留作業的老師。還是不說了,說得我自己都覺得煩了。周二晚上和這次結對作業的partner吳瀚雄討論了一下作業要求...
併發程式設計學習 併發程式設計的挑戰
死鎖 資源限制的挑戰 併發程式設計的目的是為了讓程式執行的更快,但是並不是啟動更多的執行緒,就能讓程式最大限度的併發執行。在進行併發程式設計時,如果希望通過多執行緒執行任務讓程式執行的更快,會面臨非常多的挑戰,比如上下文切換的問題,死鎖的問題,以及受限於硬體和軟體的資源限制問題 即使是單核處理器也支...
併發程式設計的藝術(一) 併發程式設計的挑戰
含義 cpu通過給每個執行緒分配cpu時間片實現多執行緒執行 當前任務執行乙個時間片後會切換下乙個任務,但切換前會儲存上乙個任務的狀態,從儲存到載入的過程就是一次上下文切換。但執行緒會有建立和上下文切換的開銷,所以多執行緒不一定快。減少上下文切換方法 無鎖併發程式設計 如id按hash演算法取模,不...