แหล่งข้อมูลที่ดีที่สุดสำหรับการเรียนรู้เกี่ยวกับแอพพลิเคชันพร้อมกันและมัลติเธรดคืออะไร [ปิด]


16

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

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


คุณต้องการที่จะ "ทำงานใน pseudocode"? ฉันหวังว่ามันจะเหมาะกับคุณ! :)
logc

คำตอบ:


6

นี่คือหนังสือที่ฉันพบว่ามีประโยชน์เมื่อเร็ว ๆ นี้:

Java Concurrency in Practice - โดยผู้เขียนของการใช้งานพร้อมกันของ Java ค่อนข้างเฉพาะ Java แต่ชัดเจนและให้ข้อมูลเกี่ยวกับอันตรายและข้อผิดพลาดของเธรด

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

การเขียนโปรแกรมพร้อมกันใน JVM - อันที่จริงนี่เป็นบทความทางทฤษฎีที่เป็นประกาย แต่มากอ่านได้ง่ายและลึกซึ้ง หากคุณจำเป็นต้องรู้ว่า STM หรือนักแสดงคืออะไรจุดแข็งและจุดอ่อนของพวกเขาคืออะไรและทำไมหนังสือเล่มนี้จะบอกคุณ

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


4

ฉันได้พบทรัพยากรการทำเกลียวฟรีนี้วางโดย Joe Albahari ยอดเยี่ยม ...

เธรดใน C #

มันเอียงไปทาง C # แต่แนวคิดมีผลบังคับใช้กับภาษาอื่นทั้งหมด นอกจากนี้เขายังมีการสอนการดาวน์โหลด PDF เป็นภาษาอังกฤษและอีกหลายภาษา ฉันอยากจะแนะนำเนื่องจากการรวมกันของรหัสตัวอย่างคำอธิบายทีละขั้นตอนของรหัสและลำดับที่ยอดเยี่ยมและไดอะแกรมของรัฐที่มาพร้อมกับตัวอย่าง

บทช่วยสอนอยู่ในห้าส่วน:

มันมีอยู่ในรูปแบบหนังสือที่นี่: C # 4.0 ในกะลา (บทที่ 23 และ 24)


1
+1 นี่คือการอ้างอิงแบบ "go-to" ตามปกติของฉันสำหรับเธรด / การทำงานพร้อมกัน / การขนานใน. NET
Matthew King

4

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


1

ขณะนี้มีเธรดสิ่งอำนวยความสะดวกในมาตรฐาน C ++ ดังนั้นหากคุณต้องการเรียนรู้ใน C ++ ฉันขอแนะนำให้อ่านการทบทวนคุณสมบัติภาษาใหม่อย่างง่าย ๆ ก่อนที่จะมุ่งหน้าไปยังการสอนเธรดทั่วไป จากนั้นกลับไปทบทวนมาตรฐานโดยละเอียดเพิ่มเติมในภายหลัง

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

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


1

หากต้องการเรียนรู้เกี่ยวกับการทำงานพร้อมกันให้ใช้ภาษาที่ออกแบบมาสำหรับการทำงานพร้อมกัน Golangเป็นตัวเลือกที่ดีเนื่องจากมีการรองรับการทำงานพร้อมกันและไวยากรณ์ C-like ซึ่งมีอยู่ในตัวซึ่งทำให้ภาษาง่ายต่อการเรียนรู้สำหรับโปรแกรมเมอร์ส่วนใหญ่

มันมีการส่งข้อความ mutexes ฯลฯ ซึ่งครอบคลุมเกือบทุกความต้องการของคุณพร้อมกันและมีความซับซ้อนเทียบเท่าในภาษาอื่น ๆ

ตัวอย่างเช่นการรับ int จากเธรดอื่นเข้าสู่ตัวแปรaโดยใช้ MPI ใน C:

MPI_Recv(&a, 1, MPI_INT, 0, 0, MPI_COMM_WORLD,MPI_STATUS_IGNORE);

การรับ int เข้าสู่ตัวแปร a จากเธรดอื่น (ผู้ใช้) กำลังดำเนินการ:

a := <-c

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

tour.golang.org

เพื่อข้ามไปยังส่วนที่เห็นพ้องด้วย

http://tour.golang.org/concurrency/1

อดีตศาสตราจารย์ของฉันจัดหลักสูตรระยะสั้นที่เป็นที่นิยมมากสำหรับนักเรียนชั้นปีที่ 1 ในหัวข้อการเห็นพ้องด้วย สำหรับการแนะนำอย่างรวดเร็ว แต่อย่างละเอียดเกี่ยวกับสิ่งที่เกิดขึ้นพร้อมกันฉันขอแนะนำให้อ่านสิ่งนี้อย่างแน่นอน

ความรู้พื้นฐานของการเขียนโปรแกรมพร้อมกัน

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