原创 BIO、AIO、NIO

BIO Blocking IO:同步阻塞,一個線程一個連接,一個請求就需要一個線程。如果連接不做讀寫,那麼線程就會閒置。線程的開銷大。 優點及應用場景:適用於連接數目小且固定的架構。對服務器的資源要求較高,併發侷限與應用中。但簡

原创 Golang函數

init函數 Golang中: 先初始化全局變量 執行init函數 執行main函數\ var t = test() // init方法 func init() { fmt.Println("init method..

原创 零拷貝zero copy

零拷貝的概念 零拷貝:CPU不執行拷貝數據的任務 優點: 減少不必要的cpu拷貝 減少內存帶寬的使用 減少系統態用戶態的切換 傳統IO 四次用戶態系統態的切換 四次數據拷貝(兩次DMA拷貝,兩次cpu拷貝) 硬盤到內核

原创 Shell 命令啓動Docker Container

Linux虛擬機重啓後,都要手動啓動多個Docker Container,着實麻煩,使用Shell命令可以減去這個麻煩。 創建文件,添加可執行權限 touch startcontiner.sh chomd +x startco

原创 編碼器與解碼器

編碼器與解碼器 以ProtobufEncoder爲例子, ProtobufEncoder繼承ChannelOutboundHandler,與我們自定義的出站處理器(OutboundHandler)相似。 出站時(即向Chann

原创 Netty模型

相比於NIO NIO學習成本高,代碼複雜 NIO存在Bug Netty架構設計、線程模型 傳統的阻塞IO 一個請求一個線程。 缺點 併發數高時,就會創建大量的線程,佔用系統資源 當沒有數據可讀時,線程會阻塞read操作,

原创 Golang面向對象

Golang中雖然沒有class,但是通過結構體struct依然支持OOP(封裝、多態、繼承)。 Struct 使用struct封裝對象的屬性。 type Person struct { // 大寫、公有 Name stri

原创 基於Netty的WebSocket

WebSocket Http是無狀態的,瀏覽器每次請求,都是創建一個新連接,傳輸完畢即斷開。雙方並不能感知對方的狀態。 而WebSocket是長連接,一次TCP握手,即可建立持久性的連接,並且雙方能感知到對方的狀態。 核心代碼:

原创 Netty介紹及NIO詳解

Netty簡介 Netty是一個異步、基於事件驅動的網絡應用框架 BIO、NIO、AIO的簡介 應用場景 分佈式系統中各節點遠程過程調用(RPC:Dubbo) 遊戲服務器 Hadoop通信 NIO 三大組件 NIO三大組

原创 JVM垃圾回收器和調優

回顧 什麼是GC? 找到垃圾,並且回收,讓這塊內存重新可用。 Java的GC算法是根搜索算法,可以作爲GCRoot的對象有 線程棧變量 靜態變量 常量池 JNI指針 回收的算法有: 標記清除 標記整理 複製算法 TLA

原创 ChannelFuture異步模型

Netty中的操作,如bind、Connect、Write,會返回一個ChannelFuture。 調用者並不能立刻獲得結果,而是通過Future-Listener機制,用戶可以主動獲取或等待通知機制獲取IO操作結果。 Netty

原创 Spring Boot啓動後執行

啓動後執行 Spring Boot啓動後執行,有兩個接口可以實現 ApplicationRunner 實現ApplicationRunner接口可以在容器程序啓動後執行。 @Component public class Appl

原创 Netty編寫簡單的Http服務器

HttpServer public class MyHttpServer { public static void main(String[] args) { NioEventLoopGroup bos

原创 Netty心跳檢測

IdleStateHandler Netty中的心跳檢測機制,根據這個處理器能及時的檢測到讀/寫/讀寫空閒狀態,根據狀態進行相應的處理。 Triggers an {@link IdleStateEvent} when a {@

原创 IDEA使用Docker插件遠程部署項目到雲服務器

1. 打開2375端口 編輯docker.service vim /lib/systemd/system/docker.service 在 ExecStart 後添加配置 -H tcp://0.0.0.0:2375 -