跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 如果原来去下载一个资源的速度是 10M/s,但是因为我的机器磁盘 IO 被吃满了,此时我下载资源的速度还是 10M/s 吗
未分類
25 10 月 2020

如果原来去下载一个资源的速度是 10M/s,但是因为我的机器磁盘 IO 被吃满了,此时我下载资源的速度还是 10M/s 吗

如果原来去下载一个资源的速度是 10M/s,但是因为我的机器磁盘 IO 被吃满了,此时我下载资源的速度还是 10M/s 吗

資深大佬 : HorizonZy 1

不是还有内存吗
大佬有話說 (12)

  • 資深大佬 : si

    @si 如果内存够大的话,一直都是 10M/s 吗?如果内存快要耗尽了,此时还是 10M/s 吗

  • 主 資深大佬 : HorizonZy

    只要还有内存,磁盘 IO 不影响。

  • 資深大佬 : si

    我猜最终会产生一个 “写错误” 结束下载。

  • 資深大佬 : cmdOptionKana

    @si 网络下载是先写进内存,后写入磁盘的?(网上没搜到确切的资料)

  • 資深大佬 : miniwade514

    一般来说不是
    有些时候,可以按照一的说法,比如某些被缓存的 web 页面,确实会从内存取值避开硬盘,也可能特意设计了缓存来避免硬盘 io 。
    不过先想到 io 满了说的有点不够准确,因为你的下载最先用光的更多可能是硬盘的读写带宽,而不是读写流的开关

  • 資深大佬 : opengps

    @miniwade514
    如果内存耗尽,那看系统怎么处理了。系统可能直接结束进程。Windows 、Linux 一般都是用磁盘做页面文件、交换分区。假如不结束进程的话,这种情况会影响。
    基本上 CPU 和其他硬件的 IO 大部分都是经过内存。网络、磁盘这些都是通过内存中转。

  • 資深大佬 : si

    如果你采用直写方式打开文件,那么写文件的时候就会减慢速度,让你不可能达到超过磁盘 IO 的下载速度。
    比如你每秒写入 10 个 1MB 的数据,但是磁盘只能跑到 5MB/s,那么每个磁盘 write() call 会用掉 0.2 秒,也就意味着每 0.2 秒程序才会去从网络上接收下一个 1MB 的包,也就导致下载速度不会超过 5MB/s 了。

    如果是缓冲写入的话,磁盘 write()会直接写入内存,然后让内存缓冲慢慢刷进硬盘。如果内存满了,那么 write()要等内存空间,而内存空间要等内存数据刷出,数据刷出还是要等硬盘。所以最终又回到了每个 write()用掉 0.2 秒的状态。

  • 資深大佬 : msg7086

    看程序写的机制,一般会有那么一点会写内存里,但基本上磁盘 io 满了下载写此般都会下降

  • 資深大佬 : sonxzjw

    在一个阻塞的模型下 如果你的磁盘 IO 无法给你调度这 10M/s, 那么直到你的下载请求写满 buffer, 下载将会被磁盘 IO 被限制住。

  • 資深大佬 : shenlanAZ

    不是,内核 buffer 未及时落盘会阻塞导致 tcp 丢包->重传

  • 資深大佬 : SmiteChow

    buffer 会满

  • 資深大佬 : kuro1

    看你的下载软件源代码

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具