Perl 處理IO多路轉接

2021-04-25 07:17:36 字數 497 閱讀 7490

io多路轉接模型在"unix環境高階程式設計"裡有重點講到,其基本模型可以用這個典型的例子加以歸納:

1) 要接收socket套接字傳來的資料,並在標準輸出上顯示;

2) 要接收標準輸入,在標準輸入上顯示後發生到網路;

這個例子在實際應用中很常見,比如我們使用的telnet客戶端,或ssh客戶端。

程式設計上該如何處理呢?

1)多程序:兩個程序分別單獨處理上面1)、2)中提到的事務;但多程序的方式有乙個明顯的難點,程序之間資料通訊比較麻煩;

2)多執行緒:多執行緒可以解決資料共享的問題,但是多執行緒共享資料需要用到鎖。

3)直接使用select()函式,將應用關係的檔案描述符放進相應的集合中,然後等待,每當有檔案描述符準備就緒時select()返回,通過判斷哪乙個描述符準備就緒,再進行相應的處理。

perl中有乙個叫做poe(portable multitasking and networking framework for perl)的模組幫助我們處理這種複雜的場景。

I O多路轉接

對於多個非阻塞i o,怎麼知道i o何時已經處於可讀或可寫狀態?如果採用迴圈一直呼叫write read,直到返回成功,這樣的方式成為輪詢 polling 大多數時間i o沒有處於就緒狀態,因此這樣的輪詢十分浪費cpu。一種比較好的技術是使用i o多路轉接,也叫做i o多路復用。其基本思想為 先構造...

I O多路轉接

include include include include include include include include include include include 巨集定義埠號 define portnumber 8000 define max line 80 int main void...

I O多路轉接(select

一.基本概念 二.函式原型 includeint select int nfds,fd set readfds,fd set writefds,fd set exceptions,struct timeval timeout fd set 介面 void fd clr int fd,fd set s...