[問題] 程式執行

看板Programming作者 (發起錢像亂噴水)時間18年前 (2007/08/11 01:15), 編輯推噓1(104)
留言5則, 2人參與, 最新討論串1/4 (看更多)
我有三個問題,是之前寫程式遇到的,不曉得背後運作的機制如何,請指教. 1. 我在Windows寫一個程式,其中片段有: cout << "..." << endl; //假設印AAA CreateProcess(...); //假設印BBB 先印一個字串再建立新process,此process執行也會印東西, 假設以上前者印AAA,後者印BBB, 接著執行時發現難理解的現象,印出的是: BBB AAA 我說要先印的文字,跑到後面去了. 這原因是什麼? 是不是因為cout那行不是直接進行印文字的動作, 而是將一個印文字的請求推入output queue, 而之後的CreateProcess進行得比較快,比之前印文字的動作還快? 2. 我寫一個Windows程式,建立sample process做執行時間的測量, 反覆測試許多次,發現每次的執行時間都不一樣, 程式的輸出是先印出(ExitTime - CreateTime),然後是KernelTime,然後是UserTime, 在很快的連續反覆測試之後,印出的數據會看到 15 0 15, 0 0 0, 或 15 15 0.(毫秒) 而這次讀到15毫秒,下次可能讀到927毫秒,再下次又不同. 這樣的結果是不是因為有時程式是在時脈容許執行的區間,有時不在容許執行的區間? 3. 第三個問題比較難講清楚. 我在一個PC Cluster做一件事情, 寫了以下程式: for (i=0; i<N; i++) { system("ssh Node" + i + " JobTest.exe"); } 使用迴圈,依次用ssh呼叫各節點執行JobTest.exe, JobTest.exe程式內容是讀取所在節點的區域檔案,並儲存到共用的網路磁碟. 節點Node 0到Node N之間,有些機器是空缺的,或是當機的, 在不確定節點是否都提供服務時,我直接送ssh命令,因為我認為如果它不接受命令, 頂多等待久一點,但沒有結果而已. 結果,發現很神奇的事情,在網路磁碟上竟然有Node 0到Node N的檔案,一個都不缺, 但可確定的是,至少有一個節點不存在.(因為那台電腦搬去做別的事) 另外是,在這迴圈呼叫ssh命令之後, 過一會兒,又有一個迴圈要讀取網路磁碟上的檔案, 讀取的原則是比對檔案最後修改時間是不是靠近之前ssh命令呼叫的時間, 結果,發現反覆測試好幾次,雖然檔案數量相同,但程式讀檔數目卻變來變去. 這問題蠻難抓bug發生點,因為不確定是傳輸上有問題,覆寫網路磁碟檔案有問題, 或者是讀檔原則有問題. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.117.133.171 ※ 編輯: ephesians 來自: 59.117.133.171 (08/11 01:16)

08/11 14:11, , 1F
2: multi-process OS?
08/11 14:11, 1F

08/11 22:16, , 2F
console output 通常以一橫行為單位, 換
08/11 22:16, 2F

08/11 22:17, , 3F
行就會釋出 console 的擁有權.
08/11 22:17, 3F

08/11 22:19, , 4F
把其他會吃cpu time 的 process 都砍了,
08/11 22:19, 4F

08/11 22:21, , 5F
尤其是網路I/O.工作管理員測的時間是準的
08/11 22:21, 5F
文章代碼(AID): #16l9qm9z (Programming)
文章代碼(AID): #16l9qm9z (Programming)