如果你運行幾個線程,但他們都必須打印到相同的標準輸出,這是否意味着他們必須相互等待?所以說如果所有4個線程都有要寫的東西,他們必須暫停並等待stdout免費,以便他們繼續工作?python線程是否等待標準輸出?
3
A
回答
3
在操作系統的系統調用中,深度較深(深度較深......),是的。現代操作系統具有線程安全的終端打印例程,通常只鎖定實際設備訪問的關鍵部分(或緩衝區,取決於您寫入的內容以及設置是什麼)。然而,這些等待時間很短。請記住,這是你在這裏處理的IO,所以相對於實際的IO執行,等待時間可能是微不足道的。
0
這取決於。如果stdout是管道,則每個管道都會獲得一個4KB的緩衝區,您可以在創建管道時覆蓋該緩衝區。當緩衝區已滿或調用flush()
時,緩衝區會被刷新。
如果stdout是終端,輸出通常是線路緩衝的。所以直到你打印換行符時,所有的線程都可以寫入它們的緩衝區。當寫入換行符時,整個緩衝區都被轉儲到控制檯上,並且所有其他線程必須等待,同時寫入換行符。
由於線程執行的其他事情不是寫新行,所以每個線程都得到一些CPU。所以即使在最壞的情況下,堵塞也應該很小。但是有一個例外:如果你寫了很多數據或者控制檯速度很慢(就像使用串口的Linux內核調試控制檯一樣)。當控制檯不能處理數據量時,越來越多的線程會掛起,等待緩衝區刷新的新行的寫入。
相關問題
- 1. execvp叉:等待標準輸出
- 2. 是否有可能輸出到監視流而不是標準輸入,標準輸出和標準錯誤? (python)
- 3. Python子進程等待,直到標準輸出上的特定字符串
- 4. Python asyncio等待線程
- 5. 線程是否在鎖FIFO上等待?
- 6. !syncblk標識等待線程
- 7. fgets不等待標準輸入
- 8. Python線程卡在另一個線程等待用戶輸入
- 9. 什麼是「等待線程」?
- 10. python如何知道子進程是否正在等待輸入
- 11. 如何找出另一個線程是否等待()ing?
- 12. 等待線程
- 13. 多線程程序:等待輸入
- 14. 線程進程等待輸入
- 15. mclapply是否等待輸出是否有依賴關係?
- 16. 如何等待,直到標準輸出完成寫入文件
- 17. 當程序等待標準輸入時,爲什麼不能從標準輸出中讀取數據?
- 18. 等待線程完成的標準方法
- 19. 輸出觀察是否符合標準
- 20. 多線程 - 等待線程
- 21. 在Python中的流標準輸出/標準輸出
- 22. 線程等待文件輸入模式
- 23. 等待的線程
- 24. 讓線程等待
- 25. WPF等待光標與BackgroundWorker線程
- 26. python子流程輸出到標準輸出
- 27. 我的pthread會等待還是等待主線程?
- 28. 意外的輸出使用並行線程條件等待
- 29. Python:同時使用標準輸入和標準輸出
- 30. 在標準輸入讀取()返回EOF而不是等待輸入
我會想象,標準輸出將有一個緩衝區,每個線程可以寫入並繼續,所以如果你有很多線程寫入緩衝區我想你可能會得到緩衝區溢出。但不知道。有興趣看看別人發佈的內容 – Richard 2011-05-16 11:28:31