單個process能夠同時處理多個網絡鏈接的IOhtml
參考以下博客:
https://www.cnblogs.com/maociping/p/5129858.html
https://blog.csdn.net/mx472756841/article/details/70145762
原生socket客戶端在與服務端創建鏈接時,即服務端調用accept方法時是阻塞的,同時服務端和客戶端在收發數據(調用recv、send、sendall)時也是阻塞的。原生socket服務端在同一時刻只能處理一個客戶端請求,即服務端不能同時與多個客戶端進行通訊,實現併發,致使服務端資源閒置(此時服務端只佔據 I/O,CPU空閒)。
如今的需求是:咱們要讓多個客戶端鏈接至服務器端,並且服務器端須要處理來自多個客戶端請求。很明顯,原生socket實現不了這種需求,此時咱們該採用什麼方式來處理呢?
解決方法:採用I/O多路複用機制。在python網絡編程中,I/O多路複用機制就是用來解決多個客戶端鏈接請求服務器端,而服務器端能正常處理並響應給客戶端的一種機制。書面上來講,就是經過1種機制:能夠同時監聽多個文件描述符,一旦描述符就緒,可以通知程序進行相應的讀寫操做。
I/O多路複用是指:經過一種機制,能夠監視多個描述符,一旦某個描述符就緒(通常是讀就緒或者寫就緒),可以通知程序進行相應的讀寫操做。python
IO多路複用有些地方也稱這種IO方式爲事件驅動IO(event driven IO)。咱們都知道,select/epoll的好處就在於單個process就能夠同時處理多個網絡鏈接的IO。它的基本原理就是select /epoll這個function會不斷的輪詢所負責的全部socket,當某個socket有數據到達了,就通知用戶進程。編程
I/O多路複用是用於提高效率,單個進程能夠同時監聽多個網絡鏈接IO
I/O是指Input/Output
I/O多路複用,經過一種機制,能夠監視多個文件描述符,一旦描述符就緒(讀就緒和寫就緒),能通知程序進行相應的讀寫操做。
I/O多路複用避免阻塞在io上,本來爲多進程或多線程來接收多個鏈接的消息變爲單進程或單線程保存多個socket的狀態後輪詢處理.
import select服務器
import socket網絡
import datetime多線程