大多數情況下,你根本不想爲簡單的序列使用單獨的線程,如標記字符串,然後將標記轉換爲雙精度。
恰恰相反,當你在線程中拆分一個任務時,你希望找到不需要按順序完成的事情,恰恰相反,你通常希望儘量減少線程之間的交互作爲儘可能多
因此,不是讓一個線程標記化,而是另一個轉換爲double,您通常更喜歡將標記化和轉換放在一起,但將輸入分成幾個大的數據塊,每個數據塊將由單個線程處理。
即使這可能最終會做很少(如果有的話)實際不錯。我首先在單個線程中編寫代碼,然後進行一些分析。鑑於標記和轉換數據涉及少量的處理,單線程將能夠處理足夠快的速度以使用所有可用的內存帶寬,這是非常好的機會。在這種情況下,使用更多線程不太可能產生真正的好處,除非您使用的系統可能(例如)在完全獨立的處理器上運行多個線程,因此可用內存帶寬會擴大(至少在某種程度上)以及您使用的核心。
多個線程將(至少潛在地並且通常實際上)在多個核心上運行。 parallel_for
/parallel_for_each
旨在簡化某些特殊情況下的並行處理,因此您可以獲得多線程的效果,而無需跳過幾乎所有的火焰箍,以確保正確的行爲。
當您希望線程執行異構處理時,可以使用std::thread
而不是parallel_for(或類似)的顯而易見的條件。 parallel_for基本上只需要循環的迭代並行執行它們。如果你的處理沒有(大部分)發生在像這樣的單個循環中,那麼std::thread
可能會產生更好的結果。