美文网首页
IO操作性能

IO操作性能

作者: simples | 来源:发表于2019-04-09 12:13 被阅读0次

操作系统--阻塞,睡眠,挂起

参考: https://www.jianshu.com/p/ad29c92324a1

java中io操作会使线程阻塞,那IO操作怎么完成

image.png

场景:main方法开启工作线程A 执行阻塞式read()操作,A进入阻塞状态直到read()方法返回

疑问:

  • 阻塞期间A无法获得cpu时间片,read()操作怎么执行的?
  • 为何io操作会使线程阻塞? 我在A线城执行其他耗时操作(比如复杂的数学计算),为何A会一直运行

解答:


image.png
  • 看这个就能知道, 阻塞IO在阻塞时候的操作不是在用户线程执行,用户线程现在被阻塞, 而是操作系统来完成(这个时候Java的线程只能等待), 等操作系统那边准备好数据以后用户线程才继续.

I/O会一直占用CPU吗?

  • 阻塞io情况下,比如磁盘io,accept ,read,recv,write等调用导致进程或者线程阻塞,这时候线程/进程 会占用cpu吗?比如连接mysql,执行一条需要执行很长的sql语句,recv调用的时候阻塞了,这个时候会不会大量占用cpu时间?磁盘io是什么操作,比如linux调用cp拷贝大文件的时候会大量占用cpu吗?

  • 计算机硬件上使用DMA(Direct Memory Access,直接内存存取)来访问磁盘等IO,也就是请求发出后,CPU就不再管了,直到DMA处理器完成任务,再通过中断告诉CPU完成了。所以,单独的一个IO时间,对CPU的占用是很少的,阻塞了就更不会占用CPU了,因为程序都不继续运行了,CPU时间交给其它线程和进程了。虽然IO不会占用大量的CPU时间,但是非常频繁的IO还是会非常浪费CPU时间的,所以面对大量IO的任务,有时候是需要算法来合并IO,或者通过cache来缓解IO压力的。所以IO密集型其实是很耗CPU的。

知乎: https://www.zhihu.com/question/27734728

参考:https://segmentfault.com/q/1010000012982974/a-1020000012983411
https://www.zhihu.com/question/27734728/answer/37877484

相关文章

  • IO操作性能

    操作系统--阻塞,睡眠,挂起 参考: https://www.jianshu.com/p/ad29c92324a1...

  • Java中的IO

    简介 IO操作一般来讲比较耗时,可能操作本地的文件、目录,也可能操作网络上的资源,影响 IO 操作性能的主要方面是...

  • Spark的join什么情况下可以避免shuffle?

    Spark的join操作可能触发shuffle操作。shuffle操作要经过磁盘IO,网络传输,对性能影响比较大。...

  • 都看OkHttp的源码,Okio的源码你看过吗?

    / 正文 / Okio是对java原生io的封装,旨在简化api同时优化io操作性能。接下来我会从下面几个...

  • 1.影响mysql性能的因素

    问:影响mysql性能的因素有哪些? 答: 服务器硬件 磁盘io 网卡流量 操作系统(32位,64位,系统不同性能...

  • MySql优化(持续更新)

    B树与B+树 在磁盘设计中每经过一个节点就是一次io操作,io操作是会影响性能的,所以磁盘存储的数据结构设计最终的...

  • 如何提高爬虫性能

    高性能 IO阻塞,无论是多进程还是多线程,在遇到IO阻塞时都会被操作系统强行夺走CPU的执行权限,程序的执行效率一...

  • 同步异步,阻塞,非阻塞

    IO操作其实可以分成两个步骤,请求IO操作和执行IO操作。一般的IO调用过程是这样的:发起IO操作的请求,执行IO...

  • Nginx高性能原因

    nginx高性能原因 epoll多路复用 非阻塞IO操作 java bio模型,阻塞进程式java bio模型 l...

  • 高性能IO模型(摘选)

    高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Bloc...

网友评论

      本文标题:IO操作性能

      本文链接:https://www.haomeiwen.com/subject/yeqbiqtx.html