io多线程 性能 扯犊子

2023-12-05 07:40
文章标签 性能 多线程 io 犊子

本文主要是介绍io多线程 性能 扯犊子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

 

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

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

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

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

奇希捷http://www.bloxpo.com/的硬盘多线程IO效率居然不降低的,

难道寻道不要时间??

库函数有一层库缓冲
操作系统有一层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,也会影响系统性能。

 

这篇关于io多线程 性能 扯犊子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/456726

相关文章

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复

JVisualVM之Java性能监控与调优利器详解

《JVisualVM之Java性能监控与调优利器详解》本文将详细介绍JVisualVM的使用方法,并结合实际案例展示如何利用它进行性能调优,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1. JVisualVM简介2. JVisualVM的安装与启动2.1 启动JVisualVM2

Java使用MethodHandle来替代反射,提高性能问题

《Java使用MethodHandle来替代反射,提高性能问题》:本文主要介绍Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录一、认识MethodHandle1、简介2、使用方式3、与反射的区别二、示例1、基本使用2、(重要)

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

Python多进程、多线程、协程典型示例解析(最新推荐)

《Python多进程、多线程、协程典型示例解析(最新推荐)》:本文主要介绍Python多进程、多线程、协程典型示例解析(最新推荐),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 目录一、multiprocessing(多进程)1. 模块简介2. 案例详解:并行计算平方和3. 实现逻

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

Python文件操作与IO流的使用方式

《Python文件操作与IO流的使用方式》:本文主要介绍Python文件操作与IO流的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python文件操作基础1. 打开文件2. 关闭文件二、文件读写操作1.www.chinasem.cn 读取文件2. 写

Java的"伪泛型"变"真泛型"后对性能的影响

《Java的伪泛型变真泛型后对性能的影响》泛型擦除本质上就是擦除与泛型相关的一切信息,例如参数化类型、类型变量等,Javac还将在需要时进行类型检查及强制类型转换,甚至在必要时会合成桥方法,这篇文章主... 目录1、真假泛型2、性能影响泛型存在于Java源代码中,在编译为字节码文件之前都会进行泛型擦除(ty

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI