一、課程目標(biāo)
本次課程圍繞高性能網(wǎng)絡(luò)編程這一主題,從眾多的Boost類(lèi)庫(kù)中挑選出Boost.Asio、Boost.Thread以及其它配套的實(shí)用庫(kù),作為主要學(xué)習(xí)的內(nèi)容,通過(guò)本次課程的學(xué)習(xí),學(xué)員將具備以下能力:
- 掌握智能指針、高階函數(shù)對(duì)象、對(duì)象序列化/反序列化等類(lèi)庫(kù)的使用;
- 理解現(xiàn)代操作系統(tǒng)線程模型、并發(fā)以及同步機(jī)制;
- 熟練使用Boost.Thread線程管理和同步機(jī)制接口開(kāi)發(fā)并發(fā)應(yīng)用;
- 深刻理解現(xiàn)代操作系統(tǒng)中事件多路分離和分派機(jī)制如select、epoll等、了解異步I/O以及完成事件的分派;
- 熟練使用Boost.Asio構(gòu)建穩(wěn)定、高效和靈活的網(wǎng)絡(luò)應(yīng)用。
四、課程大綱
本次課程由以下幾個(gè)部分構(gòu)成:
1、Boost.Serialization - 序列化
- 基本類(lèi)型和自定義類(lèi)型的序列化;
- 數(shù)組、指針和智能指針的序列化;
- STL容器、std::string的序列化;
- 識(shí)別類(lèi)的版本;
- XML格式的archive;
- 二進(jìn)制格式的archive。
2、Boost.Smart_Ptr - 智能指針
- 回顧std::auto_ptr<>;
- 無(wú)Copyable 語(yǔ)義的scoped_ptr<>;
- shared_ptr<>;
- weak_ptr<>;
- enable_shared_from_this<>;
3、Boost.Bind and Boost.Function- 函數(shù)對(duì)象相關(guān)
- 什么是函數(shù)對(duì)象?
- 回顧std::bind1st()、std::bind2nd()、std::mem_fun()、std::ptr_fun()等適配器;
- Boost bind();
- Boost Function;
- Boost ref()。
4、Boost.Signals2 - 實(shí)現(xiàn)回調(diào)機(jī)制
- Boost Signal2:線程安全的Signal-Slot機(jī)制 (Publishers → Signals/Subscribers → Slots),即Observer模式的實(shí)現(xiàn);
- 簡(jiǎn)單的回調(diào);
- 多個(gè)Slot回調(diào);
- 管理Connections;
- 一些示例。
5、一些實(shí)用類(lèi)庫(kù)
- Boost.Property_Tree;
- Boost.Format;
6、Boost.Thread - 多線程
- 線程與進(jìn)程之區(qū)別;
- 用戶(hù)線程與內(nèi)核線程;
- 不同操作系統(tǒng)中的線程模型;
- 線程管理:線程創(chuàng)建、中斷、分離/連接等;
- 同步機(jī)制:Mutex、Lock、Condition_variable、TSS等。
7、Boost.Asio - 網(wǎng)絡(luò)編程
Boost.Asio庫(kù),通過(guò)對(duì)各類(lèi)操作系統(tǒng)原生的socket API以及事件多路分離、異步I/O API的封裝,構(gòu)成了一個(gè)性能優(yōu)秀、可移植性高、便于編程的網(wǎng)絡(luò)編程框架,使復(fù)雜的網(wǎng)絡(luò)編程任務(wù)變得簡(jiǎn)單、安全、并且高效。
- Asio相關(guān)概念:同步I/O和異步I/O、Proactor模式、Asio和線程;
- Linux 下 I/O事件多路分離機(jī)制:select、epoll;
- TCP同步I/O Server/Client編程示例;
- UDP同步I/O Server/Client編程示例;
- TCP異步I/O Server/Client編程示例;
- UDP異步I/O Server/Client編程示例;
- Timer - 定時(shí)器;
- Asio核心接口介紹。
8、高性能網(wǎng)絡(luò)編程討論
- 考究高性能網(wǎng)絡(luò)編程中應(yīng)該遵循的原則,討論并發(fā)、同步、事件多路分離等機(jī)制的適用場(chǎng)合。
- 網(wǎng)絡(luò)應(yīng)用的瓶頸在何處?
- 事件多路分離 vs 一連接一線程 (Event demultiplexing vs One thread per connection);
- 同步I/O vs 異步I/O (Synchronous I/O vs Asynchronous I/O);
- 如何適當(dāng)?shù)厥褂枚嗑€程?
- 什么時(shí)候需要多個(gè) 事件多路分離線程?
9、應(yīng)用層協(xié)議定義與實(shí)現(xiàn)
- 為什么要自定義應(yīng)用層協(xié)議?
- 定義應(yīng)用層協(xié)議 (以XMMEP協(xié)議為例);
- 用C++實(shí)現(xiàn)自定義的協(xié)議 (以XMMEP協(xié)議為例)。
注:XMMEP為X-Messenger Message Exchanging Protocol。
六、課程資源
可獲取的課程資源見(jiàn):教學(xué)資源。