Linux高性能网络编程一、课程目标本次课程深入讲解Linux下的socket编程,并以此为基础,着重讨论如何提高网络服务端应用的性能,通过本次课程的学习,学员将收获以下方面的成果: - 熟练使用socket系列函数进行网络编程;
- 深刻理解服务端应用的性能要求;
- 利用Linux提供的各种机制,有效地解决服务端应用的性能瓶颈。
四、课程大纲本次课程由以下几个部分构成: 1、POSIX Thread - 多线程- 线程管理
- 线程创建:pthread_create()
- 线程终止:pthread_exit()
- 线程连接和分离:join and detach
- 线程同步机制
- 互斥体:mutex
- 读写锁:read-write lock
- 条件变量:condition variable
- 线程属性控制
- mutex属性控制
2、Socket 简介- Socket地址数据结构:struct sockaddr,struct sockaddr_in
- 字节序以及字节序操作:ntohl(), ntohs(), htonl(), htons()
- Internet地址操作:inet_aton(), inet_addr(), and inet_ntoa(), inet_pton(), inet_ntop()
3、TCP Socket- socket():创建socket
- bind():绑定地址
- listen():开始侦听
- accept():接受来自客户端的连接
- connect():连接到服务器
- getsockname()和getpeername():获取本地和对端地址
- I/O 操作:read(), write()
- 更高效的I/O 操作:readv(), writev()
- TCP Server编程步骤
- TCP Server v1:迭代式Echo Server
- TCP Server v2:多进程并发式Echo Server,使用fork()和exec*()
- TCP Server v3:多线程并发式Echo Server,使用pthread
- TCP Client编程步骤
- TCP Client:Echo Client
4、UDP Socket- recvfrom()和sendto():收发UDP数据报
- UDP Echo Server
- UDP Echo Client
- 组播(Multicast)和广播(Broadcast)
5、Socket Options和 IP Options- 常用的Socket Options
- 常用的IP Options
- Socket选项和IP选项对网络应用的影响
6、I/O多路复用:构建反应式(Reactive)网络应用- UNIX I/O多路复用机制概要
- 为什么I/O 多路复用对于网络应用很重要
- I/O 多路复用与多线程(反应式模型和并发模型)
- select / poll
- 在TCP Server和UDP Server中使用select和poll
- Linux特有I/O 多路复用机制:Event poll (epoll)
- 在TCP Server和UDP Server中使用epoll
7、异步I/O:构建前摄式(Proactive)网络应用- 相关概念:同步I/O和异步I/O、Proactor模式
- 异步I/O 是如何提高I/O 性能的
- 异步I/O系列操作
- 使用异步I/O的机制构建TCP Server
8、高性能网络编程讨论- 考究高性能网络编程中应该遵循的原则,讨论并发、同步、事件多路分离等机制的适用场合
- 网络应用的瓶颈何在
- 事件多路分离 vs 一连接一线程 (Event demultiplexing vs One thread per connection)
- 同步I/O vs 异步I/O (Synchronous I/O vs Asynchronous I/O)
- 如何适当地使用多线程
- 什么时候需要多个 事件多路分离线程
9、应用层协议定义与实现- 为什么要自定义应用层协议
- 定义应用层协议 (以XMMEP协议为例)
- 用C++实现自定义的协议 (以XMMEP协议为例)
注:XMMEP为X-Messenger Message Exchanging Protocol 六、课程资源 可获取的课程资源见:教学资源。
|