2017-06-11 79 views
0

我發現從另一個答案以下報價(Performance difference for multi-thread and multi-process):虛擬內核(超線程)的兩個線程可以運行不同的操作系統進程嗎?

接下來,你可以有「超線程」的CPU,它可以(在 至少)上的核心運行兩個線程非常迅速 - 但是,而不是進程(因爲 「超線程」線程不能使用不同的地址空間) -線程可以贏得性能方面的另一種情況。

這是準確的嗎?虛擬內核的兩個線程(超線程)不能運行不同的操作系統進程?

在超線程機器上,如果我有一個使用「監督員」進程使用套接字進行通信的「工作程序」進程的程序體系結構,通過將這些工作進程移動到監督進程中,我可能會看到性能提高作爲線程(將套接字和其他所有內容相同)?

回答

0

該問題的第一部分可以快速回答,如果其相同,則可以在系統上對其進行測試。

在我帶有intel CPU的舊windows系統上,我可以通過任務管理器將不同程序(或進程)的親和性設置爲核心的每個2 HT上,看到它們實際上都會在那裏運行。

關於工人和主管的第二個問題,您可以通過讓他們在同一個進程中獲得小的性能提升(至少在Linux上)。這是因爲當你犯了一個任務切換也使設置頁表(英特爾CR3寄存器),並且代碼看起來任務切換過程是這樣的:

if (newProcess != oldProcess) 
    CR3 = new page table 

設置CR3有效的TLB無效的頁面表格不同。其結果是CPU必須執行頁表走查才能找到正確的翻譯。在64位cpu上,頁面遍歷通常需要5次內存遍歷,從5 * TLB 2訪問(每個〜3個週期)到5 *內存訪問(每個〜300個週期)。

相關問題