簡體   English   中英

python中的os.read(0,)vs sys.stdin.buffer.read()

[英]os.read(0,) vs sys.stdin.buffer.read() in python

我遇到了picotui庫,並很好奇它的工作原理。

我在這里 (第147行)看到了它的用法:

os.read(0,32)

Google說0代表標准輸入,但從標准輸入中讀取的可接受答案是通過

sys.stdin.buffer.read()

我想知道兩者之間有什么區別。 哪個更快? 哪個是更便攜的版本?

使用os.read(0, 32)無緩沖讀取,直接調用OS級別的syscall並僅讀取非常特定數量的數據(並保證單個調用讀取的數據不會超過此數量)。 有時候-比如,如果你要你的標准輸入被移交給不同的程序, 讓它讀取掛起數據的其余部分-特別需要這一點。

sys.stdin.buffer.read()是一個緩沖的讀取(並且在不指定長度的情況下,讀取的長度盡可能多)。 緩沖讀取可以潛在地讀取您立即要求的更多數據(即使它僅返回請求的量,將其余的保留在緩沖區中以用於處理將來的請求),以減少進行的系統調用數量,從而可以減少讀取大量數據時的上下文切換開銷(尤其是當您原本會進行大量短讀時,緩沖會減少用戶層和OS內核之間的往返次數)。

其中哪一個合適,在很大程度上取決於實現和運行時環境的詳細信息,而一個詢問哪個問題適合於給定場景的問題將需要包括更多的細節,以免泛濫。 重要的是不要混在一起 在緩沖讀取之后執行無緩沖讀取可能會產生不可預測的結果,因為無法知道操作系統已經讀取了多少數據來填充讀取緩沖區的尚未使用的部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM