日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

通道Channel-IO 多路复用

發(fā)布時間:2024/4/13 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通道Channel-IO 多路复用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我們試想一下這樣的現(xiàn)實場景:

一個餐廳同時有100 位客人到店,當(dāng)然到店后第一件要做的事情就是點菜。但是問題來了,餐廳老板為了節(jié)約人力成本目前只有一位大堂服務(wù)員拿著唯一的一本菜單等待客人進行服務(wù)。

那么最笨(但是最簡單)的方法是(方法A),無論有多少客人等待點餐,服務(wù)員都把僅有的一份菜單遞給其中一位客人,然后站在客人身旁等待這個客人完成點菜過程。在記錄客人點菜內(nèi)容后,把點菜記錄交給后堂廚師。然后是第二位客人。。。。然后是第三位客人。很明顯,只有腦袋被門夾過的老板,才會這樣設(shè)置服務(wù)流程。因為隨后的80 位客人,再等待超時后就會離店(還會給差評)。

于是還有一種辦法(方法B),老板馬上新雇傭99 名服務(wù)員,同時印制99 本新的菜單。每一名服務(wù)員手持一本菜單負責(zé)一位客人(關(guān)鍵不只在于服務(wù)員,還在于菜單。因為沒有菜單客人也無法點菜)。在客人點完菜后,記錄點菜內(nèi)容交給后堂廚師(當(dāng)然為了更高效,后堂廚師最好也有100 名)。這樣每一位客人享受的就是VIP 服務(wù)咯,當(dāng)然客人不會走,但是人力成本可是一個大頭哦(虧死你)。

另外一種辦法(方法C),就是改進點菜的方式,當(dāng)客人到店后,自己申請一本菜單。想好自己要點的才后,就呼叫服務(wù)員。服務(wù)員站在自己身邊后記錄客人的菜單內(nèi)容。將菜單遞給廚師的過程也要進行改進,并不是每一份菜單記錄好以后,都要交給后堂廚師。服務(wù)員可以記錄號多份菜單后,同時交給廚師就行了。那么這種方式,對于老板來說人力成本是最低的;對于客人來說,雖然不再享受VIP 服務(wù)并且要進行一定的等待,但是這些都是可接受的;對于服務(wù)員來說,基本上她的時間都沒有浪費,基本上被老板壓桿了最后一滴油水。

如果您是老板,您會采用哪種方式呢?

到店情況:并發(fā)量。到店情況不理想時,一個服務(wù)員一本菜單,當(dāng)然是足夠了。所以不同的老板在不同的場合下,將會靈活選擇服務(wù)員和菜單的配置。

客人:客戶端請求

點餐內(nèi)容:客戶端發(fā)送的實際數(shù)據(jù)

老板:操作系統(tǒng)

人力成本:系統(tǒng)資源

菜單:文件狀態(tài)描述符(FD)。操作系統(tǒng)對于一個進程能夠同時持有的文件狀態(tài)描述符的個數(shù)是有限制的,在linux系統(tǒng)中$ulimit -n 查看這個限制值,當(dāng)然也是可以(并且應(yīng)該)進行內(nèi)核參數(shù)調(diào)整的。

服務(wù)員:操作系統(tǒng)內(nèi)核用于IO 操作的線程(內(nèi)核線程)

廚師:應(yīng)用程序線程(當(dāng)然廚房就是應(yīng)用程序進程咯)

方法A:同步IO

方法B:同步IO

方法C:多路復(fù)用IO

目前流行的多路復(fù)用IO 實現(xiàn)主要包括四種:select、poll、epoll、kqueue。下表是他們的一些重要特性的比較:

IO模型相對性能關(guān)鍵思路操作系統(tǒng)JAVA支持
select較高Reactorwindows/Linux支持,Reactor 模式(反應(yīng)器設(shè)計模式)。Linux 操作
系統(tǒng)的kernels 2.4 內(nèi)核版本之前, 默認使用
select;而目前windows 下對同步IO 的支持,都
是select 模型。
poll較高ReactorLinuxLinux 下的JAVA NIO 框架,Linux kernels 2.6 內(nèi)
核版本之前使用poll 進行支持。也是使用的
Reactor 模式。
epollReactor/ProactorLinuxLinux kernels 2.6 內(nèi)核版本及以后使用epoll 進行
支持;Linux kernels 2.6 內(nèi)核版本之前使用poll
進行支持;另外一定注意,由于Linux 下沒有
Windows 下的IOCP 技術(shù)提供真正的異步IO 支
持,所以Linux 下使用epoll 模擬異步IO。
kqueueProactorLinux目前JAVA 的版本不支持。

多路復(fù)用IO 技術(shù)最適用的是“高并發(fā)”場景,所謂高并發(fā)是指1 毫秒內(nèi)至少同時有上千個連接請求準(zhǔn)備好。其他情況下多路復(fù)用IO 技術(shù)發(fā)揮不出來它的優(yōu)勢。另一方面,使用JAVA NIO 進行功能實現(xiàn),相對于傳統(tǒng)的Socket 套接字實現(xiàn)要復(fù)雜一些,所以實際應(yīng)用中,需要根據(jù)自己的業(yè)務(wù)需求進行技術(shù)選擇。

?

總結(jié)

以上是生活随笔為你收集整理的通道Channel-IO 多路复用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。