ฉันใช้std::for_each
กับstd::execution::par
เพื่อทำการคำนวณที่ซับซ้อนในการป้อนข้อมูลขนาดใหญ่ที่แสดงเป็นเวกเตอร์ของโครงสร้าง การคำนวณไม่ต้องการความล่าช้าใด ๆ ที่เกี่ยวข้องกับฮาร์ดแวร์ (เช่นเครือข่ายหรือดิสก์ IO) เป็นการคำนวณแบบ "just CPU" สำหรับฉันมันดูเหมือนว่าไม่มีเหตุผลที่จะสร้างเธรด OS เพิ่มเติมที่เรามีฮาร์ดแวร์ อย่างไรก็ตาม Visual C ++ 2019 จะสร้างเธรดโดยเฉลี่ย 50 เธรดและบางครั้งมากถึง 500 เธรดแม้ว่าจะมีเธรดฮาร์ดแวร์เพียง 12 เธรดเท่านั้น
มีวิธี จำกัด เธรดแบบขนานที่นับhardware_concurrency
ด้วยstd::for_each
และstd::execution::par
หรือวิธีเดียวในการสร้างจำนวนเธรดที่สมเหตุสมผลคือการใช้โค้ดที่กำหนดเองด้วยstd::thread
?
std::for_each
และอัลกอริทึมอื่น ๆ จาก<algorithm>
ส่วนหัว แนวคิดหลักที่อยู่เบื้องหลังstd::execution::par
คือการสร้างโค้ดคู่ขนานให้ใกล้เคียงกับความเรียบง่ายตามลำดับและการอัลกอริธึมที่มีอยู่แบบขนานพร้อมกับการเปลี่ยนรหัสและซีแมนทิกส์น้อยที่สุด