商品簡介
本書從操作系統底層的IO原理入手,同時提供高性能開發的實戰案例,是一本高併發Java編程應用基礎圖書。
本書共分為12章。第1~5章為高併發基礎,淺顯易懂地剖析高併發IO的底層原理,細緻地講解Reactor高性能模式,圖文並茂地介紹Java異步回調模式。這些原理方面的基礎知識非常重要,會為讀者打下堅實的基礎,也是日常開發Java後臺應用時解決實際問題的金鑰匙。第6~9章為Netty原理和實戰,是本書的重中之重,主要介紹高性能通信框架Netty、Netty的重要組件、單體IM的實戰設計和模塊實現。第10~12章對ZooKeeper、Curator API、Redis、Jedis API的使用進行詳盡的說明,以提升讀者設計和開發高併發、可擴展系統的能力。
本書兼具基礎知識和實戰案例,既可作為對Java NIO、高性能IO、高併發編程感興趣的大專院校學生和初、中級Java工程師的學習參考書,也可作為在生產項目中需要用到Netty、Redis、ZooKeeper三大框架的架構師或項目人員的使用參考書。
目次
前言
第1章 高併發時代的必備技能1
1.1 Netty為何這麼火1
1.1.1 Netty火熱的程度1
1.1.2 Netty是面試的必殺器2
1.2 高併發利器Redis2
1.2.1 什麼是Redis2
1.2.2 Redis成為緩存事實標準的原因3
1.3 分布式利器ZooKeeper3
1.3.1 什麼是ZooKeeper3
1.3.2 ZooKeeper的優勢4
1.4 高併發IM的綜合實踐4
1.4.1 高併發IM的學習價值4
1.4.2 龐大的應用場景5
1.5 Netty、Redis、ZooKeeper實踐計劃5
1.5.1 第1天:Java NIO實踐5
1.5.2 第2天:Reactor反應器模式實踐6
1.5.3 第3天:異步回調模式實踐7
1.5.4 第4天:Netty基礎實踐8
1.5.5 第5天:解碼器(Decoder)與編碼器(Encoder)實踐9
1.5.6 第6天:JSON和ProtoBuf序列化實踐11
1.5.7 第7~10天:基於Netty的單聊實戰12
1.5.8 第11天:ZooKeeper實踐計劃14
1.5.9 第12天:Redis實踐計劃14
1.6 本章小結16
第2章 高併發IO的底層原理17
2.1 IO讀寫的基礎原理17
2.1.1 內核緩衝區與進程緩衝區18
2.1.2 詳解典型的系統調用流程18
2.2 四種主要的IO模型19
2.2.1 同步阻塞IO(Blocking IO)20
2.2.2 同步非阻塞NIO(None Blocking IO)21
2.2.3 IO多路複用模型(IO Multiplexing)22
2.2.4 異步IO模型(Asynchronous IO)23
2.3 通過合理配置來支持百萬級併發連接24
2.4 本章小結26
第3章 Java NIO通信基礎詳解27
3.1 Java NIO簡介27
3.1.1 NIO和OIO的對比28
3.1.2 通道(Channel)28
3.1.3 Selector 選擇器28
3.1.4 緩衝區(Buffer)29
3.2 詳解NIO Buffer類及其屬性29
3.2.1 Buffer類29
3.2.2 Buffer類的重要屬性29
3.2.3 4個屬性的小結31
3.3 詳解NIO Buffer類的重要方法31
3.3.1 allocate()創建緩衝區31
3.3.2 put()寫入到緩衝區32
3.3.3 flip()翻轉33
3.3.4 get()從緩衝區讀取34
3.3.5 rewind()倒帶35
3.3.6 mark( )和reset( )37
3.3.7 clear( )清空緩衝區38
3.3.8 使用Buffer類的基本步驟38
3.4 詳解NIO Channel(通道)類38
3.4.1 Channel(通道)的主要類型39
3.4.2 FileChannel文件通道39
3.4.3 使用FileChannel完成文件複製的實踐案例41
3.4.4 SocketChannel套接字通道42
3.4.5 使用SocketChannel發送文件的實踐案例44
3.4.6 DatagramChannel數據報通道46
3.4.7 使用DatagramChannel數據包通道發送數據的實踐案例47
3.5 詳解NIO Selector選擇器49
3.5.1 選擇器以及註冊49
3.5.2 SelectableChannel可選擇通道50
3.5.3 SelectionKey選擇鍵50
3.5.4 選擇器使用流程50
3.5.5 使用NIO實現Discard服務器的實踐案例52
3.5.6 使用SocketChannel在服務器端接收文件的實踐案例54
3.6 本章小結57
第4章 鼎鼎大名的Reactor反應器模式59
4.1 Reactor反應器模式為何如此重要59
4.1.1 為什麼首先學習Reactor反應器模式59
4.1.2 Reactor反應器模式簡介60
4.1.3 多線程OIO的致命缺陷60
4.2 單線程Reactor反應器模式62
4.2.1 什麼是單線程Reactor反應器62
4.2.2 單線程Reactor反應器的參考代碼63
4.2.3 一個Reactor反應器版本的EchoServer實踐案例65
4.2.4 單線程Reactor反應器模式的缺點67
4.3 多線程的Reactor反應器模式68
4.3.1 多線程池Reactor反應器演進68
4.3.2 多線程Reactor 反應器的實踐案例68
4.3.3 多線程Handler處理器的實踐案例70
4.4 Reactor反應器模式小結72
4.5 本章小結73
第5章 併發基礎中的Future異步回調模式74
5.1 從泡茶的案例說起74
5.2 join異步阻塞75
5.2.1 線程的join合併流程75
5.2.2 使用join實現異步泡茶喝的實踐案例75
5.2.3 詳解join合併方法77
5.3 FutureTask異步回調之重武器77
5.3.1 Callable接口77
5.3.2 初探FutureTask類78
5.3.3 Future接口79
5.3.4 再探FutureTask類79
5.3.5 使用FutureTask類實現異步泡茶喝的實踐案例80
5.4 Guava的異步回調82
5.4.1 詳解FutureCallback82
5.4.2 詳解ListenableFuture83
5.4.3 ListenableFuture異步任務84
5.4.4 使用Guava實現泡茶喝的實踐案例84
5.5 Netty的異步回調模式87
5.5.1 詳解GenericFutureListener接口87
5.5.2 詳解Netty的Future接口88
5.5.3 ChannelFuture的使用88
5.5.4 Netty的出站和入站異步回調89
5.6 本章小結90
第6章 Netty原理與基礎91
6.1 第一個Netty的實踐案例DiscardServer91
6.1.1 創建第一個Netty項目91
6.1.2 第一個Netty服務器端程序92
6.1.3 業務處理器NettyDiscardHandler93
6.1.4 運行NettyDiscardServer94
6.2 解密Netty中的Reactor反應器模式95
6.2.1 回顧Reactor反應器模式中IO事件的處理流程95
6.2.2 Netty中的Channel通道組件96
6.2.3 Netty中的Reactor 反應器96
6.2.4 Netty中的Handler處理器97
6.2.5 Netty的流水線(Pipeline)98
6.3 詳解Bootstrap啟動器類100
6.3.1 父子通道100
6.3.2 EventLoopGroup線程組101
6.3.3 Bootstrap的啟動流程101
6.3.4 ChannelOption通道選項104