2010-09-24 76 views
0

我有一個線程用於觀看Mac OS X上的文件系統事件,如果我100個文件複製到一個被監視的文件夾中出現多個回調,我顯然得到多個文件系統事件,因此多回調呼叫。我想知道這些回調調用是否被一個接一個地處理?或者每個事件調用一個操作系統線程,該線程又調用回調函數,在這種情況下,我們將有多個線程執行相同的回調函數?關於產品的同時

回答

1

這取決於你使用觀看文件系統事件,機制。

每次訪問一個文件生成一個內核中的通知。

如果使用公共FSEvents API,過於頻繁的更新被合併到一個單一的通知。這種情況下,接收端是由一個run loop管理,即回調稱爲在新的後臺線程,或OS線程的上下文中。它在您指定的事件循環中運行,通常是運行主事件處理循環的主線程。

如果直接打入/dev/fsevents(見例如the OS X book),您可以通過一個得到調用線程一個所有的事件,通過一個調用返回的可能是多個事件。

同樣,如果您改爲使用BSD派生的kqueue,如果事件頻繁發生,您將從kqueue的調用中獲得多個事件。

在任何情況下,操作系統不會在新/ OS線程中運行你的回調,也不會神奇地複製你的線程監視的文件系統的活動,使他們能夠同時處理的事件。