簡體   English   中英

VC ++ / C ++用於交易的高性能多線程GUI考慮因素

[英]VC++ / C++ High performance Multithreaded GUI considerations for trading

我有興趣了解開發人員在為Windows平台開發高性能多線程GUI時所經歷的考慮因素。 我在開發交易應用程序的背景下提出這個問題,其中GUI是非常動態的,應用程序延遲是一個問題。

您看到了哪些體系結構,或者您是否建議在MFC文檔/視圖中查看以在此上下文中實現觀察者模式。 我認為由於性能問題,不會使用文檔/視圖。

需要對在MFC和Qt中的單獨線程中更新的UI組件/窗口進行哪些具體考慮? 是否有適用於所有GUI庫的一般規則?

你正在尋找完全錯誤的地方。 文檔/視圖架構的“開銷”在納秒范圍內(基本上,通過指針訪問數據)。

為了進行比較,您可以有意義地更新屏幕的絕對最大速率是監視器的刷新率,通常為60 Hz(即每16.67毫秒一次)。

為了使這種刷新率有意義,在任何給定的監視器更新中你都無法真正改變 - 如果你試圖改變太多,用戶將無法跟蹤正在發生的事情。

就線程而言,到目前為止,最簡單的方法是在一個線程中進行所有實際窗口更新,並使用其他線程進行計算,從而為正在更新的窗口生成數據。 只要你確保線程不需要做很多計算等等,就像任何使用一樣快速更新窗口非常容易。

編輯:就C ++與C#而言,它取決於。 毫無疑問,你可以從任何一個中獲得完全足夠的顯示性能。 真正的問題是你在這些顯示器后面做了多少計算。 您所提到的主要是顯示非常接近原始數據(價格,數量等)。為此,C#可能會很好。 我的猜測是,與你交談過的人所做的計算量要大得多 - 這就是.NET的真正致命弱點(或幾乎任何在VM上運行的其他東西)。 從我所看到的,對於真正重型計算,C#等並不是真正具有競爭力。

例如,在前一段時間的另一個回答中我提到了一個我最初在C ++中編寫的應用程序,另一個團隊在C#中重寫了,它的運行速度慢了大約3倍。 發布之后,我很好奇,並與他們進行了更多的討論,詢問他們是否無法通過一些額外的工作來提高速度,使其至少與C ++接近。

他們的回答是,在本質上,他們會已經這樣做了額外的工作,而且它只是“一點點”。 C#重寫花了3 1 / 2-4個月。 在那段時間里,他們花了不到一個月的時間來復制原作的特征 ; 其余的時間花在(試圖)使其足夠快以便可用。

我不得不提醒1)這只是一個數據點,2)我不知道你可能做的事情有多接近。 盡管如此,它確實可以讓您了解當您(以及如果)開始進行實際計算而不是僅僅將數據從網絡傳遞到屏幕時可能遇到的減速類型。 同時,快速查看表明它通常與計算機語言大戰網站上的結果一致 - 但請記住Mono而不是Microsoft的實現結果。

至少在我看來,真正的問題歸結為:你對績效的關注是否真的有充分根據? 對於像周圍的應用程序的90%,最重要的是簡單的代碼做你希望它是什么 ,和執行的速度關系不大,只要它沒有得到的時候要慢大大慢(例如,數百或數千)。 如果您的代碼屬於那個(大)類別,那么C#可能是一個不錯的選擇。 如果你真的有一個很好的理由要關心執行速度,那么在我看來,選擇C#將是一個很多更值得懷疑。

既然您在評論中提到了選擇C ++或C#的問題,我將推薦C#,尤其是WPF(Windows Presentation Foundation)。 從理論上講,C ++應用程序具有比.Net應用程序更高的性能上限,因為它沒有.Net框架開銷來處理。 但它也需要更長的時間來開發(可能)並且更容易出錯和內存泄漏。

如果您要編寫自己的顯示控件,WPF(甚至WinForms)足夠快,可以處理這種控制負載(如果與任何語言/平台一樣,它是正確編寫的)。 此外,還有大量的自定義控件可以完成這類工作(顯示股票圖表和諸如此類的東西),這使得構建此應用程序的速度比從頭開始完成所有操作要快得多。

我曾在交易應用程序的GUI端工作。 基本上,任何本地(即非Web)都足夠快。 C ++,C#或Java都可以。 使用C ++的主要缺點是它消除了計算代碼和UI之間的天然屏障。 我之前的程序員有點草率,使用C ++,因此計算代碼和UI有些交織在一起。 這使得Qt端口變得更難。

多線程與UI無關。 它應該在自己的線程上運行,這意味着只有計算引擎的接口需要關注在其他線程上調用的可能性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM