คุณจะฝึกพ้องความพร้อมและมัลติเธรดอย่างไร [ปิด]


33

ฉันได้อ่านเกี่ยวกับการทำงานพร้อมกันหลายเธรดและวิธีการ"อาหารกลางวันฟรีมีมากกว่า" แต่ฉันยังไม่มีโอกาสที่จะใช้ MT ในงานของฉัน

ฉันกำลังมองหาคำแนะนำเกี่ยวกับสิ่งที่ฉันสามารถทำได้เพื่อฝึกฝน CPU หนัก ๆ MT ผ่านการฝึกหัดหรือการมีส่วนร่วมในโครงการโอเพนซอร์สบางแห่ง

ขอบคุณ

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


1
อาจเป็นไปได้ที่น่าสนใจ: programmers.stackexchange.com/questions/24936/…
Orbling

5
ถาม: คุณจะฝึกพ้องความพร้อมและมัลติเธรดอย่างไร? A: โดยการเล่นกล
Steven A. Lowe

@ สตีเว่น: ไม่ไกลขนาดนั้นจริงๆ
Robert Harvey

ลิงก์ "อาหารกลางวันฟรีสิ้นสุดแล้ว" เสียชีวิต
ผู้ใช้

น่าจะโอเคแล้ว ...
ซาเวียร์โนเด

คำตอบ:


15

บทความของ Joseph Albahari เกี่ยวกับThreading ใน C #เป็นหนึ่งในแหล่งข้อมูลที่ดีที่สุดที่ฉันเคยเห็น

สารบัญอยู่ด้านล่าง โปรดทราบว่าบางหัวข้อเช่น Task Parallel Library นั้นเฉพาะกับ. NET แต่ส่วนใหญ่จะใช้กับภาษาอื่น ๆ โดยเฉพาะ Java

GETTING STARTED
Introduction and Concepts
Join and Sleep
How Threading Works
Threads vs Processes
Threading’s Uses and Misuses
Creating and Starting Threads
Passing Data to a Thread
Naming Threads
Foreground vs Background
Thread Priority
Exception Handling
Thread Pooling
Thread Pooling via TPL
Thread Pooling Without TPL
Optimizing the Thread Pool
BASIC SYNCHRONIZATION
+ Synchronization Essentials
+ Locking
+ Thread Safety
+ Event Wait Handles
+ Synchronization Contexts
USING THREADS
+ Event-Based Asynch Pattern
+ BackgroundWorker
+ Interrupt and Abort
+ Safe Cancellation
+ Lazy Initialization
+ Thread-Local Storage
+ Timers
ADVANCED THREADING
+ Nonblocking Synchronization
+ Signaling with Wait and Pulse
+ The Barrier Class
+ Reader/Writer Locks
+ Suspend and Resume
+ Aborting Threads
PARALLEL PROGRAMMING
+ Parallel Programming
+ Why PFX?
+ PLINQ
+ The Parallel Class
+ Task Parallelism
+ Working with AggregateException
+ Concurrent Collections
+ SpinLock and SpinWait

นอกจากนี้คุณยังสามารถดูบทช่วยสอนของ Jon Skeet ได้ที่นี่: http://www.yoda.arachsys.com/csharp/threads/


3
ฉันเพิ่มหน้า c # mutlithreading ของ Jon Skeet ในคำตอบของคุณ: yoda.arachsys.com/csharp/threads

1
ข้อที่สองชอบบทที่ 5 ของ Albahari ซึ่งเป็นประโยชน์อย่างมาก เพื่อฝึกฝนนี่เป็นแบบฝึกหัดง่ายๆ - สร้างเกม tic-tac-toe หลายคนโดยใช้ WCF (ถ้าคุณรู้) และ UI แบบง่าย - ลองอัปเดตการควบคุม UI ด้วยการตอบสนองจากผู้เล่นแต่ละคน คุณตรวจสอบรหัส firefox แล้วหรือยัง
Narayana

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

1
@gnat: ฉันวางสารบัญลงในคำตอบของฉัน
Robert Harvey

ลิงก์ไปยังบทช่วยสอนของ Jon Skeet ดูเหมือนจะไม่ทำงาน (ฉันได้รับหน้า Azure 404) - นี่เป็นไฟล์เก็บถาวรของมัน: web.archive.org/web/20181010053742/http://www.yoda.arachsys.com / …
ArtOfWarfare

13

Java Concurrency ในการปฏิบัติเป็นหนึ่งในหนังสือที่ดีที่สุดเกี่ยวกับหลายเธรดและการทำงานพร้อมกัน แม้ว่าตัวอย่างทั้งหมดในหนังสือเล่มนี้เป็นภาษาจาวา แต่หนังสือเล่มนี้ให้คำอธิบายที่มั่นคงเกี่ยวกับโลก MT มันช่วยฉันได้มากเมื่อฉันพัฒนาระบบ MT


3
+1 หนังสือดี และมันเป็น Java Concurrency ในทางปฏิบัติไม่ใช่ Action
talonx

8

บทที่ 11 ของหนังสือIntel Threading Building Blockโดย James Reinders นั้นใช้เพื่อเป็นตัวอย่างของอัลกอริธึมและโครงการที่ใช้ประโยชน์จากParallel Computing (หรือ Parallel Programming): เครื่องมือค้นหาย่อย, เกมแห่งชีวิต, ตะแกรงแห่ง Eratosthenes, Matrix Multiply และ จากนั้นหัวข้อขั้นสูงอื่น ๆ เพิ่มเติมเช่นการกรองแพ็กเก็ตเครือข่ายและเกม


4

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


2

มีความแตกต่างระหว่างการเกิดพร้อมกันและขนาน การทำงานพร้อมกันคือการกระทำมากกว่าหนึ่งอย่างในเวลาเดียวกันเช่นการเขียนไฟล์ 2 ไฟล์ Parallelism คือการเร่งความเร็วของโปรแกรมโดยใช้หลายคอร์

แม้ว่าจะไม่มีอาหารกลางวันฟรีเมื่อพูดถึงการเกิดขึ้นพร้อมกัน แต่อาหารกลางวันก็มีอิสระมากขึ้นในเวลาเดียวกันดูการพัฒนาเช่นhttp://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell


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

หากทับซ้อนกันคุณกำลังดำเนินการมากกว่าหนึ่งครั้ง
dan_waterworth

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

ฉันไม่ได้บอกว่าพวกเขากำลังเกิดขึ้นพร้อมกัน ฉันพูดว่าทำมากกว่าหนึ่งครั้ง
dan_waterworth

การทำมากกว่าหนึ่งอย่างในเวลาเดียวกับการทำสองสิ่งพร้อมกัน หากมีหลายสิ่งเกิดขึ้นในเวลาที่กำหนดจะเกิดขึ้นพร้อมกัน
ซาด Saeeduddin

1

ไซต์นี้มีตัวอย่างโครงการที่ดีโดยทั่วไป www.planet-source-code.com

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


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