ความแตกต่างระหว่างการเกิดพร้อมกันและการขนานคืออะไร?


1075

ความแตกต่างระหว่างการเกิดพร้อมกันและการขนานคืออะไร?

ตัวอย่างชื่นชม


41
คำตอบสั้น ๆ : การเห็นพ้องด้วยกันคือสองบรรทัดของลูกค้าที่สั่งซื้อจากแคชเชียร์สายเดียว Parallelism คือลูกค้าสองบรรทัดที่สั่งซื้อจากพนักงานเก็บเงินสองคน (แต่ละบรรทัดจะได้รับแคชเชียร์ของตัวเอง)
chharvey

@ แผนภูมิ: ฉันคิดว่านี่ควรจะเป็นคำตอบ สั้น (สองบรรทัดของข้อความหากคุณไม่ใช้ "คำตอบสั้น ๆ ") จนถึงจุดที่เข้าใจได้ทันที ทำได้ดีมาก!
Mike Maxwell

คำตอบ:


1269

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

Parallelismคือเมื่องานรันอย่างแท้จริงในเวลาเดียวกันเช่นบนตัวประมวลผลแบบมัลติคอร์


คู่มือการเขียนโปรแกรมแบบมัลติเธรดของ Quoting Sun :

  • การเกิดขึ้นพร้อมกัน: เงื่อนไขที่มีอยู่เมื่อเธรดอย่างน้อยสองเธรดกำลังดำเนินการอยู่ รูปแบบการขนานทั่วไปที่มากขึ้นซึ่งสามารถรวมการแบ่งเวลาเป็นรูปแบบของการขนานเสมือนจริง

  • Parallelism: เงื่อนไขที่เกิดขึ้นเมื่อเธรดอย่างน้อยสองเธรดกำลังดำเนินการพร้อมกัน


169
ฉันชอบคำตอบนี้ แต่ฉันอาจจะไปไกลกว่านั้นและอธิบายลักษณะการทำงานพร้อมกันเป็นคุณสมบัติของโปรแกรมหรือระบบ (และความขนานเป็นพฤติกรรมการใช้เวลาทำงานของการทำงานหลายอย่างในเวลาเดียวกัน)
Adrian Mouat

24
ฉันชอบความคิดเห็นของ Adrian Mouat มาก ๆ ดูคำอธิบายที่ยอดเยี่ยมเช่นนี้: haskell.org/haskellwiki/Parallelism_vs._Concurrency
jberryman

9
@Raj: ถูกต้อง, ขนานกัน (ในแง่ของการทำมัลติเธรด) เป็นไปไม่ได้กับโปรเซสเซอร์แกนเดียว
RichieHindle

5
ถ้า Sequential และ Parallel เป็นทั้งค่าในการแจงนับชื่อของการแจงนั้นคืออะไร?
toddmo

11
ในตอนท้ายใบเสนอราคาของ Sun สามารถ reworded เป็น: - การเกิดขึ้นพร้อมกัน: เงื่อนไขที่มีอยู่เมื่อในช่วงระยะเวลาที่กำหนดสองกระทู้ที่มีความคืบหน้า - Parallelism: เงื่อนไขที่เกิดขึ้นเมื่อได้รับจุดโดยเฉพาะในเวลาสองกระทู้ กำลังดำเนินการพร้อมกัน
Phillip

494

ทำไมความสับสนจึงมีอยู่

มีความสับสนเกิดขึ้นเนื่องจากความหมายในพจนานุกรมของคำทั้งสองนี้ใกล้เคียงกัน:

  • พร้อมกัน : ที่มีอยู่เกิดขึ้นหรือทำในเวลาเดียวกัน (dictionary.com)
  • Parallel : คล้ายกันมากและมักจะเกิดขึ้นในเวลาเดียวกัน (Merriam webster)

แต่วิธีที่ใช้ในวิทยาการคอมพิวเตอร์และการเขียนโปรแกรมนั้นแตกต่างกันมาก นี่คือการตีความของฉัน:

  • ภาวะพร้อมกัน : การขัดจังหวะ
  • ความเท่าเทียม : ความเป็นอิสระ

ดังนั้นฉันหมายถึงอะไรโดยนิยามข้างต้น?

ฉันจะชี้แจงด้วยการเปรียบเทียบโลกแห่งความจริง สมมติว่าคุณต้องทำภารกิจสำคัญ 2 อย่างในหนึ่งวัน:

  1. รับหนังสือเดินทาง
  2. รับการนำเสนอเสร็จสิ้น

ตอนนี้ปัญหาคือภารกิจที่ 1 ต้องการให้คุณไปที่ที่ทำการราชการที่ทำให้คุณต้องรอ 4 ชั่วโมงติดต่อกันเพื่อรับหนังสือเดินทาง ในขณะเดียวกันที่สำนักงานของคุณต้องการ task-2 และเป็นงานที่สำคัญ ทั้งสองจะต้องเสร็จในวันที่กำหนด

กรณีที่ 1: การดำเนินการตามลำดับ

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

กรณีที่ 2: การดำเนินการที่เกิดขึ้นพร้อมกัน

แต่คุณฉลาด คุณวางแผนล่วงหน้า คุณพกแล็ปท็อปติดตัวไปด้วยและในระหว่างที่รอสายคุณจะเริ่มทำงานนำเสนอ วิธีนี้เมื่อคุณกลับถึงบ้านคุณต้องทำงานเพิ่ม 1 ชั่วโมงแทนที่จะเป็น 5

ในกรณีนี้คุณทำงานทั้งสองอย่างเป็นชิ้น ๆ คุณขัดจังหวะภารกิจหนังสือเดินทางขณะรอสายและทำงานนำเสนอ เมื่อหมายเลขของคุณถูกเรียกคุณขัดจังหวะงานนำเสนอและเปลี่ยนเป็นงานหนังสือเดินทาง การประหยัดเวลานั้นเป็นไปได้เนื่องจากการขัดจังหวะของทั้งสองงาน

พร้อมกัน IMO, สามารถเข้าใจได้เป็นคุณสมบัติ "แยก" ในกรด ธุรกรรมฐานข้อมูลสองรายการจะถูกแยกออกหากการทำธุรกรรมย่อยสามารถทำได้ในแต่ละวิธีและ interleaved ใด ๆ และผลลัพธ์สุดท้ายจะเหมือนกับว่างานสองงานได้ทำตามลำดับ โปรดจำไว้ว่าทั้งหนังสือเดินทางและนำเสนองานคุณเป็นเพชฌฆาต แต่เพียงผู้เดียว

กรณีที่ 3: การดำเนินการแบบขนาน

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

ตั้งแต่นี้ผู้ช่วยของคุณก็ฉลาดเหมือนคุณเขาสามารถทำงานได้อย่างอิสระโดยไม่จำเป็นต้องขอคำชี้แจงจากคุณตลอดเวลา ดังนั้นเนื่องจาก independentability ของงานที่พวกเขาได้ดำเนินการในเวลาเดียวกันโดยทั้งสองเพชฌฆาตที่แตกต่างกัน

ยังอยู่กับฉัน เอาล่ะ ...

กรณีที่ 4: เกิดขึ้นพร้อมกัน แต่ไม่ขนาน

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

กรณีที่ 5: ขนาน แต่ไม่พร้อมกัน

สมมติว่าหน่วยงานของรัฐมีการตรวจสอบความปลอดภัยเพื่อเข้าสู่สถานที่ ที่นี่คุณต้องลบอุปกรณ์อิเล็กทรอนิกส์ทั้งหมดและส่งไปยังเจ้าหน้าที่และพวกเขาจะส่งคืนอุปกรณ์ของคุณหลังจากที่คุณทำงานเสร็จแล้วเท่านั้น

ในการนี้กรณีงานหนังสือเดินทางจะไม่independentableมิได้Interruptible แม้ว่าคุณจะรอสายคุณไม่สามารถทำงานอย่างอื่นเพราะคุณไม่มีอุปกรณ์ที่จำเป็น

ในทำนองเดียวกันการพูดการนำเสนอนั้นเป็นคณิตศาสตร์อย่างสูงในธรรมชาติที่คุณต้องการสมาธิ 100% เป็นเวลาอย่างน้อย 5 ชั่วโมง คุณไม่สามารถทำได้ในขณะที่รองานพาสปอร์ตแม้ว่าคุณจะมีแล็ปท็อปของคุณ

ในกรณีนี้งานนำเสนอเป็นindependentable (คุณหรือผู้ช่วยของคุณสามารถวางไว้ใน 5 ชั่วโมงของความพยายามที่มุ่งเน้น) แต่ไม่Interruptible

กรณีที่ 6: การเรียกใช้งานพร้อมกันและขนาน

ตอนนี้บอกว่านอกเหนือจากการมอบหมายผู้ช่วยของคุณให้กับงานนำเสนอแล้วคุณยังพกแล็ปท็อปติดตัวไปด้วยเพื่อทำหนังสือเดินทาง ในขณะที่รอแถวคุณจะเห็นว่าผู้ช่วยของคุณสร้างสไลด์ 10 แผ่นแรกในเด็คที่แชร์ คุณส่งความคิดเห็นเกี่ยวกับงานของเขาด้วยการแก้ไขบางอย่าง ต่อมาเมื่อคุณกลับถึงบ้านแทนที่จะใช้เวลา 2 ชั่วโมงในการสรุปร่างคุณต้องใช้เวลา 15 นาที

สิ่งนี้เป็นไปได้เพราะงานนำเสนอมีความเป็นอิสระ (คุณสามารถทำอย่างใดอย่างหนึ่ง) และการขัดจังหวะ (คุณสามารถหยุดมันและกลับมาทำงานต่อได้ในภายหลัง) ดังนั้นคุณจึงทำงานทั้งสองอย่างพร้อมกันและดำเนินงานการนำเสนอแบบขนาน

สมมติว่านอกเหนือไปจากระบบราชการมากเกินไปหน่วยงานของรัฐก็เสียหาย ดังนั้นคุณสามารถแสดงบัตรประจำตัวของคุณใส่มันเริ่มรอสายเพื่อให้หมายเลขของคุณถูกเรียกสินบนผู้พิทักษ์และคนอื่นที่จะดำรงตำแหน่งของคุณในบรรทัดแอบออกมาก่อนที่จะเรียกหมายเลขของคุณและรอต่อไป ด้วยตัวคุณเอง

ในกรณีนี้คุณสามารถดำเนินการทั้งหนังสือเดินทางและงานนำเสนอพร้อมกันและขนาน คุณสามารถย่องออกมาและตำแหน่งของคุณจะถูกควบคุมโดยผู้ช่วยของคุณ คุณทั้งคู่สามารถทำงานนำเสนอ ฯลฯ


กลับไปที่วิทยาศาสตร์คอมพิวเตอร์

ในโลกแห่งการคำนวณนี่คือตัวอย่างสถานการณ์โดยทั่วไปของแต่ละกรณี:

  • กรณีที่ 1:การประมวลผลขัดจังหวะ
  • กรณีที่ 2:เมื่อมีโปรเซสเซอร์เพียงตัวเดียว แต่งานที่ดำเนินการทั้งหมดมีเวลารอเนื่องจาก I / O
  • กรณีที่ 3:เห็นบ่อยครั้งเมื่อเรากำลังพูดถึงกลุ่มลดแผนที่หรือฮาดรอป
  • กรณีที่ 4:ฉันคิดว่ากรณีที่ 4 หายาก มันเป็นเรื่องแปลกสำหรับงานที่จะเกิดขึ้นพร้อมกัน แต่ไม่ขนานกัน แต่มันอาจเกิดขึ้น ตัวอย่างเช่นสมมติว่างานของคุณต้องการการเข้าถึงชิปคอมพิวเตอร์พิเศษซึ่งสามารถเข้าถึงได้ผ่านโปรเซสเซอร์ -1 เท่านั้น ดังนั้นแม้ว่าตัวประมวลผล -2 จะว่างและตัวประมวลผล -1 กำลังทำงานบางอย่างงานการคำนวณพิเศษไม่สามารถดำเนินการกับตัวประมวลผล -2 ได้
  • กรณีที่ 5:หายาก แต่ไม่ค่อยหายากเหมือนกรณีที่ 4 รหัสไม่พร้อมกันสามารถเป็นพื้นที่สำคัญที่ได้รับการปกป้องโดย mutexes เมื่อเริ่มต้นแล้วจะต้องดำเนินการให้เสร็จสมบูรณ์ อย่างไรก็ตามสองภูมิภาคที่สำคัญต่างกันสามารถดำเนินการพร้อมกันในโปรเซสเซอร์ที่แตกต่างกันสองแห่ง
  • กรณีที่ 6: IMO การสนทนาส่วนใหญ่เกี่ยวกับการเขียนโปรแกรมแบบขนานหรือแบบพร้อมกันโดยทั่วไปกำลังพูดถึงกรณีที่ 6 นี่เป็นการผสมผสานและการจับคู่ของการประมวลผลแบบขนานและแบบพร้อมกัน

เห็นพ้องด้วยและไป

หากคุณเห็นว่าทำไม Rob Pike ถึงพูดพร้อมกันดีกว่าคุณต้องเข้าใจว่าเหตุผลนั้นคือ คุณมีงานที่ยาวมากซึ่งมีช่วงเวลารอคอยหลายช่วงเวลาที่คุณรอการดำเนินการจากภายนอกเช่นการอ่านไฟล์ดาวน์โหลดเครือข่าย ในการบรรยายของเขาสิ่งที่เขาพูดคือ“ แยกงานที่ต่อเนื่องกันนาน ๆ นี้ออกมาเพื่อที่คุณจะได้ทำสิ่งที่มีประโยชน์ระหว่างรอ” นั่นคือเหตุผลที่เขาพูดถึงองค์กรต่าง ๆ ด้วยโกเฟอร์ต่าง ๆ

ตอนนี้จุดแข็งของ Go มาจากการทำให้ช่องโหว่นี้ง่ายขึ้นด้วยgoคำหลักและแชแนล นอกจากนี้ยังมีการสนับสนุนที่ดีเยี่ยมในรันไทม์เพื่อกำหนดตารางเวลาของ goroutines เหล่านี้

แต่โดยพื้นฐานแล้วการเห็นพ้องด้วยกันนั้นดีกว่า

แอปเปิ้ลดีกว่าส้มหรือไม่?


ขอบคุณสำหรับกรณีที่ 5 ฉันมักจะคิดว่าโดยนัยขนานหมายถึงการทำงานพร้อมกัน
hqt

2
เหตุการณ์วนรอบ Node.js เป็นตัวอย่างที่ดีสำหรับกรณีที่ 4 แม้ว่าตัวประมวลผล B มีทรัพยากรว่าง แต่คำขอ X ควรได้รับการจัดการโดยตัวประมวลผล A ซึ่งกำลังประมวลผลไม่ว่าง Y หากการเรียกใช้ setTimeout สำหรับ Y นั้น X สามารถประมวลผลได้ หลังจากหมดเวลาที่ Y จะสิ้นสุดการประมวลผลด้วย
ลูคัส Janon

มันคุ้มค่าที่จะต้องทราบทั้งสองคำจำกัดความของคำว่า "เห็นพ้อง" ซึ่งถูกวางในคำตอบที่ได้รับการยอมรับและนี้จะค่อนข้างแตกต่างกัน ครั้งแรกหมายถึงความคิดที่จะทำงานหลายอย่างในช่วงเวลาที่ทับซ้อนกัน (เช่นขนานหมายถึงการทำงานพร้อมกันโดย def) ที่สองหมายถึงความคิดที่จะขัดจังหวะงานหนึ่งที่จะทำงานอื่น ๆ
Mergasov

คล้ายกับความคิดเห็นด้านบน - หลาม multithread เป็นตัวอย่างของกรณีที่ 4 ฉันไม่คิดว่ากรณีนี้เป็นเรื่องแปลก การล็อคล่ามทั่วโลกจะส่งผลให้ในกรณีที่ 4 (หากอนุญาตให้ใช้พร้อมกันทั้งหมด)
chub500

245

ฉันชอบคำพูดของ Rob Pike: การเห็นพ้องด้วยกันไม่ใช่การขนานกัน (ดีกว่า!) (สไลด์) (คุย)

ร็อบมักจะพูดถึง Go และมักจะตอบคำถามของ Concurrency vs Parallelism ในคำอธิบายด้วยภาพและเข้าใจง่าย! นี่คือบทสรุปสั้น ๆ :

ภารกิจ:มาเขียนคู่มือภาษาที่ล้าสมัยกันเถอะ! ทีละครั้ง!

งาน

การเกิดขึ้นพร้อมกัน:มีการแยกย่อยของงานหลายอย่างพร้อมกัน! ตัวอย่างหนึ่ง:

เฟอร์

Parallelism:การกำหนดค่าก่อนหน้านี้เกิดขึ้นพร้อมกันหากมี gophers อย่างน้อย 2 ตัวทำงานในเวลาเดียวกันหรือไม่


9
สำหรับวิดีโอดูblog.heroku.com/archives/2013/2/24/…
Pramod

15
ขออภัยต้องลงคะแนนเพราะบิต "ดีกว่า" คำตอบที่ถูกต้องคือมันแตกต่างกัน การเห็นพ้องด้วยเป็นส่วนหนึ่งของปัญหา ความเท่าเทียมเป็นส่วนหนึ่งของการแก้ปัญหา
pyon

@ EduardoLeónเห็นได้ชัดว่าคุณไม่ได้ตรวจสอบชื่อของการพูดคุย การเกิดขึ้นพร้อมกันนั้นไม่ใช่ปัญหามันเป็นเพียงวิธีการคิดในปัญหา / ภารกิจ
asfer

5
@asfer Concurrency เป็นส่วนหนึ่งของโครงสร้างของปัญหา อย่างไรก็ตามอย่าใช้คำว่า "การเกิดพร้อมกัน" (ปัญหา) กับ "การควบคุมการเกิดพร้อมกัน" (การแก้ปัญหาพร้อมกัน) ซึ่งมักใช้ร่วมกับการขนาน
pyon

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

146

หากต้องการเพิ่มสิ่งที่ผู้อื่นพูด:

เห็นพ้องด้วยเหมือนมีนักเล่นปาหี่ ไม่ว่ามันจะดูเหมือนว่านักเล่นปาหี่นั้นจะจับ / ขว้างลูกหนึ่งครั้งต่อมือ ความเท่าเทียมคือการมีนักเล่นปาหี่หลายคน


2
ฉันจะจู้จี้จุกจิก แต่ถ้าคุณเล่นกลกับจำนวนคู่ของลูกบอลคุณสามารถมีสองลูกในเวลาเดียวกัน (ขึ้นอยู่กับว่าคุณเล่นกล)
thebugfinder

52
@thebugfinder เพื่อให้แน่ใจว่าไม่มีที่ว่างสำหรับข้อผิดพลาดในตัวอย่างของโทมัส การเกิดขึ้นพร้อมกันเป็นเหมือนการเล่นปาหี่เพียงมือเดียว ไม่ว่าคน ๆ นั้นจะถือบอลครั้งละมากที่สุดเพียงใดก็ตาม ความเท่าเทียมคือเมื่อนักเล่นปาหี่ใช้มือทั้งสองข้าง
bigtunacan

สิ่งที่ฉันตั้งใจจะพูดด้วย "จำนวนคู่ของลูกบอล" คือ "จำนวนคู่ของลูก"
thebugfinder

1
คำตอบที่ฉลาดมาก ฉันสามารถเห็นจุดของผู้ค้นหาได้อย่างแน่นอน แต่ฉันชอบคำตอบนี้มากหากการกระทำครั้งละหนึ่งครั้งได้รับการพิจารณาและตกลง
BK

2
ฉันคิดว่ามันจะดีกว่าด้วย "Parallelism นั้นมีหนึ่งคนสำหรับแต่ละลูก" หากจำนวนลูกบอลเพิ่มขึ้น (ลองนึกภาพคำขอทางเว็บ) คนเหล่านั้นสามารถเริ่มเล่นปาหี่ทำให้การดำเนินการพร้อมกันและขนานกัน นอกจากนี้ฉันจะรักก็คือใครบางคนสามารถอธิบายรูปแบบของเครื่องปฏิกรณ์ด้วยตัวอย่างของนัก
เล่นแร่แปรธาตุ

120

สมมติว่าคุณมีโปรแกรมที่มีสองเธรด โปรแกรมสามารถทำงานได้สองวิธี:

Concurrency                 Concurrency + parallelism
(Single-Core CPU)           (Multi-Core CPU)
 ___                         ___ ___
|th1|                       |th1|th2|
|   |                       |   |___|
|___|___                    |   |___
    |th2|                   |___|th2|
 ___|___|                    ___|___|
|th1|                       |th1|
|___|___                    |   |___
    |th2|                   |   |th2|

ในทั้งสองกรณีเรามีความพร้อมกันจากข้อเท็จจริงที่ว่าเรามีมากกว่าหนึ่งเธรดที่กำลังทำงานอยู่

ถ้าเรารันโปรแกรมนี้บนคอมพิวเตอร์ที่มีซีพียูแกนเดียวระบบปฏิบัติการจะสลับไปมาระหว่างสองเธรดทำให้เธรดหนึ่งรันพร้อมกัน

หากเรารันโปรแกรมนี้บนคอมพิวเตอร์ที่มีซีพียูแบบมัลติคอร์เราก็จะสามารถรันเธรดทั้งสองแบบขนานกัน - ขนานกันในเวลาเดียวกัน


4
ฉันชอบบล็อกเธรด เรียบง่าย แต่สมบูรณ์แบบ! ขอบคุณสำหรับคำตอบที่น่าอัศจรรย์
bozzmob

53

การทำงานพร้อมกัน:หากมีปัญหาสองข้อหรือมากกว่านั้นได้รับการแก้ไขโดยหน่วยประมวลผลเดียว ข้อความแสดงแทน

Parallelism:หากปัญหาหนึ่งได้รับการแก้ไขโดยโปรเซสเซอร์หลายตัว

ข้อความแสดงแทน


55
ฉันไม่เห็นด้วยกับสิ่งนี้ - โปรแกรมที่ออกแบบมาให้ทำงานพร้อมกันอาจหรือไม่ทำงานในแบบขนาน การเกิดขึ้นพร้อมกันนั้นเป็นคุณลักษณะของโปรแกรมมากขึ้นความขนานอาจเกิดขึ้นเมื่อมีการดำเนินการ
Adrian Mouat

36

ฉันจะพยายามอธิบายด้วยตัวอย่างที่น่าสนใจและเข้าใจง่าย :)

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

หวังว่าสถานการณ์ต่อไปนี้จะอธิบายวิธีดำเนินการ 10 เกมเหล่านี้ได้อย่างง่ายดาย:

1) SERIAL - ให้บอกว่ามืออาชีพเล่นกับแต่ละคนทีละคนนั่นคือเริ่มต้นและจบเกมด้วยคนเดียวแล้วเริ่มเกมถัดไปกับคนต่อไปเรื่อย ๆ ในคำอื่น ๆ พวกเขาตัดสินใจที่จะดำเนินเกมตามลำดับ ดังนั้นหากเกมหนึ่งใช้เวลา 10 นาทีเพื่อให้เสร็จแล้ว 10 เกมจะใช้เวลา 100 นาทีนอกจากนี้สมมติว่าการเปลี่ยนจากเกมหนึ่งเป็นเกมอื่นใช้เวลา 6 วินาทีจากนั้น 10 เกมก็จะเป็น 54 วินาที (ประมาณ 1 นาที)

ดังนั้นกิจกรรมทั้งหมดจะเสร็จสมบูรณ์ประมาณ 101 นาที ( แนวทางที่เลวร้ายที่สุด )

2) CONCURRENT - สมมติว่ามืออาชีพเล่นเทิร์นของเขาและย้ายไปยังผู้เล่นถัดไปดังนั้นผู้เล่นทั้ง 10 คนกำลังเล่นพร้อมกัน แต่ผู้เล่นมืออาชีพไม่ได้อยู่กับคนสองคนในเวลาเดียวเขาเล่นเทิร์นของเขาและย้ายไปยังบุคคลต่อไป ทีนี้สมมติว่าผู้เล่นมืออาชีพใช้เวลา 6 วินาทีในการเล่นเทิร์นของเขาและเวลาการเปลี่ยนแปลงของผู้เล่นมืออาชีพ b / w ผู้เล่นสองคนคือ 6 วินาทีดังนั้นเวลาการเปลี่ยนภาพทั้งหมดเพื่อกลับไปยังผู้เล่นคนแรกคือ 1 นาที (10x6 วินาที) ดังนั้นตามเวลาที่เขากลับไปเป็นคนแรกด้วยซึ่งเหตุการณ์เริ่มต้นแล้ว 2 นาทีได้ผ่านไปแล้ว (10xtime_per_turn_by_champion + 10xtransition_time = 2 นาที)

สมมติว่าผู้เล่นทุกคนใช้เวลา 45 วินาทีในการเลี้ยวจนจบโดยอิงจาก 10 นาทีต่อเกมจากการแข่งขัน SERIAL หมายเลข ของรอบก่อนที่เกมจะจบ 600 / (45 + 6) = 11 รอบ (โดยประมาณ)

ดังนั้นเหตุการณ์ทั้งหมดจะเสร็จสิ้นในประมาณ 11xtime_per_turn_by_player _ & _ Champion + 11xtransition_time_across_10_players = 11x51 + 11x60sec = 561 + 660 = 1221sec = 20.35mins (โดยประมาณ)

ดูการปรับปรุงจาก 101 นาทีถึง 20.35 นาที ( แนวทางที่ดีกว่า )

3) PARALLEL - ให้ผู้จัดงานได้รับเงินพิเศษจึงตัดสินใจเชิญผู้เล่นมืออาชีพสองคน (ทั้งสองคนมีความสามารถเท่ากัน) และแบ่งผู้เล่น 10 คน (ผู้ท้าทาย) ในกลุ่มละ 5 คนและมอบหมายให้พวกเขาสองคนเช่น กลุ่มละ ตอนนี้เหตุการณ์กำลังดำเนินไปพร้อม ๆ กันในสองชุดนี้คือผู้เล่นอย่างน้อยสองคน (หนึ่งในแต่ละกลุ่ม) กำลังเล่นกับผู้เล่นมืออาชีพสองคนในกลุ่มของตน

อย่างไรก็ตามภายในกลุ่มผู้เล่นมืออาชีพที่มีผู้เล่นหนึ่งคนต่อครั้ง (เช่นเรียงตามลำดับ) ดังนั้นโดยไม่มีการคำนวณใด ๆ คุณสามารถอนุมานได้ว่าเหตุการณ์ทั้งหมดจะเสร็จสมบูรณ์โดยประมาณใน 101/2 = 50.5mins

ดูการปรับปรุงจาก 101 นาทีถึง 50.5 นาที ( แนวทางที่ดี )

4) CONCURRENT + PARALLEL - ในสถานการณ์สมมติข้างต้นสมมติว่าผู้เล่นแชมเปี้ยนสองคนจะเล่นพร้อมกัน (อ่านจุดที่ 2) กับผู้เล่น 5 คนในกลุ่มของตนดังนั้นตอนนี้เกมในกลุ่มต่าง ๆ กำลังวิ่งขนานกัน แต่ภายในกลุ่มที่พวกเขากำลังวิ่งพร้อมกัน

ดังนั้นเกมในกลุ่มหนึ่งจะเสร็จสมบูรณ์โดยประมาณใน 11xtime_per_turn_by_player _ & _ Champion + 11xtransition_time_across_5_players = 11x51 + 11x30 = 600 + 330 = 930sec = 15.5mins (โดยประมาณ)

ดังนั้นเหตุการณ์ทั้งหมด (เกี่ยวข้องกับกลุ่มการวิ่งแบบขนานสองกลุ่ม) จะเสร็จสมบูรณ์ในเวลาประมาณ 15.5 นาที

ดูการปรับปรุงจาก 101 นาทีถึง 15.5 นาที ( แนวทางที่ดีที่สุด )

หมายเหตุ:ในสถานการณ์ข้างต้นหากคุณแทนที่ผู้เล่น 10 คนด้วยงานที่คล้ายกัน 10 รายการและผู้เล่นมืออาชีพสองคนที่มีแกนประมวลผลสองตัวจากนั้นอีกครั้งลำดับต่อไปนี้จะยังคงเป็นจริง:

SERIAL> PARALLEL> CONCURRENT> CONCURRENT + PARALLEL

(หมายเหตุ: คำสั่งซื้อนี้อาจมีการเปลี่ยนแปลงสำหรับสถานการณ์อื่น ๆ เนื่องจากการสั่งซื้อนี้ขึ้นอยู่กับการพึ่งพาระหว่างงานการสื่อสารต้องการงาน b / w และงานการเปลี่ยนแปลงค่าโสหุ้ย b / w)


2
คำอธิบายที่ดี มีอีกหนึ่ง แบบจำลองที่เกิดขึ้นพร้อมกันสำหรับกรณีที่ 2 (เมื่อผู้เล่นมืออาชีพย้ายผู้เล่น b / w) จะได้รับการปรับปรุงเฉพาะเมื่อผู้เล่นทำเทิร์นของเขาใน 45 วินาที กล่าวอีกนัยหนึ่งเราควรมี I / O ที่รออยู่ในกระบวนการทั้งหมด หากผู้เล่นปกติสามารถเลี้ยวน้อยกว่า 45 วินาที (5 หรืออาจ 10 วินาที) การปรับปรุงจะน้อยลง ดังนั้นหากเราไม่ได้รอ I / O ในการทำงานของเราการทำงานพร้อมกันจะเหมือนกับการประมวลผลแบบอนุกรม
Psylone

33

ตัวอย่างง่ายๆ:

พร้อมกันคือ: "สองคิวที่เข้าถึงเครื่อง ATM หนึ่งเครื่อง"

Parallel คือ: "สองคิวและ ATM สองเครื่อง"


และมัลติเธรด? แค่คิดว่าคำมัลติเธรดเหมาะสมกับสถานการณ์ข้างต้นอย่างไร ในกรณีนี้ Concurrent == Multithreading เป็นเช่นเดียวกับในแต่ละคิวไปที่ ATM ต่อแต่ละช่วงเวลา?
KhoPhi

31

ลองนึกภาพการเรียนรู้ภาษาการเขียนโปรแกรมใหม่โดยดูวิดีโอการสอน คุณต้องหยุดวิดีโอชั่วคราวนำสิ่งที่พูดในรหัสไปใช้แล้วดูต่อ นั่นคือการทำงานพร้อมกัน

ตอนนี้คุณเป็นโปรแกรมเมอร์มืออาชีพแล้ว และคุณเพลิดเพลินไปกับการฟังเพลงสงบขณะเข้ารหัส นั่นคือความเท่าเทียม

ดังที่ Andrew Gerrand กล่าวในบล็อกของ GoLang

การเกิดขึ้นพร้อมกันนั้นเกี่ยวกับการจัดการกับสิ่งต่าง ๆ มากมายในคราวเดียว ความเท่าเทียมเป็นเรื่องเกี่ยวกับการทำสิ่งต่าง ๆ มากมายในครั้งเดียว

สนุก.


29

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

Parallelism แก้ปัญหาในการค้นหางานที่เพียงพอและงานที่เหมาะสม (งานที่สามารถแยกออกจากกันได้อย่างถูกต้อง) และแจกจ่ายให้กับทรัพยากร CPU ที่มีอยู่มากมาย การขนานกันอยู่เสมอแน่นอน แต่มันมาถึงแถวหน้าเพราะโปรเซสเซอร์แบบ multi-core ราคาถูกมาก


28

concurency: การดำเนินการหลายขั้นตอนพร้อมศักยภาพในการแบ่งปันทรัพยากร

เช่นสองเธรดที่แย่งชิงพอร์ต I / O

อัมพาต: แยกปัญหาในหลายชิ้นที่คล้ายกัน

เช่นการแยกไฟล์ขนาดใหญ่โดยการรันสองกระบวนการในทุก ๆ ครึ่งของไฟล์


21

การดำเนินการโปรแกรมพร้อมกันมี 2 ประเภท: การเขียนโปรแกรมพร้อมกันที่ไม่ขนานและการเขียนโปรแกรมพร้อมกันขนาน (หรือที่เรียกว่าขนาน)

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

การอ้างอิง: บทนำสู่การเกิดขึ้นพร้อมกันในภาษาการเขียนโปรแกรม


8
รูปภาพมูลค่าหนึ่งพันคำ
senseiwu

21

ขนานคือการดำเนินการพร้อมกันของกระบวนการในหรือmultiple cores per CPUmultiple CPUs (on a single motherboard)

การเกิดขึ้นพร้อมกันคือเมื่อParallelismสามารถทำได้บน a single core/CPUโดยใช้อัลกอริทึมการจัดกำหนดการที่แบ่งเวลาของ CPU (time-slice) กระบวนการถูกอินเตอร์ลีฟ

หน่วย:

  • 1 คอร์หรือหลายคอร์ในซีพียูเดียว(โปรเซสเซอร์ที่ทันสมัยในยุคปัจจุบัน)
  • CPU 1 ตัวหรือหลายตัวบนเมนบอร์ด(คิดว่าเซิร์ฟเวอร์ของโรงเรียนเก่า)
  • 1 แอปพลิเคชันคือ 1 โปรแกรม(คิดว่าเบราว์เซอร์ Chrome)
  • 1 โปรแกรมสามารถมี 1 หรือหลายกระบวนการ(คิดว่าแต่ละแท็บเบราว์เซอร์ Chrome เป็นกระบวนการ)
  • 1 กระบวนการสามารถมี 1 หรือหลายเธรดจาก 1 โปรแกรม(แท็บ Chrome ที่เล่นวิดีโอ Youtube ใน 1 เธรด, เธรดอื่นวางไข่สำหรับส่วนความคิดเห็น, อีกโพสต์สำหรับผู้ใช้ข้อมูลเข้าสู่ระบบ)
  • ดังนั้น 1 โปรแกรมสามารถมี 1 หรือหลายเธรดของการดำเนินการ
  • 1 กระบวนการคือthread(s)+allocated memory resources by OS (heap, register, stack, memory memory)

2
ฉันคิดว่านี่เป็นคำตอบที่สมบูรณ์แบบในโลกวิทยาศาสตร์คอมพิวเตอร์
sofs1

1
คำตอบนี้ควรเป็นคำตอบที่ยอมรับไม่ใช่ปรัชญาด้านบนและด้านล่าง
Eugen Sunic

10

Concurrency => เมื่องานหลายอย่างถูกดำเนินการในช่วงเวลาที่ทับซ้อนกันด้วยทรัพยากรที่ใช้ร่วมกัน (อาจเป็นการใช้ทรัพยากรให้เกิดประโยชน์สูงสุด)

Parallel => เมื่องานเดี่ยวถูกแบ่งออกเป็นหลายภารกิจย่อยอิสระที่สามารถดำเนินการได้พร้อมกัน


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

9

คิดว่าเป็นบริการคิวที่เซิร์ฟเวอร์สามารถให้บริการงานที่ 1 ในคิวเท่านั้น

1 เซิร์ฟเวอร์, 1 คิวงาน (มี 5 งาน) -> ไม่มีการทำงานพร้อมกัน, ไม่ขนานกัน (มีงานเพียงงานเดียวเท่านั้นที่จะเสร็จสิ้น, งานถัดไปในคิวต้องรอจนกว่างานบริการจะเสร็จสิ้นและไม่มีเซิร์ฟเวอร์อื่นที่จะ บริการมัน)

1 เซิร์ฟเวอร์ 2 หรือมากกว่าคิวที่แตกต่างกัน (ที่มี 5 งานต่อคิว) -> การทำงานพร้อมกัน (เนื่องจากเซิร์ฟเวอร์กำลังแบ่งปันเวลากับงานที่ 1 ทั้งหมดในคิวไม่เท่ากันหรือมีน้ำหนัก) ยังไม่มีการขนานกันตั้งแต่ในทันทีมีเพียงหนึ่งเดียวเท่านั้น งานบริการ

2 เซิร์ฟเวอร์ขึ้นไปหนึ่งคิว -> ขนาน (2 งานเสร็จในเวลาเดียวกัน) แต่ไม่มีการทำงานพร้อมกัน (เซิร์ฟเวอร์ไม่แชร์เวลางานที่ 3 ต้องรอจนกว่าเซิร์ฟเวอร์จะเสร็จสมบูรณ์)

2 เซิร์ฟเวอร์ขึ้นไป, 2 หรือมากกว่าคิวที่แตกต่างกัน -> การทำงานพร้อมกันและขนาน

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

ความขนานนั้นเกิดขึ้นได้ด้วย CPU, เซิร์ฟเวอร์, ผู้คนและอื่น ๆ ที่ทำงานแบบขนานมากขึ้น

โปรดจำไว้ว่าหากมีการแบ่งปันทรัพยากรความเท่าเทียมกันอย่างแท้จริงนั้นไม่สามารถทำได้ แต่นี่คือสิ่งที่การใช้งานพร้อมกันจะเป็นการใช้งานได้จริงที่ดีที่สุดโดยรับงานใหม่ที่ไม่ต้องการทรัพยากรนั้น


7

ฉันจะเสนอคำตอบที่ขัดแย้งกับคำตอบยอดนิยมบางส่วนที่นี่ ในความคิดของฉันเห็นพ้องด้วยเป็นคำทั่วไปที่มีความเท่าเทียม การเกิดขึ้นพร้อมกันนำไปใช้กับสถานการณ์ใด ๆ ที่มีงานที่แตกต่างหรือหน่วยของงานทับซ้อนกันในเวลา ความเท่าเทียมใช้กับสถานการณ์ที่หน่วยการทำงานที่แตกต่างกันได้รับการประเมิน / ดำเนินการในเวลาเดียวกัน raison d'etre of parallelism กำลังเร่งซอฟต์แวร์ที่สามารถได้รับประโยชน์จากทรัพยากรการคำนวณทางกายภาพที่หลากหลาย แนวคิดหลักอื่น ๆ ที่เหมาะสมภายใต้ภาวะพร้อมกันคือการโต้ตอบ การติดต่อสื่อสารใช้เมื่อการซ้อนทับของงานสามารถสังเกตได้จากโลกภายนอก สาเหตุของการโต้ตอบคือการสร้างซอฟต์แวร์ที่ตอบสนองต่อโลกแห่งความเป็นจริงเช่นผู้ใช้เครือข่ายเพื่อนอุปกรณ์ต่อพ่วงฮาร์ดแวร์เป็นต้น

ความเท่าเทียมและการโต้ตอบเป็นมิติที่เกิดขึ้นพร้อมกันเกือบทั้งหมด สำหรับนักพัฒนาโครงการบางคนอาจสนใจทั้งสองอย่างหรือไม่ก็ได้ พวกเขามีแนวโน้มที่จะได้รับ conflated ไม่น้อยเพราะสิ่งที่น่ารังเกียจที่เป็นหัวข้อให้ดั้งเดิมที่สะดวกพอสมควรที่จะทำทั้งสองอย่าง

รายละเอียดเพิ่มเติมเล็กน้อยเกี่ยวกับการขนาน :

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

มีรูปแบบและกรอบการทำงานจำนวนมากที่โปรแกรมเมอร์ใช้เพื่อแสดงความขนาน: ไพพ์ไลน์, พูลงาน, การดำเนินการรวมบนโครงสร้างข้อมูล ("อาร์เรย์ขนาน")

รายละเอียดเพิ่มเติมเล็กน้อยเกี่ยวกับการโต้ตอบ :

วิธีพื้นฐานและทั่วไปที่สุดในการโต้ตอบคือกับเหตุการณ์ (เช่นวนรอบเหตุการณ์และตัวจัดการ / การเรียกกลับ) สำหรับเหตุการณ์งานง่าย ๆ ที่ยอดเยี่ยม พยายามทำงานที่ซับซ้อนมากขึ้นกับเหตุการณ์ที่เกิดขึ้นเป็นกอง ripping (aka นรกโทรกลับ; ควบคุม aka กลับกัน) เมื่อคุณเบื่อกับเหตุการณ์ต่าง ๆ คุณสามารถลองสิ่งแปลกใหม่เช่นเครื่องกำเนิดไฟฟ้า Coroutines (aka Async / Await) หรือเธรดที่ทำงานร่วมกัน

สำหรับความรักของซอฟต์แวร์ที่เชื่อถือได้โปรดอย่าใช้เธรดถ้าสิ่งที่คุณต้องการคือการโต้ตอบ

Curmudgeonliness

ฉันไม่ชอบ "การเห็นพ้องด้วยกันของ Rob Pike ไม่ใช่การขนานกันมันดีกว่า" คำขวัญ การเกิดขึ้นพร้อมกันนั้นไม่ดีหรือแย่ไปกว่าการขนานกัน การเห็นพ้องด้วยรวมถึงการโต้ตอบที่ไม่สามารถเปรียบเทียบได้ในทางที่ดีขึ้น / แย่ลงด้วยความเท่าเทียม มันเหมือนกับว่า "การควบคุมการไหลดีกว่าข้อมูล"


6

ในอิเล็กทรอนิคส์อนุกรมและขนานแสดงประเภทของโทโพโลยีสถิตการพิจารณาพฤติกรรมที่แท้จริงของวงจร เมื่อไม่มีการเกิดขึ้นพร้อมกันขนานจะกำหนดขึ้น

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

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

ให้เราวาดภาพเกมกับเด็ก ๆ 9 คน หากเราทิ้งพวกเขาเป็นลูกโซ่ให้ส่งข้อความในตอนแรกและรับมันในตอนท้ายเราจะมีการสื่อสารแบบอนุกรม คำเพิ่มเติมเขียนข้อความประกอบด้วยลำดับของการสื่อสารที่เป็นหนึ่งเดียวกัน

I like ice-cream so much. > X > X > X > X > X > X > X > X > X > ....

นี่คือขั้นตอนตามลำดับทำซ้ำบนโครงสร้างพื้นฐานแบบอนุกรม

ตอนนี้ให้เรานึกภาพเพื่อแบ่งเด็ก ๆ เป็นกลุ่มที่ 3 เราแบ่งวลีออกเป็นสามส่วนให้เด็กคนแรกของบรรทัดที่อยู่ทางซ้ายของเราลูกคนที่สองถึงเส้นกึ่งกลาง ฯลฯ

I like ice-cream so much. > I like    > X > X > X > .... > ....
                          > ice-cream > X > X > X > ....
                          > so much   > X > X > X > ....

นี่เป็นกระบวนการต่อเนื่องที่ทำซ้ำบนโครงสร้างพื้นฐานแบบขนาน (ยังคงเป็นอนุกรมบางส่วนแม้ว่า)

ในทั้งสองกรณีสมมติว่ามีการสื่อสารที่สมบูรณ์แบบระหว่างเด็กผลลัพธ์จะถูกกำหนดล่วงหน้า

หากมีบุคคลอื่นที่พูดคุยกับลูกคนแรกในเวลาเดียวกับคุณแล้วเราจะมีกระบวนการที่เกิดขึ้นพร้อมกัน เราไม่ทราบว่าจะพิจารณาโครงสร้างพื้นฐานของกระบวนการใดดังนั้นผลลัพธ์สุดท้ายจะไม่ได้รับการพิจารณาล่วงหน้า


+1 น่าสนใจ ในการคำนวณหนึ่งคำจำกัดความตามคำตอบที่ยอมรับในปัจจุบันหมายถึงการดำเนินการในช่วงเวลาที่ทับซ้อนกันไม่จำเป็นต้องพร้อมกัน (ซึ่งจะขนานกัน) ในอุปกรณ์อิเล็กทรอนิกส์คุณจะอธิบายวงจรที่ออกแบบมาเพื่อให้สิ่งที่ปรากฏเกิดขึ้นในเวลาเดียวกันได้อย่างไร แต่เพิ่งจะเปลี่ยนอย่างรวดเร็ว ในการเปรียบเทียบไอศกรีมของคุณต่อ: ฉันชอบไอศกรีมมาก> เด็ก A1 ฉันชอบ> เด็ก B1 ไอศกรีม> เด็ก C1 มาก> เด็ก A2 มากฉันชอบ> เด็ก B2 ไอศกรีม <เด็ก C2 มาก ...
acarlon

แรกที่ผมเห็นที่นี่: s1l3n0.blogspot.com/2013/04/...
FrankHB

ใช่ฉันปรับปรุง / ขยายคำตอบของฉันลงในบันทึกย่อส่วนตัวของฉัน ;)
s1l3n0

5

การเกิดขึ้นพร้อมกันเป็นรูปแบบทั่วไปของการขนาน ตัวอย่างเช่นโปรแกรมแบบขนานสามารถเรียกว่าทำงานพร้อมกันได้ แต่การย้อนกลับไม่เป็นความจริง

  1. สามารถดำเนินการพร้อมกันได้ในโปรเซสเซอร์เดียว (หลายเธรดจัดการโดยตัวกำหนดตารางเวลาหรือเธรดพูล)

  2. ไม่สามารถทำการประมวลผลแบบขนานบนโปรเซสเซอร์เดี่ยว แต่ใช้โปรเซสเซอร์หลายตัวได้ (หนึ่งกระบวนการต่อโปรเซสเซอร์)

  3. การคำนวณแบบกระจายยังเป็นหัวข้อที่เกี่ยวข้องและสามารถเรียกว่าการคำนวณแบบพร้อมกัน แต่การย้อนกลับไม่เป็นความจริงเช่นการขนาน

สำหรับรายละเอียดอ่านบทความวิจัย แนวคิดการเขียนโปรแกรมพร้อมกัน


5

ฉันชอบการแสดงกราฟิกนี้จากคำตอบอื่น - ฉันคิดว่ามันตอบคำถามได้ดีกว่าคำตอบข้างต้นมากมาย

Parallelism vs Concurrency เมื่อเธรดสองเธรดรันพร้อมกันเธรดทั้งสองจะรันพร้อมกัน ตัวอย่างเช่นถ้าเรามีสองเธรด A และ B ดังนั้นการประมวลผลแบบขนานจะมีลักษณะดังนี้:

CPU 1: A ------------------------->

CPU 2: B ------------------------->

เมื่อสองเธรดกำลังทำงานพร้อมกันการดำเนินการของพวกเขาซ้อนทับกัน การทับซ้อนกันสามารถเกิดขึ้นได้สองวิธี: เธรดกำลังทำงานในเวลาเดียวกัน (เช่นขนาน, ด้านบน), หรือการประมวลผลกำลังถูกอินเตอร์ลีฟบนโปรเซสเซอร์เช่น:

CPU 1: A -----------> B ----------> A -----------> B -------- ->

ดังนั้นเพื่อจุดประสงค์ของเราการขนานกันสามารถถือเป็นกรณีพิเศษของการเกิดพร้อมกัน

ที่มา: คำตอบอื่นที่นี่

หวังว่าจะช่วย


4

ฉันชอบคำตอบของ Paul Butcher สำหรับคำถามนี้ (เขาเป็นนักเขียนของSeven Concurrency Models ในเจ็ดสัปดาห์ ):

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


3

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

ความเท่าเทียมหมายถึงคุณกำลังทำบางสิ่งพร้อมกัน พวกเขาไม่จำเป็นต้องเป็นส่วนหนึ่งของการแก้ปัญหาเดียว ตัวอย่างเช่นเธรดของคุณสามารถแก้ปัญหาเดียวได้ แน่นอนว่าสิ่งที่ใช้ในการซิงโครไนซ์ยังมี แต่ในมุมมองที่ต่างกัน


3

"Concurrency" คือเมื่อมีหลายสิ่งที่กำลังดำเนินการอยู่

"ความเท่าเทียม" คือเมื่อสิ่งที่มีความคืบหน้าพร้อมกันในเวลาเดียวกัน


ตัวอย่างของการเกิดพร้อมกันโดยไม่มีการขนาน:

  • หลายเธรดบนแกนเดียว
  • หลายข้อความในคิวข้อความ Win32
  • หลายรายการSqlDataReaderบนการเชื่อมต่อMARS
  • JavaScript หลายสัญญาในแท็บเบราว์เซอร์

อย่างไรก็ตามโปรดสังเกตว่าความแตกต่างระหว่างการเกิดพร้อมกันและความเท่าเทียมมักเป็นเรื่องของมุมมอง ตัวอย่างข้างต้นไม่ได้ขนานกันจากมุมมองของ (เอฟเฟ็กต์ที่สังเกตได้) ที่รันโค้ดของคุณ แต่มีความเท่าเทียมในระดับคำสั่งแม้ในแกนเดียว มีชิ้นส่วนของฮาร์ดแวร์ที่ทำสิ่งต่าง ๆ ควบคู่กับ CPU และขัดจังหวะ CPU เมื่อเสร็จสิ้น GPU อาจกำลังวาดไปที่หน้าจอในขณะที่คุณกำลังดำเนินการตามขั้นตอนหน้าต่างหรือตัวจัดการเหตุการณ์ DBMS สามารถข้าม B-Trees สำหรับการสืบค้นถัดไปในขณะที่คุณยังดึงผลลัพธ์ของการสืบค้นก่อนหน้า เบราว์เซอร์อาจกำลังทำรูปแบบหรือระบบเครือข่ายในขณะที่คุณPromise.resolve()กำลังดำเนินการ ฯลฯ

ดังนั้นคุณไป โลกจะยุ่งเหยิงเหมือนเคย;)


3

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

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

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

หวังว่านี่จะช่วยได้!


3

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

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

คัดลอกมาจากคำตอบของฉัน: https://stackoverflow.com/a/3982782


2

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

การเกิดขึ้นพร้อมกัน: การ เกิดขึ้นพร้อมกันจะปรากฏในรูปภาพเมื่อคุณแบ่งปันข้อมูลซึ่งเป็นทรัพยากรที่ใช้ร่วมกันในกลุ่ม ในระบบการทำธุรกรรมหมายความว่าคุณต้องซิงโครไนซ์ส่วนสำคัญของรหัสโดยใช้เทคนิคบางอย่างเช่นล็อคเซมาฟอร์ ฯลฯ


นี่ควรเป็นคำตอบที่ IMO ยอมรับเนื่องจากเป็นส่วนสำคัญของคำศัพท์ทั้งสอง
michid

2

(ฉันค่อนข้างประหลาดใจเช่นคำถามพื้นฐานไม่ได้รับการแก้ไขอย่างถูกต้องและเรียบร้อยเป็นเวลาหลายปี ... )

ในระยะสั้นทั้งสองเห็นพ้องและความเท่าเทียมเป็นทรัพย์สินของคอมพิวเตอร์

ความแตกต่างนี่คือคำอธิบายจาก Robert Harper :

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

พวกเขาสามารถเรียงลำดับของคุณสมบัติมุมฉากในโปรแกรม อ่านโพสต์บล็อกนี้สำหรับภาพประกอบเพิ่มเติม และอันนี้พูดถึงความแตกต่างเล็กน้อยเกี่ยวกับองค์ประกอบในการเขียนโปรแกรมเช่นเธรด

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

อีกหนึ่งไฮไลท์: (เวลาจริง) "เวลา" ไม่เกี่ยวกับคุณสมบัติที่กล่าวถึงที่นี่ เวลาเป็นเพียงวิธีการดำเนินการวัดเพื่อแสดงความสำคัญของคุณสมบัติ แต่อยู่ไกลจากสาระสำคัญ ลองนึกถึงบทบาทของ "เวลา" ในความซับซ้อนของเวลาซึ่งมีความคล้ายคลึงกันไม่มากก็น้อยการวัดก็มักจะสำคัญกว่าในกรณีนั้น


2

"พร้อมกัน" กำลังทำสิ่งต่าง ๆ - ในเวลาเดียวกัน พวกเขาอาจเป็นสิ่งที่แตกต่างหรือสิ่งเดียวกัน แม้จะมีคำตอบที่ยอมรับซึ่งขาดอยู่มันก็ไม่เกี่ยวกับ "ดูเหมือนจะเป็นในเวลาเดียวกัน" มันเป็นจริงในเวลาเดียวกัน คุณต้องมีหลายคอร์ของ CPU ไม่ว่าจะใช้หน่วยความจำที่ใช้ร่วมกันภายในโฮสต์เดียวหรือหน่วยความจำแบบกระจายในโฮสต์ที่แตกต่างกันเพื่อเรียกใช้รหัสที่เกิดขึ้นพร้อมกัน ท่อของ 3 งานที่แตกต่างที่ทำงานพร้อมกันในเวลาเดียวกันเป็นตัวอย่าง: Task-level-2 ต้องรอหน่วยที่เสร็จสิ้นโดย task-level-1 และ task-level-3 ต้องรอหน่วยของงานที่เสร็จสมบูรณ์โดย งานระดับ-2 อีกตัวอย่างหนึ่งคือการทำงานพร้อมกันของผู้ผลิต 1 รายพร้อมผู้บริโภค 1 ราย หรือผู้ผลิตหลายรายและผู้บริโภค 1 ราย; ผู้อ่านและนักเขียน; et al.

"Parallel" กำลังทำสิ่งเดียวกันในเวลาเดียวกัน มันเกิดขึ้นพร้อมกัน แต่ยิ่งไปกว่านั้นมันเป็นพฤติกรรมเดียวกันที่เกิดขึ้นในเวลาเดียวกันและส่วนใหญ่มักจะอยู่ในข้อมูลที่แตกต่างกัน พีชคณิตเมทริกซ์สามารถถูกทำให้ขนานกันได้เนื่องจากคุณมีการดำเนินการแบบเดียวกันซ้ำ ๆ : ตัวอย่างเช่นผลรวมคอลัมน์ของเมทริกซ์สามารถคำนวณได้ในเวลาเดียวกันโดยใช้พฤติกรรม (ผลรวม) เดียวกัน แต่อยู่ในคอลัมน์ที่ต่างกัน เป็นกลยุทธ์ทั่วไปในการแบ่งพาร์ติชัน (แยก) คอลัมน์ระหว่างคอร์โปรเซสเซอร์ที่มีอยู่เพื่อให้คุณมีจำนวนงานใกล้เคียงกัน (จำนวนคอลัมน์) ที่จัดการโดยแต่ละคอร์โปรเซสเซอร์ อีกวิธีในการแบ่งงานเป็นแบบ bag-of-task ซึ่งคนงานที่เสร็จงานกลับไปหาผู้จัดการที่แจกงานและทำงานเพิ่มขึ้นแบบไดนามิกจนกว่าทุกอย่างจะเสร็จสิ้น อัลกอริทึมการจองตั๋วเป็นอีกหนึ่ง

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

กล่าวอีกนัยหนึ่งการขนานกันคือเมื่อมีการใช้พฤติกรรมเดียวกันพร้อมกัน พร้อมกันหมายถึงในเวลาเดียวกัน แต่ไม่จำเป็นต้องมีพฤติกรรมเดียวกัน Parallel เป็นประเภทของภาวะพร้อมกันที่เกิดขึ้นในเวลาเดียวกัน

ตัวอย่างเช่นข้อกำหนดจะมีคำแนะนำอะตอมมิกส่วนที่สำคัญการยกเว้นซึ่งกันและกันการหมุนรอเซมาฟอร์, จอภาพ, อุปสรรค, การส่งข้อความ, แผนที่ลด, หัวใจเต้น, แหวน, อัลกอริทึมการจองตั๋ว, กระทู้, MPI, OpenMP

งานของ Gregory Andrews เป็นหนังสือเรียนยอดนิยม: Multithreaded, Parallel และ Distributed Programming


1

เยี่ยมมากให้ฉันใช้สถานการณ์เพื่อแสดงสิ่งที่ฉันเข้าใจ สมมติว่ามีเด็ก 3 คนชื่อ: A, B, C. A และ B พูดคุย, C ฟัง สำหรับ A และ B พวกเขาขนานกัน: A: ฉันเป็น A. B: ฉันเป็น B.

แต่สำหรับ C สมองของเขาต้องใช้กระบวนการพร้อมกันในการฟัง A และ B มันอาจจะ: ฉันเป็น IA am B


1

การทำงานพร้อมกันอย่างง่ายหมายถึงมีการเรียกใช้งานมากกว่าหนึ่งงาน (ไม่จำเป็นต้องขนานกัน) ตัวอย่างเช่นเรามี 3 งานในเวลาใดเวลาหนึ่ง: มากกว่าหนึ่งอาจทำงานอยู่หรือทั้งหมดอาจทำงานพร้อมกัน

ความเท่าเทียมหมายถึงพวกเขากำลังวิ่งขนานกันอย่างแท้จริง ดังนั้นในกรณีนี้ทั้งสามจะต้องทำงานพร้อมกัน


1

แนวคิดของ "การทำงานพร้อมกัน" ของหอกเป็นการออกแบบและการนำไปปฏิบัติโดยเจตนา การออกแบบโปรแกรมที่ใช้งานได้พร้อมกันอาจจะหรืออาจจะไม่แสดงพฤติกรรม "ความเท่าเทียม" มันขึ้นอยู่กับสภาพแวดล้อมรันไทม์

คุณไม่ต้องการให้มีการขนานกันที่แสดงโดยโปรแกรมที่ไม่ได้ออกแบบมาสำหรับการทำงานพร้อมกัน :-) แต่เท่าที่มันเป็นกำไรสุทธิสำหรับปัจจัยที่เกี่ยวข้อง (การใช้พลังงาน, ประสิทธิภาพ, ฯลฯ ), คุณต้องการการออกแบบพร้อมกันมากที่สุดเพื่อให้ระบบโฮสต์สามารถขนานการดำเนินการเมื่อเป็นไปได้

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

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