我正在使用 C 11 開發一個專案。
在某些功能中,我得到了一些并行任務,如下所示:
void func() {
auto res1 = task1();
auto res2 = task2();
auto res3 = task3();
...
std::cout << res1 res2 res3 ...;
}
好吧,每個任務都有點繁重,假設每個任務將花費 300 毫秒。
現在我在想,使每項任務成為一個std::thread應該提高性能。
但據我了解,調度執行緒的是作業系統。我不確定作業系統是否確保它會立即執行這些執行緒,或者它可能需要等待其他一些東西?
所以我的問題是,如果讓任務多執行緒肯定可以提高性能,或者在某些情況下,這種方法會得到更差的性能?
順便說一句,我知道由于背景關系切換,過多的執行緒會導致性能非常差,在我的實際情況下,任務的數量少于 10,并且它們不共享任何資料。
uj5u.com熱心網友回復:
如果執行緒處于它認為它們基于此的內核級別。執行緒由內核管理,執行緒可能會被中斷。但是,這無關緊要,因為如果您不使用執行緒,程式也可能會被中斷(可能,請參見this)。但是,由于我們假設執行緒是內核級別的,因此創建它們的開銷更大,并且總體上更慢。盡管他們可以使用多個處理器。
如果執行緒處于用戶級別。執行緒會更快,但只能使用 1 個處理器。此外,如果該程序被中斷,則一切都會被中斷。
所以回答這個問題:不,多執行緒肯定不能提高性能。我認為您只需要嘗試使用和不使用多執行緒,看看什么是最快的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/407595.html
標籤:
下一篇:使用final的執行緒安全
