日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python 管道 异步读取 select_python之异步select解析

發布時間:2023/12/10 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 管道 异步读取 select_python之异步select解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、I/O多路復用

I/O的含義:在計算機領域常說的IO包括磁盤IO和網絡IO,我們所說的IO復用主要是指網絡IO;在Linux中一切皆文件,因此網絡IO也經常用文件描述符FD來表示。

復用的含義:在通信領域中為了充分利用網絡連接的物理介質,往往在同一條網絡鏈路上采用時分復用或頻分復用的技術,使其在同一鏈路上傳輸多路信號,即公用某個“介質”來盡可能多的做同一類(性質)的事,在網絡場景中復用的“介質”就是任務處理線程,所以簡單理解就是多個IO共用1個線程。

I/O復用的好處:在傳統意義上,對于多線程并發的處理方式是,服務端監聽客戶端請求,也就是I/O流,每有一個I/O流進來,程序就創建一個線程處理這個I/O流,假設現在有一百萬個I/O流進來,那就需要開啟一百萬個線程一一對應處理這些I/O流,這樣CPU占有率很高,而且這些I/O流可能大部分時間只是連接著,沒有實際的數據讀寫,這也造成系統資源的浪費,所以人們提出了I/O多路復用這個模型,一個線程,通過記錄I/O流的狀態來同時管理多個I/O,可以提高服務器的吞吐能力。

因此就可以利用一個函數(select和poll)來監聽I/O所需的這些數據的狀態,一旦I/O有數據可以進行讀寫了,進程(也可以說是線程)就來對這樣的IO進行服務。

select,poll,epoll都是IO多路復用的機制,I/O多路復用就是通過一種機制,讓單個進程可以監視多個文件描述符,一旦某個描述符就緒(一般是讀就緒或者寫就緒),能夠通知應用程序進行相應的讀寫操作。

但select,poll,epoll本質上都是同步I/O,因為他們都需要在讀寫事件就緒后自己負責進行讀寫,也就是說這個讀寫過程是阻塞的,而異步I/O則無需自己負責進行讀寫,異步I/O的實現會負責把數據從內核拷貝到用戶空間。

二、Python select

Python的select()方法直接調用操作系統的IO接口,它監控sockets,open files, and pipes(所有帶fileno()方法的文件句柄)何時變成readable 和writeable, 或者通信錯誤,select()使得同時監控多個連接變的簡單,并且這比寫一個長循環來等待和監控多客戶端連接要高效,因為select直接通過操作系統提供的C的網絡接口進行操作,而不是通過Python的解釋器。

select()方法接收并監控3個通信列表, 第一個是所有的輸入的data,即外部發過來的數據,第2個是所有要發出去的data,第3個監控錯誤信息。需要創建2個包含輸入和輸出信息列表來傳給select(),列表里是服務端和客戶端socket對象。

程序的主循環,調用select()時會阻塞和等待直到新的連接和數據進來。

當你把inputs,outputs,exceptional(這里跟inputs共用)傳給select()后,它返回3個新的list,我們上面將他們分別賦值為readable,writable,exceptional,?所有在readable list中的socket連接代表有數據可接收(recv),所有在writable list中的存放著你可以對其進行發送(send)操作的socket連接,當連接通信出現error時會把error寫到exceptional列表中。

原文:https://www.cnblogs.com/zlw-xyz/p/12950535.html

總結

以上是生活随笔為你收集整理的python 管道 异步读取 select_python之异步select解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。