0
我注意到在Windows操作系統下我寫的C程序和Java程序的特殊問題(我還沒有在Linux上做任何測試)。爲什麼訪問文件會凍結整個應用程序?
我最初注意到當我試圖從網絡上讀取圖像文件時(例如\\server\share\image8MB.bmp
),我的C程序凍結了不到一秒鐘。我決定把負載部分放到一個單獨的線程中,以便在圖像加載時保持GUI響應,但我仍然注意到凍結。在Java中,我看到了同樣的問題。
我的理解是,文件訪問(本地或網絡)最終會在內核空間中結束,從而「凍結」整個進程(如「OS進程」中的「進程」)。
我是否應該生成一個單獨的進程來處理文件加載/保存(並實現IPC等)?還是有其他選擇嗎?
用戶界面以及運行時間超過幾分之一秒的操作不應該在同一個線程中運行。 – keshlam
@keshlam這就是我的問題:即使在一個單獨的線程中它仍然凍結。 – Matthieu
不應該是這樣,除非你的主線程在第二個線程完成時做了一個艱苦的等待。沒有看到代碼就無法回答這個問題。如果你能想出一個最小的例子(可能是非GUI)來演示這個問題,我們可以進行調查。否則,我所能建議的就是啓動一個調試器,看看它在哪裏暫停。一個線程中的文件訪問應該*不*凍結整個過程,許多程序表明它不需要這樣做。 – keshlam