TCP/IP 网络编程 韩 [尹圣雨]
tcp udp
tcp 数据传输中,不存在边界,这表示: 数据传输过程中的I/O次数不具备任何意义
相反,UDP 是具有数据边界的协议,传输中调用i/o 函数的次数非常重要,输入调用的次数和输出调用的次数完全一致udp 为啥 比 tcp快? tcp传输的数据可靠 而 udp传输的数据不可靠 ?
优雅的断开套接字的连接
shutdown(int fd,int howto)
参数:
SHUT_RD 断开输入流
SHUT_WR 断开输出流
SHUT_RDWR 同时断开输入输出流
套接字I/O 方式
- read()/write() | send()/recv()
read()/write() 对任何文件描述符 都可以进行I/O 操作
send() /recv() 只能对套接字描述符操作
send()/recv() 可以设置flag
read()/write() 要对套接字进行flag 设置 ,得借助fcntl() 函数 - readv()/writev() | recvmsg()/sendmsg()
都有多个 I/O缓冲区(用户空间)
readv()/writev() 操作简单些
套接字 标准i/o 和系统i/o的性能比较
- 第一点 操作I/O的方式肯定不一样
自己先总结下 套接字 I/O vs 标准 I/O
系统I/O | 标准I/O |
---|---|
- 缓冲区对I/O性能的影响
- 标准I/O 提供缓冲机制,减少了系统 I/O调用的次数,但是,为了将数据及时写入磁 盘,用户得手动调用fflush() 将数据写入磁盘,这就提供了一些隐患
- 对于系统调用 应将数据缓冲区尽量定义为 磁盘扇区的整数倍(也不能太大,内存浪费)
I/O 分离
条件触发 边缘触发 优劣?
- 理论上 LT 慢于 ET 但是没有数据表明 这种差距 ,而且 ET 的控制 比 LT 麻烦
- 早期并没有 LT的触发模式