2014-02-22 50 views
0

我注意到在Windows操作系統下我寫的C程序和Java程序的特殊問題(我還沒有在Linux上做任何測試)。爲什麼訪問文件會凍結整個應用程序?

我最初注意到當我試圖從網絡上讀取圖像文件時(例如\\server\share\image8MB.bmp),我的C程序凍結了不到一秒鐘。我決定把負載部分放到一個單獨的線程中,以便在圖像加載時保持GUI響應,但我仍然注意到凍結。在Java中,我看到了同樣的問題。

我的理解是,文件訪問(本地或網絡)最終會在內核空間中結束,從而「凍結」整個進程(如「OS進程」中的「進程」)。

我是否應該生成一個單獨的進程來處理文件加載/保存(並實現IPC等)?還是有其他選擇嗎?

+0

用戶界面以及運行時間超過幾分之一秒的操作不應該在同一個線程中運行。 – keshlam

+0

@keshlam這就是我的問題:即使在一個單獨的線程中它仍然凍結。 – Matthieu

+0

不應該是這樣,除非你的主線程在第二個線程完成時做了一個艱苦的等待。沒有看到代碼就無法回答這個問題。如果你能想出一個最小的例子(可能是非GUI)來演示這個問題,我們可以進行調查。否則,我所能建議的就是啓動一個調試器,看看它在哪裏暫停。一個線程中的文件訪問應該*不*凍結整個過程,許多程序表明它不需要這樣做。 – keshlam

回答

0

事實證明,在Windows上,文件讀/寫被推遲到內核調用的System進程。還有一種情況是我的程序正在吃2GB左右的內存,而操作系統可能會換入和換出,這並沒有幫助:事實上,我的整個操作系統都是凍結的,而不僅僅是我的程序。

相關問題