io多线程 性能 扯犊子

阅读: 评论:0

io多线程  性能  扯犊子

io多线程 性能 扯犊子

搜素到的各种扯犊子、、、、、、、

 

io多线程,会降低磁盘的读写?这里的磁盘,只单快磁盘,非网络驱动器。

io多线程真的会降低磁盘性能么?
线程只是讲数据挂入到缓冲区,磁盘系统,或者操作系统,会对请求重新排序,应用层的多线程,会影响到底层磁盘的读写么?
个人觉得影响有限。。。。。。,不过没测试过。.html
这个是一个测试,可以用来参考

理论是这样的,线程的上下文切换,费用低廉;
但是磁盘上的上下文切换,需要再次寻道,这个费用比较昂贵的,一般以ms记.
普通台式机磁盘寻到一般是8.5ms,那种万转的可能是4ms左右.

磁盘上面上下文切换越多,就会有越多的寻道,效率就会越低.

奇希捷,

难道寻道不要时间??

库函数有一层库缓冲
操作系统有一层page cache
磁盘还有一层磁盘缓冲

线程写入一块数据,并不意味着磁盘会进行上下文切换。
传统磁盘永远是一圈圈的转动,线程只是将数据挂在系统的脏区,
上面比较的应该是磁盘的排序的能力(如果磁盘有这个功能的话。)

实际上上面的多线程速度稍慢,只是因为线程切换的开销,多线程,跟磁盘io,
我觉得没有你想象中的那种关系。单线程,将一个文件随即写磁盘(将文件切为100份,随即写其中一份,每次不同),效果可能比多线程更糟糕。线程写入一块数据,并不意味着磁盘会进行上下文切换。


在实验室测试服务器单线程和10个线程分别写同一个目录下的10个68.5M大小文件的多线程(2141ms)的写入速度比单线程(3356.8ms)快约40%

 

页高速缓存

        Linux内核通过页高速缓存来加快磁盘操作。当系统存在大量的空闲内存时,内核会把空闲内存的一部分做为页高速缓存。当某个磁盘块被缓存之后,对于这个 磁盘块的读写就相当于内存操作。读操作时直接读对应的page,写操作时将内容写入对应的page,然后将该page标记为脏页,会有后台线程 flush(linux 2.6内核)完成将脏页同步回磁盘。flush在脏页比例大于某个阈值,或者修改超过一定时间之后进行写回。




总结:可以看出,当测试文件增多时,在单线程情况下,性能没有降低。但多线程情况下,性能降低的很明显,由于IO阻塞导致CPU基本被吃满。所以 在实际编码过程中,如果遇到文件读写操作,最好用一个单独的线程做,其它线程可以分配给计算/网络IO等其它地方。而且要注意多个进程之间的文件IO的影 响,如果多个进程分别做顺序IO,其实全局来看(如果是一块磁盘),就变成了随机IO,也会影响系统性能。

 

本文发布于:2024-02-04 16:32:18,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170711702457293.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:犊子   多线程   性能   io
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23