คำถามติดแท็ก parallel-processing

การประมวลผลแบบขนานนั้นตรงกันข้ามอย่างชัดเจนกับการประมวลผลพร้อมกันซึ่งรับประกันได้ว่าจะเริ่ม / ดำเนินการ / เสร็จสิ้นงานระดับเธรดและ / หรือระดับคำสั่งทั้งหมดที่ดำเนินการในรูปแบบคู่ขนานและให้การรับประกันเสร็จสิ้นของเส้นทางรหัสที่ดำเนินการพร้อมกัน


6
ฉันควรใช้กระแสข้อมูลแบบขนานเสมอเมื่อทำได้
ด้วย Java 8 และ lambdas ทำให้ง่ายต่อการวนซ้ำคอลเลกชันเป็นสตรีมและใช้สตรีมแบบขนานได้อย่างง่ายดาย ตัวอย่างสองตัวอย่างจากเอกสารตัวอย่างที่สองใช้ parallelStream: myShapesCollection.stream() .filter(e -> e.getColor() == Color.RED) .forEach(e -> System.out.println(e.getName())); myShapesCollection.parallelStream() // <-- This one uses parallel .filter(e -> e.getColor() == Color.RED) .forEach(e -> System.out.println(e.getName())); ตราบใดที่ฉันไม่สนใจคำสั่งมันจะเป็นประโยชน์กับการใช้ขนานหรือไม่? ใครจะคิดว่ามันเร็วกว่าการแบ่งงานบนแกนเพิ่มเติม มีข้อควรพิจารณาอื่น ๆ อีกไหม? ควรใช้สตรีมแบบขนานเมื่อใดและควรใช้สตรีมแบบไม่ขนานเมื่อใด (คำถามนี้ขอให้กระตุ้นการสนทนาเกี่ยวกับวิธีการและเวลาในการใช้สตรีมแบบขนานไม่ใช่เพราะฉันคิดว่าการใช้พวกเขาเป็นความคิดที่ดีเสมอ)

14
กลุ่มเธรดที่กำหนดเองใน Java 8 กระแสขนาน
เป็นไปได้หรือไม่ที่จะระบุเธรดพูลที่กำหนดเองสำหรับ Java 8 stream แบบขนาน ? ฉันไม่สามารถหาได้ทุกที่ ลองนึกภาพว่าฉันมีเซิร์ฟเวอร์แอปพลิเคชันและฉันต้องการใช้กระแสข้อมูลแบบขนาน แต่แอปพลิเคชั่นนั้นมีขนาดใหญ่และมีหลายเธรดดังนั้นฉันจึงต้องการแบ่งย่อยมัน ฉันไม่ต้องการให้งานที่รันช้าในหนึ่งโมดูลของงาน applicationblock จากโมดูลอื่น ถ้าฉันไม่สามารถใช้เธรดพูลที่แตกต่างกันสำหรับโมดูลที่แตกต่างกันก็หมายความว่าฉันไม่สามารถใช้สตรีมแบบขนานได้อย่างปลอดภัยในสถานการณ์จริงส่วนใหญ่ ลองตัวอย่างต่อไปนี้ มีงานที่ใช้งาน CPU มากในหัวข้อแยกต่างหาก งานยกระดับกระแสขนาน ภารกิจแรกถูกทำลายดังนั้นแต่ละขั้นตอนใช้เวลา 1 วินาที (จำลองโดยการนอนหลับของเธรด) ปัญหาคือเธรดอื่นค้างและรอให้งานที่เสียหายเสร็จสิ้น นี่เป็นตัวอย่างที่วางแผนไว้ แต่ลองนึกภาพแอป servlet และมีคนส่งงานที่ใช้เวลานานไปยังกลุ่มการเข้าร่วมส้อมที่ใช้ร่วมกัน public class ParallelTest { public static void main(String[] args) throws InterruptedException { ExecutorService es = Executors.newCachedThreadPool(); es.execute(() -> runTask(1000)); //incorrect task es.execute(() -> …

25
วิธีการรอให้เธรดทั้งหมดเสร็จสิ้นโดยใช้ ExecutorService
ฉันต้องทำงานบางอย่างทีละ 4 อย่างเช่นนี้: ExecutorService taskExecutor = Executors.newFixedThreadPool(4); while(...) { taskExecutor.execute(new MyTask()); } //...wait for completion somehow ฉันจะได้รับการแจ้งเตือนได้อย่างไรเมื่อทั้งหมดเสร็จสมบูรณ์ สำหรับตอนนี้ฉันไม่สามารถคิดอะไรได้ดีไปกว่าการตั้งตัวนับโกลบอลบางตัวและลดมันลงที่ส่วนท้ายของทุกภารกิจ หรือรับรายการ Futures และใน infinite loop monitor isDone สำหรับพวกเขาทั้งหมด อะไรคือวิธีแก้ปัญหาที่ดีกว่าที่ไม่เกี่ยวข้องกับการวนซ้ำไม่สิ้นสุด? ขอบคุณ

18
ความแตกต่างระหว่างการเขียนโปรแกรมพร้อมกันและการเขียนโปรแกรมแบบขนานคืออะไร?
ความแตกต่างระหว่างการเขียนโปรแกรมพร้อมกันและการวางโปรแกรมแบบขนานคืออะไร? ฉันถาม google แต่ไม่พบสิ่งใดที่ช่วยให้ฉันเข้าใจความแตกต่างนั้น คุณช่วยยกตัวอย่างให้ฉันได้ไหม ตอนนี้ฉันพบคำอธิบายนี้แล้ว: http://www.linux-mag.com/id/7411 - แต่ "ภาวะพร้อมกันเป็นคุณสมบัติของโปรแกรม" vs "การทำงานแบบขนานเป็นคุณสมบัติของเครื่อง" ไม่เพียงพอสำหรับฉัน - ถึงกระนั้นฉันก็พูดอะไรไม่ออกไม่ได้

13
จำนวนเธรดที่เหมาะสมที่สุดต่อหนึ่งคอร์
สมมติว่าฉันมีซีพียู 4 คอร์และฉันต้องการเรียกใช้กระบวนการบางอย่างในเวลาน้อยที่สุด กระบวนการนี้เป็นแบบขนานกันอย่างสมบูรณ์ดังนั้นฉันสามารถเรียกใช้ชิ้นส่วนกับจำนวนเธรดที่ไม่สิ้นสุดและแต่ละเธรดใช้เวลาเท่ากัน เนื่องจากฉันมี 4 คอร์ฉันไม่คาดหวังว่าการเร่งความเร็วใด ๆ โดยการรันเธรดมากกว่าคอร์เนื่องจากคอร์เดียวสามารถรันเธรดเดี่ยวในเวลาที่กำหนดเท่านั้น ฉันไม่รู้เกี่ยวกับฮาร์ดแวร์มากนักนี่เป็นเพียงการคาดเดา มีประโยชน์ในการรันกระบวนการแบบขนานบนเธรดมากกว่าคอร์หรือไม่? กล่าวอีกนัยหนึ่งกระบวนการของฉันจะเสร็จเร็วขึ้นช้าลงหรือประมาณระยะเวลาเท่ากันถ้าฉันรันด้วยเธรด 4000 แทนที่จะเป็น 4 เธรด

13
ฉันจะทำ Python loop แบบขนานได้อย่างไร
นี่อาจเป็นคำถามที่ไม่สำคัญ แต่ฉันจะขนานวงรอบต่อไปนี้ในไพ ธ อนได้อย่างไร # setup output lists output1 = list() output2 = list() output3 = list() for j in range(0, 10): # calc individual parameter value parameter = j * offset # call the calculation out1, out2, out3 = calc_stuff(parameter = parameter) # put results into correct output list …

3
มีเทียบเท่ากับ 'ดำเนินการต่อ' ใน Parallel.ForEach หรือไม่
ฉันกำลังย้ายรหัสไปยังParallel.ForEachและได้รับข้อผิดพลาดเมื่อcontinueฉันมีรหัส มีบางสิ่งที่เทียบเท่าฉันสามารถใช้ในParallel.ForEachฟังก์ชันที่เทียบเท่ากับcontinueในforeachลูปหรือไม่? Parallel.ForEach(items, parallelOptions, item => { if (!isTrue) continue; });

14
คุณรันหลายโปรแกรมพร้อมกันจาก bash script ได้อย่างไร
ฉันพยายามเขียนไฟล์. shที่รันหลายโปรแกรมพร้อมกัน ฉันลองสิ่งนี้ prog1 prog2 แต่นั่นจะทำงาน prog1 จากนั้นรอจนกว่า prog1 จะสิ้นสุดลงและจากนั้นเริ่ม prog2 ... ดังนั้นฉันจะเรียกใช้พวกเขาในแบบคู่ขนานได้อย่างไร

2
ความแตกต่างระหว่างการเขียนโปรแกรมแบบอะซิงโครนัสและมัลติเธรดคืออะไร?
ฉันคิดว่ามันเหมือนกัน - เขียนโปรแกรมที่แบ่งงานระหว่างโปรเซสเซอร์ (บนเครื่องที่มีโปรเซสเซอร์ 2+) จากนั้นฉันก็อ่านสิ่งนี้ซึ่งพูดว่า: วิธีการแบบอะซิงก์มีจุดประสงค์เพื่อให้ไม่มีการบล็อก นิพจน์ที่รออยู่ในเมธอด async จะไม่บล็อกเธรดปัจจุบันในขณะที่งานที่รออยู่กำลังทำงานอยู่ แต่นิพจน์จะลงทะเบียนส่วนที่เหลือของวิธีเป็นการต่อเนื่องและส่งกลับการควบคุมไปยังผู้โทรของวิธีการแบบอะซิงก์ คำหลักแบบ async และ waitit จะไม่ทำให้เกิดการสร้างเธรดเพิ่มเติม เมธอด Async ไม่ต้องการมัลติเธรดเนื่องจากเมธอด async ไม่ทำงานบนเธรดของตัวเอง วิธีการทำงานกับบริบทการซิงโครไนซ์ปัจจุบันและใช้เวลาในเธรดเฉพาะเมื่อวิธีการใช้งานอยู่ คุณสามารถใช้ Task.Run เพื่อย้ายงานที่เชื่อมโยงกับ CPU ไปยังเธรดพื้นหลังได้ แต่เธรดพื้นหลังไม่ได้ช่วยกระบวนการที่รอให้ผลลัพธ์พร้อมใช้งาน และฉันสงสัยว่ามีคนสามารถแปลเป็นภาษาอังกฤษให้ฉันได้หรือไม่ ดูเหมือนว่าจะแยกความแตกต่างระหว่าง asyncronicity (นั่นคือคำ?) และการทำเกลียวและบอกเป็นนัยว่าคุณสามารถมีโปรแกรมที่มีงานแบบอะซิงโครนัส แต่ไม่มีมัลติเธรด ตอนนี้ฉันเข้าใจความคิดของงานอะซิงโครนัสเช่นตัวอย่างใน pg 467 ของC #ของ Jon Skeet ในความลึก, รุ่นที่สาม async void DisplayWebsiteLength ( object sender, EventArgs …

11
ไม่มี ConcurrentList <T> ใน. Net 4.0?
ฉันตื่นเต้นที่ได้เห็นSystem.Collections.Concurrentnamespace ใหม่ใน. Net 4.0 ค่อนข้างดี! ผมเคยเห็นConcurrentDictionary, ConcurrentQueue, ConcurrentStack, และConcurrentBagBlockingCollection ConcurrentList&lt;T&gt;สิ่งหนึ่งที่น่าจะเป็นไปอย่างลึกลับหายไปเป็น ฉันต้องเขียนเอง (หรือเอามันออกจากเว็บ :))? ฉันขาดอะไรบางอย่างชัดเจนที่นี่?

1
สถานะของการเขียนโปรแกรมแบบมัลติคอร์ใน Haskell คืออะไร?
สถานะของการเขียนโปรแกรมแบบมัลติคอร์ใน Haskell คืออะไร? โครงการเครื่องมือและห้องสมุดใดบ้างที่มีให้ในตอนนี้ มีรายงานประสบการณ์อะไรบ้าง?

6
อะไรคือความแตกต่างระหว่างโมดูลเธรดและโมดูลหลายกระบวนการ?
ฉันกำลังเรียนรู้วิธีใช้threadingและmultiprocessingโมดูลใน Python เพื่อรันการดำเนินการบางอย่างพร้อมกันและเร่งความเร็วโค้ด ฉันพบว่าสิ่งนี้ยาก (อาจเป็นเพราะฉันไม่มีพื้นฐานทางทฤษฎีเกี่ยวกับเรื่องนี้) ที่จะเข้าใจว่าความแตกต่างระหว่างthreading.Thread()วัตถุกับวัตถุนั้นคือmultiprocessing.Process()อะไร นอกจากนี้ฉันยังไม่ชัดเจนว่าจะสร้างอินสแตนซ์คิวงานได้อย่างไรและมีเพียง 4 (เช่น) ที่ทำงานแบบขนานในขณะที่อีกคนรอให้ทรัพยากรว่างก่อนที่จะดำเนินการ ฉันพบว่าตัวอย่างในเอกสารประกอบชัดเจน แต่ไม่ละเอียดถี่ถ้วนมากนัก ทันทีที่ฉันพยายามทำให้ซับซ้อนขึ้นเล็กน้อยฉันก็ได้รับข้อผิดพลาดแปลก ๆ มากมาย (เช่นวิธีการที่ไม่สามารถดองได้เป็นต้น) ดังนั้นฉันควรใช้โมดูลthreadingและเมื่อmultiprocessingใด คุณสามารถเชื่อมโยงฉันกับแหล่งข้อมูลบางส่วนที่อธิบายแนวคิดเบื้องหลังโมดูลทั้งสองนี้และวิธีใช้อย่างเหมาะสมสำหรับงานที่ซับซ้อนได้หรือไม่

3
Parallel.ForEach () vs. foreach (IEnumerable <T> .AsParallel ())
เอ๋อฉันพยายามค้นหาสองวิธีนี้ใน BCL โดยใช้ Reflector แต่หาไม่พบ ข้อแตกต่างระหว่างสองตัวอย่างนี้คืออะไร A: IEnumerable&lt;string&gt; items = ... Parallel.ForEach(items, item =&gt; { ... }); B: IEnumerable&lt;string&gt; items = ... foreach (var item in items.AsParallel()) { ... } มีผลที่แตกต่างจากการใช้อย่างใดอย่างหนึ่งมากกว่าอื่น ๆ ? (สมมติว่าสิ่งที่ฉันทำในเนื้อหาที่มีวงเล็บของทั้งสองตัวอย่างนั้นปลอดภัยสำหรับเธรด)

6
จะเขียนโปรแกรมแบบขนานใน Python ได้อย่างไร
สำหรับ C ++ เราสามารถใช้ OpenMP เพื่อทำการเขียนโปรแกรมแบบขนาน อย่างไรก็ตาม OpenMP จะไม่ทำงานสำหรับ Python ฉันควรทำอย่างไรถ้าฉันต้องการขนานบางส่วนของโปรแกรมไพ ธ อนของฉัน โครงสร้างของรหัสอาจพิจารณาเป็น: solve1(A) solve2(B) ที่ไหนsolve1และsolve2มีสองฟังก์ชั่นอิสระ วิธีการเรียกใช้รหัสนี้ในแบบคู่ขนานแทนในลำดับเพื่อลดเวลาทำงาน? หวังว่าใครบางคนสามารถช่วยฉันได้ ขอบคุณมากล่วงหน้า รหัสคือ: def solve(Q, G, n): i = 0 tol = 10 ** -4 while i &lt; 1000: inneropt, partition, x = setinner(Q, G, n) outeropt = setouter(Q, G, n) if …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.