關於併發程式設計的作業

2021-08-20 22:33:58 字數 3448 閱讀 2052

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 timer

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())

10、寫乙個程式,包含十個執行緒,同時只能有五個子執行緒並行執行;

答:

from concurrent.futures import threadpoolexecutor

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("主")

11、寫乙個程式,要求使用者輸入使用者名稱和密碼,要求密碼長度不少於6個字元,且必須以字母開頭,如果密碼合法,則將該密碼使用md5演算法加密後的十六進製制概要值存入名為password.txt的檔案,超過三次不合法則退出程式;

12、寫乙個程式,使用socketserver模組,實現乙個支援同時處理多個客戶端請求的伺服器,要求每次啟動乙個新執行緒處理客戶端請求;

import socket

import 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 socket

ip_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演算法取模,不...