高效nio框架 - nio-java-raptor
設計初衷是提供方便易用,且高效率的nio框架,一部分實現上參考了mina。還包括線程池,編解碼,內存池等機制,以便于開發高性能tcp程序。文檔后續會慢慢的補上。 整體實現上盡量少的使用鎖,避免cpu浪費。 整體框架提供了服務線程池,對于一個連接來講,這個連接的事件將會在線程池中執行,不過這個過程保證是順序執行的,例如對于一個連接,在差不多同時的時間接收到了兩個包,那么,我們可以認為,在第一次接受事件未執行完,第二個事件不會被執行,即這兩個事件不是分別被發送到兩條線程中執行,可以認為是被串行化到同一條線程中(注意:此處一條線程,并不是真的在同一條線程中執行,這兩個事件可能在不同線程中,只不過框架嚴格保證執行的先后順序了,所以對于 ThreadLocal變量的使用,是不安全的)。由于線程池的添加,我們在開過程中,無需再考慮業務層消耗,直接按事件觸發式就可以了,也不用再將數據包投遞到另外的線程中。使用方式參見TestProtocolClient,TestProtocolServer
框架還提供了完全不使用線程池的方式,請參見TestClient,TestServer
當然,如果你需要部分事件置入到線程池,也是可以的,后續,我會補一下這反面的例子代碼
循環內存池的機制,實際上是為了提供一種避免gc的一種方式,當然如果你的程序不需要內存池也可以取消掉,內存池采用的是塊分配,例如塊大小1024,如果需要4096的話,內存池會返回4個塊,具體使用可以參考TextLineProtocol類.
TextLineProtocol提供了按行的協議解析,字符采用的unicode編碼,在類似這種情況下,內存池的作用就體現出來了,不用每次new新的byte數組了。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!