网络io、磁盘io、db和多线程开发

线程池配置中要看项目是程序密集型还是io密集型,从而配置不同的线程数量。如果是io密集型,推荐2*Ncpu的线程数量,因为在io中,线程是阻塞的,cpu没有被占用太多。由此查询了一些关于cpu和io关系的资料,主要是从软件开发的角度简单了解下,方便提高程序的性能

io其实就是读写,io分为网络io和磁盘io:网络io就不用说了,代码里发起调用其他服务的接口,必然会导致线程阻塞,直到获取结果,cpu做了发起网络请求和数据传输后应该就是等待。

https://blog.csdn.net/wenxindiaolong061/article/details/79741027

http://www.cnblogs.com/sunsky303/p/8962628.html

这两篇文章中有讲到io的控制方式,其中DMA控制方式,解释了为什么磁盘io降低了cpu使用

  • PIO
    我们拿磁盘来说,很早以前,磁盘和内存之间的数据传输是需要CPU控制的,也就是说如果我们读取磁盘文件到内存中,数据要经过CPU存储转发,这种方式称为PIO。显然这种方式非常不合理,需要占用大量的CPU时间来读取文件,造成文件访问时系统几乎停止响应。

  • DMA
    后来,DMA(直接内存访问,Direct Memory Access)取代了PIO,它可以不经过CPU而直接进行磁盘和内存的数据交换。在DMA模式下,CPU只需要向DMA控制器下达指令,让DMA控制器来处理数据的传送即可,DMA控制器通过系统总线来传输数据,传送完毕再通知CPU,这样就在很大程度上降低了CPU占有率,大大节省了系统资源,而它的传输速度与PIO的差异其实并不十分明显,因为这主要取决于慢速设备的速度。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值