2016-11-23 68 views
0

當我使用readline函數時發生了什麼?
readline函數:引擎蓋下,python

  1. 的功能讀出從HDD一行在RAM的緩衝器。
  2. 該函數從HDD讀取多行到RAM中的緩衝區。

    感謝
+2

以及該函數的名稱是'readline'。我不認爲選項2是有道理的。 – DeepSpace

+0

@DeepSpace你可能想看看你係統的IO然後...... –

回答

2

它的緩存一路下跌!

的Readline返回可能由被緩衝的字符串:

  1. 的Python運行時,
  2. C標準庫(標準輸入輸出),
  3. CPU緩存,
  4. 存儲器,包括虛擬存儲器,在惡劣的情況下可能是磁盤!
  5. 磁盤控制器緩存(僅在服務器上),
  6. 磁盤驅動器緩存。

您提出的二分法有不同的答案,具體取決於您正在查看的級別。對於磁盤驅動器,不存在「文件」或「行」之類的東西,因此它總會讀取「塊」。一旦將一個磁盤塊(幾KB)加載到內存中,它可能會坐在那裏直到內存需要用於別的東西。而C標準庫通常每次緩衝幾KB。

因此,一個readline調用很可能會完成幾行所需的大部分處理,並且只會將第一個返回給您。

當然,Python字符串是動態分配的,這意味着包含該行的對象也需要存儲在內存中,而在虛擬內存的情況下,其中一些也可能在磁盤上!