2011-12-15 154 views
13

我在一個由「UI開發人員」(我們)和「C++開發人員」(他們)組成的桌面應用程序團隊工作。 C++開發人員負責將我們在UI中顯示的所有數據都發送給我們,以便他們完成所有IO,數據庫訪問,Web調用等。C++的非線程異步IO簡介?

最近我們遇到了一些嚴重的IO阻塞性能問題UI線程。當然,解決這個問題的方法是使IO異步。但是C++開發者堅持認爲這隻能通過產生一個新線程來實現,正如我們所知道的那樣非常昂貴。

我從Node.js等知道異步IO不需要涉及線程。我知道Win32,可能是Mac,確實有一個事件循環。但是,我不知道在C++領域中用於執行異步非線程IO的流行解決方案。 (也許那個libuv是節點底層的東西?)。

任何人都可以指向一些流行的庫,或更好的教程文章,所以我們可以將這個概念介紹給我們的C++開發人員?跨平臺獎金積分(PC和Mac)。如果存在異步非線程數據庫解決方案,則可獲得更多獎勵,因爲我相信我們使用SQLite是我們許多問題的根源。

+4

「_spawning一個新的線程,這是我們所知非常昂貴」。我看到這個意見很多。我必須說,我不知道它是「非常昂貴的」。它高度依賴於你的具體使用情況,「應該避免使用」附加線程的情況比應該包含它們的一般情況要小得多。 – Chad 2011-12-15 15:37:20

+0

我們的應用程序需要閱讀用戶電子書庫中每個文件的屬性,在某些情況下,這些文件可能會超過1500個文件。 1500個線程是不可接受的。 – Domenic 2011-12-15 15:38:59

回答