4 3 併發程式設計 總結練習題

2022-05-15 15:11:04 字數 4566 閱讀 1093

1.簡述計算機作業系統中的「中斷」的作用?

cpu會切:

io阻塞,程式執行時間過長

中斷:計算機執行期間,系統內發生任何非尋常的或非預期的急需處理事件,使得cpu暫時中斷當前正在執行的程式而轉去執行相應的事件處理程式.

待處理完畢後又返回原來被中斷處繼續執行或排程新的程序執行的過程.

它使計算機可以更好更快利用有限的系統資源解決系統響應速度和執行效率的一種控制技術.

實時響應 + 系統呼叫

2.簡述計算機記憶體中的「核心態」和「使用者態」;

核心態:執行作業系統的程式,os的資料存放

使用者態:執行使用者程式,使用者程序的資料存放

使用者態的應用程式可以通過三種方式來訪問核心態的資源:

1)系統呼叫

2)庫函式

3)shell指令碼

使用者態到核心態的切換:

1.系統呼叫 使用者程式主動發起的 軟中斷 os.fork() process

2.異常 被動的 當cpu正在執行執行在使用者態的程式時,突然發生某些預先不可知的異常事件,這個時候就會觸發從當前使用者態執行的程序

轉向核心態執行相關的異常事件,典型的如缺頁異常。

3.外圍裝置的硬中斷 被動的 外圍裝置完成使用者的請求操作後,會像cpu發出中斷訊號,此時,cpu就會暫停執行下一條即將要執行的指令,

轉而去執行中斷訊號對應的處理程式,如果先前執行的指令是在使用者態下,則自然就發生從使用者態到核心態的轉換。

參考:3.程序間通訊方式有哪些?

程序間通訊(ipc),佇列和管道(使用訊息傳遞的)

佇列 = 管道 + 鎖

4.簡述你對管道、佇列的理解;

佇列 = 管道 + 鎖

5.請列舉你知道的程序間通訊方式;

佇列,訊號量,event事件,定時器timer,執行緒queue,程序池執行緒池,非同步呼叫+**機制

6.什麼是同步i/o,什麼是非同步i/o?

synchronous io: 做」io operation」的時候會將process阻塞;」io operation」是指真實的io操作

blocking io,non-blocking io,io multiplexing都屬於synchronous io這一類.

asynchronous io: 當程序發起io 操作之後,就直接返回再也不理睬了,直到kernel傳送乙個訊號,

告訴程序說io完成。在這整個過程中,程序完全沒有被block。非同步io的實現會負責把資料從核心拷貝到使用者空間。

7.請問multiprocessing模組中的value、array類的作用是什麼?舉例說明它們的使用場景

8、請問multiprocessing模組中的manager類的作用是什麼?與value和array類相比,manager的優缺點是什麼?

9.寫乙個程式,包含十個執行緒,子執行緒必須等待主線程sleep 10秒鐘之後才執行,並列印當前時間

1

from threading import

thread

2import

time34

deftask(name):

5print(name,time.strftime('

%y-%m-%d %h:%m:%s

',time.localtime()))67

if__name__ == "

__main__":

8 time.sleep(10)

9for i in range(10):

10 t = thread(target=task,args=('

執行緒 %s

'%i,))

11 t.start()

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

from threading import

thread,currentthread

2from concurrent.futures import

threadpoolexecutor

3import

time

4import

random56

deftask():

7print

(currentthread().getname())

8 time.sleep(random.randint(1,3))910

if__name__ == "

__main__":

11 pool = threadpoolexecutor(5)

12for i in range(10):

13 pool.submit(task)

11. 寫乙個程式,要求使用者輸入使用者名稱和密碼,要求密碼長度不少於6個字元,且必須以字母開頭,

如果密碼合法,則將該密碼使用md5演算法加密後的十六進製制概要值存入名為password.txt的檔案,超過三次不合法則退出程式;

1

import

hashlib

2import

json

3importre4

5def

func():

6 count =0

7while count < 3:

8 username = input('

username>>>:

').strip()

9 password = input('

password>>>:

').strip()

10if len(password) < 6 or

not re.search('

\a([a-z]|[a-z])

',password):

11 count += 1

12else

:13 obj =

14 json.dump(obj,open('

password.txt

','a

',encoding='

utf-8'))

15break

1617

if__name__ == "

__main__":

18 func()

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

#server

2import

socketserver34

class handler(socketserver.baserequesthandler): #

必須繼承baserequesthandler

5def handle(self): #

必須有handle方法

6print('

new connection:

',self.client_address)

7while

true:

8try

:9 data = self.request.recv(1024)

10if

not data:break

11print('

client data:

',data.decode())

12self.request.send(data.upper())

13except

exception as e:

14print

(e)15

break

1617

if__name__ == "

__main__":

18 server = socketserver.threadingtcpserver(('

127.0.0.1

',8080),handler) #

例項化物件,實現多執行緒的socket

19 server.serve_forever() #

事件監聽,並呼叫handler方法

2021

#client

22import

socket

23 client =socket.socket(socket.af_inet,socket.sock_stream)

24 client.connect(('

127.0.0.1

',8080))

25while

true:

26 msg = input("

>>>:

").strip()

27if

not msg:continue

28 client.send(msg.encode('

utf-8'))

29 data = client.recv(1024)

30print(data.decode('

utf-8

'))

併發程式設計 練習題

1 簡述計算機作業系統中的 中斷 的作用?中斷機制包括硬體的中斷機制和作業系統的中斷處理服務程式。中斷機制由一些特定的暫存器和控制線路組成。處理器和外圍裝置等識別到的事件儲存在特定的暫存器中,處理器每執行完一條指令均由中斷機制判斷是否有事件發生。若無事件發生,cpu繼續執行,若有事件發生,則中斷機制...

併發程式設計 練習題

1 簡述計算機作業系統中的 中斷 的作用?中斷機制包括硬體的中斷機制和作業系統的中斷處理服務程式。中斷機制由一些特定的暫存器和控制線路組成。處理器和外圍裝置等識別到的事件儲存在特定的暫存器中,處理器每執行完一條指令均由中斷機制判斷是否有事件發生。若無事件發生,cpu繼續執行,若有事件發生,則中斷機制...

程式設計練習題

程式student create student studs,int n student 是乙個結構型別,包含姓名 成績和指標域。studs 陣列中儲存了n個 student 記錄。create 函式的功能是編寫根據 studs 陣列建立乙個鍊錶,鍊錶中結點按成績降序排列,函式返回煉表頭指標。inc...