TCP/IP 网络编程 韩 [尹圣雨]

TCP/IP 网络编程 韩 [尹圣雨]

  • tcp udp

    tcp 数据传输中,不存在边界,这表示: 数据传输过程中的I/O次数不具备任何意义
    相反,UDP 是具有数据边界的协议,传输中调用i/o 函数的次数非常重要,输入调用的次数和输出调用的次数完全一致

  • udp 为啥 比 tcp快? tcp传输的数据可靠 而 udp传输的数据不可靠 ?

优雅的断开套接字的连接

套接字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的触发模式