[發明專利]一種基于用戶空間事件過濾的提高網絡程序處理速度的方法無效
| 申請號: | 201310431657.9 | 申請日: | 2013-09-22 |
| 公開(公告)號: | CN103514275A | 公開(公告)日: | 2014-01-15 |
| 發明(設計)人: | 王雷;吳興博;龍翔 | 申請(專利權)人: | 北京航空航天大學 |
| 主分類號: | G06F17/30 | 分類號: | G06F17/30 |
| 代理公司: | 暫無信息 | 代理人: | 暫無信息 |
| 地址: | 100191*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 用戶 空間 事件 過濾 提高 網絡 程序 處理 速度 方法 | ||
技術領域
本文涉及一種基于用戶空間事件過濾的提高網絡程序處理速度的方法。
背景技術
網絡是大數據和云計算時代提供大規模計算服務的一種基礎設施,計算資源和數據資源分布在以網絡連接的集群環境中,為其他節點提供服務在這種環境中是最常見的存在形式。NoSQL數據庫是現在流行的數據存儲與提供方法,其中,Key-Value存儲是一種具有代表性的服務類型。Key-Value存儲具有最簡單的數據模型,即鍵-值一一對應存在,通過GET、SET等非常簡單的訪問方法提供服務,這類服務在NoSQL數據存儲中具有速度快的代表特征,也反應了當今時代對數據訪問性能的日益增高的需求。比較典型的NoSQL數據存儲有:Dynamo、Voldermort、Cassandra、Memcached、Redis。在這類存儲中,每次訪問的數據傳輸量很小,常見的每個Key-Value對僅有幾百字節,而每次訪問都要進行多次的網絡讀寫,頻繁的網絡IO的操作往往會成為性能瓶頸。
網絡IO的效率可以通過IO復用技術來提高,通過IO復用技術,單一的線程能夠同時處理多個網絡連接,使得多個連接的處理流程流水線化,單一線程能夠達到很高的吞吐量。但是在這種情況下,IO操作的頻率也同比增高,單一時間內需要進行更多次的IO操作,在Linux操作系統中這一開銷對應大量的系統調用。在實踐中,效率最高的IO復用依賴Linux內核提供的epoll系統調用集合實現,主要API包括epoll_wait()、epoll_ctl()、read()、write()。epoll_ctl()調用的功能是調整應用程序對IO事件的興趣類型,本身并不實際進行IO操作。在系統負載較高的情況下epoll_ctl()系統調用的次數能占所有系統調用的一半,而耗時也超過10%,這意味著,這10%的時間沒有被花費在IO操作上,限制了系統能發揮的最大性能。
發明內容
本發明是一種基于用戶空間事件過濾的提高網絡程序處理速度的方法。本方法對網絡IO的處理消耗較少的系統調用,提高了網絡數據的處理頻率,在處理大量并發連接的網絡服務程序中,能提高系統吞吐量,尤其對于請求和回復都很小的負載樣式,效果顯著。處理過程如圖1所示。
附圖說明
圖1為對一個連接進行處理的狀態轉換圖。
具體實施方式
本發明在進行IO操作時的步驟如下:
使用Linux的Socket監聽新的連接請求,一旦接到新的連接請求,就建立連接,并將Socket連接封裝為文件描述符,后續的操作通過標準的文件描述符操作進行。新的連接都要被設置為非阻塞的IO模式。
使用epoll_create()系統調用創建一個epoll文件描述符,這個文件描述符將會關聯所有已經建立的連接,為這些連接的IO時間產生通知事件。
在用戶空間建立一個文件描述符到當前狀態的映射數據結構,用于保存當前的文見描述符正在監聽的IO事件(“可讀”,“可寫”)。
一旦新的連接建立好,就調用epoll_ctl()系統調用將這個連接的文件描述符關聯到epoll文件描述符上。新建立的連接將IO事件設置為“可讀”以及“可寫”狀態(READABLE)。設置完“可讀”和“可寫”狀態后,在應用程序中記錄相應的文件描述符和當前狀態(“可讀”)。
當映射中一個連接表示為“可讀”的時候,當獲取到一個表示“可讀”的消息后,可以對相應的文件描述符進行讀操作,通過read()系統調用讀取數據,然后對讀取的數據進行相應的處理。
當映射中一個連接表示為“可讀”的時候,當應用程序獲取到一個表示“可寫”的消息后,根據應用程序中當前記錄的狀態,將“可寫”消息忽略。繼續處理新的消息。
當應用程序要向連接另一端發送通知或者數據,發送的消息要保存到一個消息暫存區內,每個連接對應一個獨立的消息緩存區。
當消息緩存區中存在數據,應用程序將這個連接對應的文件描述符標記為“可讀”并且“可寫”的。
當消息緩存區中不存在數據,應用程序將這個連接對應的文件描述符標記為“可讀”的。
當映射中一個連接表示為“可讀”并且“可寫”的時候,當獲取到一個表示“可讀”的消息后,可以對相應的文件描述符進行讀操作,通過read()系統調用讀取數據,然后對讀取的數據進行相應的處理。
當映射中一個連接表示為“可讀”并且“可寫”的時候,當應用程序獲取到一個表示“可寫”的消息后,檢查這個連接對應的寫緩沖區是否有等待發送的數據,如果有數據在緩沖區中,那么調用write()系統調用將暫存的消息通過相應的fd發送出去。如果緩沖區中的數據過多,則一次只發送網絡允許的最大長度的消息,然后更新緩沖區,保留未發送的消息,等待下次“可寫”事件再發送剩下的數據。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京航空航天大學,未經北京航空航天大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201310431657.9/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:LD激光混相裝置及方法
- 下一篇:偏振光調制相襯顯微鏡





