数据的收发交给网络库,业务逻辑才是网络编程的重点。
侵入式 : 做成一个库,使用者连接这个库。能够看到程序的内部状态,但是需要使用同一种语言,需要重新编译。
非侵入时:无需重新编译,但是无法看到程序的内部状态,只能看到cpu使用率,内存使用量等信息。
如何画图
- 独立的画图服务器
- JavaScript: jqPlot flot
- 使用libgd
CPU使用率:一段时间内cpu的占空比。 比如让cpu是20%的利用率:
将1秒钟分成100分,想要得到20%的cpu利用率只要让cpu载20份中busy,80份中空闲即可,而且需要热昂20份的busy均匀的分布到80的空闲时间中(使用到了bresenham算法)
可以使用ab来测试http server的性能,这里可以用来测试procmon。
使用长连接 -k
ab -k -n 10000 http://127.0.0.1:2345/
使用并发连接 -c
ab -k -n 10000 -c 2 http://127.0.0.1:2345/
请求分类:
- IO 密集型 : 127.0.0.1/
- CPU密集型: 127.0.0.1/cpu.png, 对于此类请求,可以想到使用线程池,此请求放入一个队列in,线程池从队列in中取出请求然后计算结果,最后将结果放到队列out中。
扩展
nohub扩展成web显示
真正的网络编程无需关心数据的收发(交给网络库去完成),只关心业务逻辑。
一个公司应该有已经封装好的库:入图中的NetLib,http,rpc。剩下要做的事情就是如何正确使用这些库解决业务逻辑。