คำถามติดแท็ก parallelism

8
ความแตกต่างระหว่างการดำเนินการ "พร้อมกัน" และ "ขนาน"?
อะไรคือข้อแตกต่างระหว่างคำที่เกิดขึ้นพร้อมกันและการดำเนินการแบบขนาน ? ฉันไม่เคยเข้าใจความแตกต่างเลยทีเดียว แท็กกำหนดภาวะพร้อมกันเป็นวิธีการรันสองกระบวนการพร้อมกัน แต่ฉันคิดว่าการขนานกันนั้นเป็นสิ่งเดียวกันนั่นคือ: เธรดที่แยกจากกันหรือกระบวนการที่อาจทำงานบนโปรเซสเซอร์ที่แยกต่างหาก นอกจากนี้หากเราพิจารณาอะไรบางอย่างเช่น I / O แบบอะซิงโครนัสเราจะจัดการกับการเกิดพร้อมกันหรือการขนานกันไหม

10
จะอธิบายได้อย่างไรว่าทำไมมัลติเธรดจึงยาก
ฉันเป็นโปรแกรมเมอร์ที่ค่อนข้างดีเจ้านายของฉันก็เป็นโปรแกรมเมอร์ที่ดีพอสมควร แม้ว่าเขาจะดูถูกดูแคลนงานบางอย่างเช่นมัลติเธรดและยากเพียงใด (ฉันคิดว่ามันยากมากสำหรับทุกอย่างที่ใช้เธรดเพียงไม่กี่เธรดรอให้ทุกคนเสร็จสิ้นจากนั้นส่งคืนผลลัพธ์) เมื่อคุณเริ่มกังวลเกี่ยวกับการหยุดชะงักและสภาพการแข่งขันฉันพบว่ามันยากมาก แต่เจ้านายดูเหมือนจะไม่เห็นคุณค่าในเรื่องนี้ - ฉันไม่คิดว่าเขาจะเคยเจอสิ่งนี้มาก่อน เพียงตบล็อคมันเป็นทัศนคติที่สวยมาก ดังนั้นฉันจะแนะนำเขาอย่างไรหรืออธิบายว่าทำไมเขาถึงประเมินความซับซ้อนของการเกิดพร้อมกันการขนานและมัลติเธรด หรือบางทีฉันผิด แก้ไข: เพียงเล็กน้อยกับสิ่งที่เขาทำ - วนรอบรายการสำหรับแต่ละรายการในรายการนั้นให้สร้างเธรดที่ดำเนินการคำสั่งการอัพเดตฐานข้อมูลตามข้อมูลในรายการนั้น ฉันไม่แน่ใจว่าเขาควบคุมจำนวนเธรดที่ดำเนินการพร้อมกันได้อย่างไรฉันคิดว่าเขาต้องเพิ่มพวกเขาในคิวหากมีการทำงานมากเกินไป (เขาจะไม่ใช้เซมาฟอร์)

11
การทำงานพร้อมกัน: คุณเข้าใกล้การออกแบบและดีบักการใช้งานได้อย่างไร
ฉันได้พัฒนาระบบที่เกิดขึ้นพร้อมกันมาหลายปีแล้วและฉันก็เข้าใจดีในเรื่องนี้แม้จะขาดการฝึกอบรมอย่างเป็นทางการ (เช่นไม่มีระดับ) มีภาษาใหม่ไม่กี่ภาษาที่ได้รับความนิยมอย่างน้อยพูดถึงเมื่อเร็ว ๆ นี้ซึ่งได้รับการออกแบบมาเพื่อทำให้การทำงานพร้อมกันง่ายขึ้นเช่น Erlang และ Go ดูเหมือนว่าวิธีการของพวกเขาในการทำงานพร้อมกันนั้นสะท้อนถึงประสบการณ์ของฉันเองว่าจะทำให้ระบบปรับขนาดได้และใช้ประโยชน์จากหลายคอร์ / โปรเซสเซอร์ / เครื่อง อย่างไรก็ตามฉันพบว่ามีเครื่องมือน้อยมากที่จะช่วยให้เห็นภาพสิ่งที่คุณตั้งใจจะทำและยืนยันว่าอย่างน้อยคุณก็ใกล้เคียงกับวิสัยทัศน์ดั้งเดิมของคุณ การดีบักโค้ดที่เกิดขึ้นพร้อมกันอาจเป็นฝันร้ายที่มีภาษาที่ไม่ได้ออกแบบมาสำหรับการทำงานพร้อมกัน (เช่น C / C ++, C #, Java, ฯลฯ ) โดยเฉพาะอย่างยิ่งมันเป็นไปไม่ได้ที่จะสร้างเงื่อนไขที่เกิดขึ้นใหม่ในระบบเดียวในสภาพแวดล้อมการพัฒนาของคุณ ดังนั้นอะไรคือแนวทางของคุณในการออกแบบระบบเพื่อจัดการกับการทำงานพร้อมกันและการประมวลผลแบบขนาน? ตัวอย่าง: คุณคิดได้อย่างไรว่าอะไรจะเกิดขึ้นพร้อมกันกับสิ่งที่ต้องเรียงตามลำดับ? คุณจะสร้างเงื่อนไขข้อผิดพลาดและดูว่าเกิดอะไรขึ้นเมื่อแอปพลิเคชันดำเนินการอย่างไร คุณเห็นภาพปฏิสัมพันธ์ระหว่างส่วนต่าง ๆ ที่เกิดขึ้นพร้อมกันของแอปพลิเคชันอย่างไร ฉันมีคำตอบของตัวเองสำหรับสิ่งเหล่านี้ แต่ฉันก็ต้องการที่จะเรียนรู้เพิ่มเติมอีกเล็กน้อย แก้ไข จนถึงตอนนี้เรามีข้อมูลที่ดีมากมาย บทความหลายบทความที่เชื่อมโยงนั้นดีมากและฉันได้อ่านมาแล้วบางส่วน ประสบการณ์ส่วนตัวของฉันกับการเขียนโปรแกรมพร้อมกันทำให้ฉันเชื่อว่าคุณต้องการความคิดที่แตกต่างจากการเขียนโปรแกรมตามลำดับ ความแตกแยกทางจิตใจนั้นกว้างพอ ๆ กับความแตกต่างระหว่างการเขียนโปรแกรมเชิงวัตถุและการโปรแกรมเชิงกระบวนวิธี ฉันต้องการชุดคำถามนี้เพื่อมุ่งเน้นที่กระบวนการคิดที่จำเป็น (เช่นทฤษฎี) เพื่อเข้าหาคำตอบอย่างเป็นระบบ เมื่อให้คำตอบที่เป็นรูปธรรมมากขึ้นมันจะช่วยยกตัวอย่าง - สิ่งที่คุณต้องผ่านเป็นการส่วนตัว เป้าหมายสำหรับค่าหัว อย่าบอกฉันว่าฉันควรทำอย่างไร …

5
กระบวนทัศน์การเขียนโปรแกรมเชิงวัตถุนั้นล้าสมัยเนื่องจากต่อต้านแบบแยกส่วนและแบบขนานหรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันได้อ่านบทความโต้เถียงการสอน FP ให้กับนักศึกษาที่โพสต์โดย Robert Harper ผู้เป็นศาสตราจารย์ในมหาวิทยาลัยเชียงใหม่ เขาอ้างว่า CMU จะไม่สอนการเขียนโปรแกรมเชิงวัตถุอีกต่อไปในหลักสูตรเบื้องต้นเพราะมันไม่เหมาะสมสำหรับหลักสูตร CS สมัยใหม่ และเขาอ้างว่า: การเขียนโปรแกรมเชิงวัตถุจะถูกลบออกจากหลักสูตรการแนะนำเพราะมันเป็นทั้งแบบแยกส่วนและต่อต้านแบบขนานโดยธรรมชาติ เหตุใดจึงต้องพิจารณาว่า OOP เป็นแบบแยกส่วนและป้องกันแบบขนาน?

1
การใช้ชนิดที่เป็นเอกลักษณ์เพื่อสร้างความเท่าเทียมที่ปลอดภัย
ฉันสนใจประเภทที่เป็นเอกลักษณ์ซึ่งเป็นทางเลือกแทนพระในภาษาที่ใช้งานได้จริงในบางครั้ง โชคไม่ดีที่นี่เป็นพื้นที่ลึกลับของการวิจัย CS และแหล่งข้อมูลออนไลน์เกี่ยวกับการเขียนโปรแกรมที่มีประเภทที่ไม่ซ้ำใคร เห็นได้ชัดว่าประเภทที่ไม่ซ้ำกันอาจถูกนำมาใช้ในการใช้โครงสร้างข้อมูลแบบรัฐเช่นการอ้างอิง ("กล่อง") และอาร์เรย์ได้อย่างไรแม้ว่ามันจะช่วยฉันได้อย่างไรว่าคุณจะใช้โครงสร้างข้อมูลแบบรัฐอื่น ๆ ร่วมกันอย่างไร มันเป็นไปได้ที่จะใช้เช่นล็อคด้วยประเภทที่ไม่ซ้ำกัน? สามารถใช้ประเภทที่ไม่ซ้ำกันเพื่อแชร์ข้อมูลที่ไม่แน่นอนในเธรดได้หรือไม่? เป็นไปได้หรือไม่ที่จะใช้ชนิดที่ไม่ซ้ำกันเพื่อสร้างการซิงโครไนซ์ดั้งเดิม (เช่น mutexes) หรือจำเป็นต้องส่งข้อความ

3
Parallelism หมายถึงภาวะพร้อมกัน แต่ไม่ใช่วิธีอื่น ๆ ใช่ไหม?
ฉันมักจะอ่านว่าการขนานและการเกิดพร้อมกันเป็นสิ่งที่แตกต่างกัน บ่อยครั้งที่ผู้ตอบ / ผู้แสดงความคิดเห็นไปถึงเท่าที่เขียนว่าพวกเขาทั้งสองแตกต่างกันอย่างสิ้นเชิง แต่ในมุมมองของฉันพวกเขาเกี่ยวข้องกัน แต่ฉันต้องการความกระจ่างเกี่ยวกับเรื่องนี้ ตัวอย่างเช่นถ้าผมอยู่บนซีพียูแบบมัลติคอร์และการบริหารจัดการที่จะแบ่งการคำนวณลงในxคำนวณขนาดเล็ก (พูดโดยใช้ส้อม / เข้าร่วม) แต่ละทำงานในหัวข้อของตัวเองฉันจะมีโปรแกรมที่มีทั้งการทำเช่นการคำนวณแบบขนาน (เพราะ ในเวลาใดก็ตามหลายเธรดจะทำงานในหลายคอร์) และพร้อมกันใช่ไหม? ในขณะที่ถ้าฉันเพียงแค่ใช้พูด Java และจัดการกับเหตุการณ์ UI และ repaints บน Event Dispatch Thread บวกกับการรันเธรดเดียวที่ฉันสร้างขึ้นเองฉันจะมีโปรแกรมที่ทำงานพร้อมกัน (EDT + GC เธรด + เธรดหลักของฉัน ฯลฯ ) แต่ไม่ขนาน ฉันต้องการที่จะรู้ว่าฉันได้รับสิทธินี้และหากการขนาน (ในระบบ "เดี่ยว แต่หลายแกน") หมายถึงการทำงานพร้อมกันหรือไม่? นอกจากนี้ยังมีโปรแกรมแบบมัลติเธรดที่ทำงานบนซีพียูหลายคอร์ แต่ที่ที่เธรดต่างกันกำลังทำการคำนวณที่แตกต่างกันโดยสิ้นเชิงซึ่งถือว่าเป็นการใช้ "การขนาน"?

1
วิธีปฏิบัติที่ดีที่สุดคือไม่ต้องสำรวจความคิดเห็น ... แต่จะไม่ทำการสำรวจความคิดเห็นภายในเมื่อมีการเรียกเธรดรอ ()
สมมติว่าเรามีเธรดบางตัวที่ต้องการตรวจสอบเมื่อเธรดอื่นเสร็จสิ้นภารกิจ ฉันได้อ่านแล้วว่าเราควรเรียกใช้ฟังก์ชันการรอ () ประเภทที่จะทำให้เธรดนี้รอจนกว่าจะได้รับการแจ้งเตือนว่าเธรดอื่นเสร็จสิ้นแล้ว และนี่เป็นสิ่งที่ดีเพราะมันหมายความว่าเราไม่ได้ทำการสำรวจที่มีราคาแพง แต่การเลือกตั้งไม่เกิดขึ้นภายในระดับล่าง คือถ้าเราให้เธรดรอ () ไม่ใช่โพลที่ทำการสำรวจเพื่อตรวจสอบว่าเธรดอื่นเสร็จสิ้นแล้วหรือไม่เพื่อให้สามารถแจ้งเธรดแรกได้ ฉันคิดว่าฉันพลาดอะไรบางอย่างที่นี่ใครบางคนสามารถสอนฉันได้ไหม

5
ทำไมการขนานและการเกิดพร้อมกันโดยนัยไม่แพร่หลายมากขึ้น? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ความเท่าเทียมโดยนัยโดยนัย ^สามารถนำภาระใหญ่ออกไปจากโปรแกรมเมอร์จำนวนมากวางไว้บนคอมพิวเตอร์ ดังนั้น ... ทำไมมันถึงไม่แพร่หลายในปัจจุบัน? ^ ขนานโดยปริยายคือการทำให้คอมพิวเตอร์สามารถคิดออกเองว่าจะทำอะไรมากกว่าหนึ่งอย่างในเวลาแทนที่จะเป็นโปรแกรมเมอร์ที่ต้องการทำงานนี้โดยใช้กระทู้และชอบ

2
อะไรจะเป็นวิธีที่ดีที่สุดในการจัดการข้อผิดพลาดในโปรแกรมแบบขนาน?
ด้วยอัลกอริทึมแบบขนานที่เคาะประตูมันอาจเป็นเวลาที่ดีที่จะคิดเกี่ยวกับการจัดการข้อผิดพลาด ดังนั้นในตอนแรกจึงมีรหัสข้อผิดพลาด เหล่านั้นดูด มีอิสระที่จะเพิกเฉยต่อพวกเขาดังนั้นคุณอาจล้มเหลวช้าและสร้างรหัสที่ยากต่อการดีบัก จากนั้นก็มีข้อยกเว้น สิ่งเหล่านี้ทำให้ไม่สามารถเพิกเฉยได้เมื่อเกิดขึ้นและคนส่วนใหญ่ (ยกเว้น Joel) ชอบพวกเขาดีกว่า และตอนนี้เรามีห้องสมุดที่ช่วยให้โค้ดคู่ขนาน ปัญหาคือคุณไม่สามารถจัดการกับข้อยกเว้นในรหัสขนานได้อย่างง่ายดายเท่าที่จะทำได้กับรหัสที่ไม่ขนานกัน หากคุณเริ่มงานแบบอะซิงโครนัสและส่งข้อยกเว้นจะไม่มีการติดตามสแต็กที่ผ่านมาเพื่อคลายออก ดีที่สุดที่คุณสามารถทำได้คือจับมันและลงทะเบียนบนวัตถุงานหากมีวัตถุดังกล่าว อย่างไรก็ตามมันจะเอาชนะจุดแข็งหลักของข้อยกเว้น: คุณต้องตรวจสอบพวกมันและคุณสามารถเพิกเฉยได้โดยไม่ต้องใช้ความพยายามเพิ่มเติมในขณะที่โค้ดแบบเธรดเดียวข้อยกเว้นจะทำให้เกิดการกระทำที่เหมาะสม การใช้ภาษาหรือไลบรารีควรสนับสนุนข้อผิดพลาดในรหัสคู่ขนานอย่างไร

4
โฟกัสหลักของ Java คืออะไร? เหตุใดจึงใช้เวลานานในการรับคุณลักษณะใหม่
ฉันได้รับการสำรวจคุณสมบัติใหม่ใน JDK8 เช่นการแสดงออกแลมบ์ดาวิธีการขยายและสตรีม API ใหม่ เห็นได้ชัดว่าไม่มีคุณสมบัติเหล่านี้ใหม่ในโลกการเขียนโปรแกรมและทำให้สงสัยว่าทำไมสิ่งเหล่านี้ได้รับใน Java จนถึงปัจจุบัน เรามีการแสดงออกแลมบ์ดาใน Lisp (1958), SML (1973), Haskell (1990), Python (1991), JavaScript (1994), Ruby (1995), Ruby (1995), Scala (2003), C # (2007) และ 55 ปีหลังจาก Lisp และ แทบทุกคนใน Java (2013) และฉันได้อ่านเกี่ยวกับสตรีมในSIC (1996) ฉันสงสัยว่าทำไมตอนนี้ หลักฐานแสดงให้เห็นว่าการแข่งขันกับภาษาอื่นไม่ใช่แรงจูงใจ ดูเหมือนว่าคุณสมบัติใหม่ ๆ ที่ยอดเยี่ยมใน Java รุ่นนี้เป็นเพียงผลพลอยได้จากการใช้งานแบบคู่ขนาน เรามี lambdas เพราะทำให้การเขียนอัลกอริทึมแบบขนานง่ายขึ้นและเรามีวิธีการขยายเนื่องจากเราต้องการให้พวกเขาให้การสนับสนุนการเปลี่ยนแปลงที่แสดงออกแลมบ์ดาที่ต้องการ ฯลฯ ฯลฯ …

2
เหตุใดโปรแกรมเมอร์กำหนดรูปแบบการเขียนโปรแกรมเพื่อแทนที่ C / POSIX สำหรับการขนาน
ผู้ให้บริการสถาปัตยกรรมคอมพิวเตอร์ใหม่พยายามแนะนำรูปแบบการเขียนโปรแกรมใหม่อย่างสม่ำเสมอเช่นเมื่อเร็ว ๆ นี้ CUDA / OpenCL สำหรับ GPGPU และแทนที่ C / POSIX เป็นอินเทอร์เฟซการควบคุมไปยังแพลตฟอร์มแบบคู่ขนาน (Poss & Koening, AM3: สู่ตัวเร่งความเร็ว Unix สำหรับหลายคอร์, 2015) ทำไมนักออกแบบสถาปัตยกรรมจึงพยายามออกแบบโมเดลการเขียนโปรแกรมใหม่เพื่อแทนที่ C / POSIX สำหรับการคำนวณแบบขนาน C / POSIX ไม่เหมาะกับมัลติโปรเซสเซอร์หรือผู้เขียนต้นฉบับของ C / POSIX ไม่จำเป็นต้องใช้การคำนวณแบบขนานในการออกแบบ C / POSIX หรือไม่? หรือเป็นกรณีที่โปรแกรมเมอร์ต้องการความสามารถมากกว่า C / POSIX ที่สามารถส่งมอบได้ดังนั้นจึงหันไปใช้การออกแบบใหม่เช่น CUDA / OpenCL เป็นต้น

1
อารัมภบทขนาน
มีล่ามอารัมภบทที่สามารถย่อยสลาย 'โปรแกรม' ของคุณเพื่อปรับปรุงประสิทธิภาพได้หรือไม่? ฉันรู้ว่ามีงานวิจัยเกี่ยวกับล่ามอารัมภบทที่มีความเร็วใกล้เคียง C ผ่านการขนาน (ชนิดที่โปรแกรมเมอร์ C ทั่วไปไม่สามารถ "เห็น") ไม่มีใครรู้เพิ่มเติมเกี่ยวกับหัวข้อนี้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.