前言
在我们的经验中,有相当一部分的性能问题并不是由于未经优化的算法和大量的CPU占用造成的,而是由低效的I/O设备的使用造成的。
1.应用程序由于低效的I/O操作造成大量的CPU开销
2.进行大量小规模I/O传输,将降低I/O设备的使用率并造成资源浪费
阅读本文,你将知道:
1.I/O设备如何做异步的
2.同步I/O导致的问题
3..Net线程池有哪些部分组成,如何处理I/O
4.有哪些高效利用网络容量并降低网络延迟的优化手段
I/O设备如何做异步的
几乎所有的现在硬件都天生异步的,不需要在传输时进行数据轮询,也不需要判断I/O何时结束。大多数硬件都依赖内存访问控制器,在没有CPU参与的情况下,在设备和计算机内存间进行数据传输。
同步操作仅存于Windows应用层,而其内部实质是异步的。
同步I/O导致的问题
在同步I/O中,I/O传递函数在I/O操作完成前均保持堵塞状态。这并不高效,设备在连续的I/O访问的间隙有可能处于空闲状态,设备利用率可能较低。
.Net线程池有哪些部分组成,如何处理I/O
.Net线程池具备多种用途,不同的用途使用不同类型的线程
1.工作线程
2.I/O完成线程,用于处理全局的IOCP操作
3.等待线程
4.计时器线程,用于合并多个计时器的等待操作
5.门线程,用于监视线程池中线程的CPU使用情况,并根据限定值增加或减少线程的数量,以达到最佳的性能。
有哪些高效利用网络容量并降低网络延迟的优化手段
应用层网络协议(第七层)的实现方式可以极大的影响性能,有以下这些优化手段:
1.流水线。对于没有流水线的协议,客户端向服务器发送请求后,必须等待服务器返回响应才能发送下一个请求。因此,网络容量并没有得到有效利用,因为网络在往返时延中处于空闲状态。流水线可以在服务器返回先前的响应之前发送更多的请求。更有优势的时,可以对请求顺序重排,先处理快速响应的请求。
2.流传输
在流传输的支持下,应用程序可以在数据传输结束之前将其发送到网络上。例如视频,直播平台。
3.消息分块
每次传输少量的数据是对网络资源的浪费。这是因为以太网、IP和TCP/UDP的头部信息都不小,将网络容量大量消耗在头部信息上是非常大的浪费。若协议可以将多个请求进行合并,则可以减缓这种消耗。例如,DNS服务允许客户一次性解析多个域名。
4.聊天式协议
有时候,后一个请求是依赖前一个请求的响应的。例如,访问网页时,要先下载HTML,JS,CSS和图片等等。
为了降低其影响,服务器可以提示客户端需要获得哪些URL,以便进行页面渲染。甚至,可以在客户端未请求的情况下发送所需的内容。
网友评论