Linux C/C++网络编程实战-陈硕-笔记3-回顾基础的 Sockets API
性能指标
- 带宽(Bandwidth):每秒收发的数据量,MB/s。(只关注数据量,不关注消息数)
- 吞吐量(Throughput):消息/s、查询/s(QPS)、事物数/s(TPS)
- 延迟(Latency):毫秒级延迟,百分位延迟
- 资源使用率(Utilization):资源的利用程度(比例),如磁盘使用率、CPU使用率、额外开销(例如在拷文件时,需要实时压缩和加密产生的开销)
- (Overhead)
测试数据应小于Overhead,如果测试结果大于Overhead,则考虑可能有数据压缩
如果远小于Overhead且CPU使用率很低,则考虑程序在网络带宽和CPU带宽是均不理想
如果远小于Overhead且CPU使用率很高,则考虑程序在计算上消耗很大(例如SSH在拷文件时,数据加密涉及CPU计算)
为什么选择 TTCP
- 使用了基本的sockets APIs:socket,listen, bind, accept,connect,read/recv,write/send,shutdown,close 等等
- 协议带有格式,不只是字节流,相较于echo具有tcp分包处理等
- ttcp 本身是由 tcp/ip 实现的程序,具有一些典型的行为。可以阅读其代码学习它的一些优秀实现
- 协议简单,可以由多种语言实现,针对测试结果对比个语言实现的runtime开销
- 无并发连接,client与server之间只有一个tcp socket
TTCP 使用的协议
- SessionMessage:告诉服务器发送 1024 条数据,每条数据的长度是 8192 字节
- PayloadMessage
【length】:8192,表示第二个成员的 data 的长度
【length本身占4个字节】:4 - Ack(=8192)
ttcp发送数据会有一个Ack应答(已经收到了 8192 个字节)
相对于netcat只发送不接收而言,理论上讲ttcp检测出的带宽要慢于netcat测出的结果(收到 ack 才会发送下一个数据),特别对于网络有延迟的情况而言,发送数据和Ack都会有延迟产生
代码实现
直线型的阻塞IO示例:
muduo/examples/ace/ttcp/ttcp_blocking.cc (C with sockets API)
recipes/tpc/ttcp.cc (C++ with a thin wrapper)
muduo-examples-in-go/examples/ace/ttcp/ttcp.go (Go)非阻塞IO库示例:
muduo/examples/ace/ttcp/ttcp.cc以上示例都不支持并发连接,前三个示例每个连接起一个线程来处理就可以支持并发,第四个在设计上收到最后一条消息就退出,将退出语句注释掉可以支持并发。
Linux C/C++网络编程实战-陈硕-笔记3-回顾基础的 Sockets API相关推荐
- Linux C/C++网络编程实战-陈硕-笔记20-使用非阻塞IO
基于IO复用(非阻塞IO)实现的 netcat 使用非阻塞IO可以有效避免上述情况的发生.但非阻塞IO在编程上要比阻塞IO更难,并且在程序的维护上比较痛苦.一般使用非阻塞IO编程时建议使用一些封装好的 ...
- Linux C/C++网络编程实战-陈硕-笔记15-如何正确使用 TCP
netcat netcat 除了读取 socket 描述符,还要读取 stdin 和 stdout 并发模型 thread-per-connection IO 复用和非阻塞 IO 配合 如何安全的关闭 ...
- Linux C/C++网络编程实战-陈硕-笔记10-网络时间同步
网络时间同步(NTP)原理 Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为10:00:00am(T1). 当此NTP报文到达Device ...
- Linux C/C++网络编程实战-陈硕-笔记2-一个TCP的简单实验
实验环境 命令 dd命令: 用于读取.转换并输出数据. 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件.设备或标准输出. 参数: if=文件名:输入文件名,默认为标准输入.即指定 ...
- Linux C/C++网络编程实战-陈硕-笔记11-Roundtrip代码分析
代码 UDP, two threads recipes/tpc/roundtrip_udp.cc UDP with muduo, single thread muduo/examples/roundt ...
- Linux C/C++网络编程实战-陈硕-笔记17-多个版本的Netcat概览
操作模式 对于 netcat 程序,存在两种模式,即 服务端 和 客户端, 它们的区别在于连接建立的方式. 一旦连接建立,客户端/服务器 的行为都是一样的,使用两个并行的循环处理: 从标准输入,写到 ...
- Linux C/C++网络编程实战-陈硕-笔记7-TCP自连接
TCP 自连接 tcp连接两段使用了同一端口进行连接,而tcp并没有报错并且连接成功.即localhost:x --> localhost:x 只存在于 tcp 本地通信,而且客户端先于服务端启 ...
- 网络编程实践陈硕笔记零
1.理查德森的unix网络编程有两样不足:一消息格式处理,特别是非阻塞IO上处理TCP分包问题:二是并发模型稍显陈旧,传统高并发采用事件驱动加非阻塞IO方式. 2.程序员面对的网络术语 Etherne ...
- 【网络编程实践--陈硕】学习笔记 | 汇总目录
本文参考<网络编程实践>–陈硕(Muduo作者)视频课程所写.基于课程内容所做归纳和整理. <网络编程实战>配套页面:http://chenshuo.com/pnp Blog ...
最新文章
- Nginx源码分析:epoll事件处理模块概述
- c#)Excel常用格式操作
- linux 常用命令整理----链接文件
- Java程序员时刻铭记的Git常用命令
- 打破“创新困局”,让你的企业创意盎然的六个新角色
- android 状态栏、标题栏、屏幕高度
- 漫画科普:芯片是如何设计出来的
- PCIE总线-PCI、PCIE关系及信号定义
- 拼多多年货节上线,“百亿补贴”加码iPhone 12等产品
- Python面试题_中级版
- 如何使用bash / sed脚本删除文本文件的第一行?
- 时间序列分析及应用r语言pdf_R语言时间序列分析(十一):指数平滑法
- 用Linux编写简单的atm取款机系统,详细解析C++编写的ATM自动取款机模拟程序
- PC端后台管理系统实现
- 台式电脑主板插线步骤图_电脑主板跳线接法图文教程(安装过程)
- knockoutjs入门要点
- 双边滤波器和高斯滤波器
- “磁碟机”病毒详尽分析报告
- 74CMS4.1.2.4版本黑盒测试
- Excel怎么求和?5大常用的Excel求和公式