Làm thế nào bạn sẽ thực hành đồng thời và đa luồng? [đóng cửa]


33

Tôi đã đọc về đồng thời, đa luồng và làm thế nào "bữa trưa miễn phí kết thúc" . Nhưng tôi chưa có khả năng sử dụng MT trong công việc của mình.

Do đó, tôi đang tìm kiếm các đề xuất về những gì tôi có thể làm để có được một số thực hành về CPU nặng MT thông qua các bài tập hoặc tham gia vào một số dự án nguồn mở.

Cảm ơn.

Chỉnh sửa: Tôi quan tâm nhiều hơn đến các dự án nguồn mở sử dụng MT cho các tác vụ gắn với CPU hoặc đơn giản là các thuật toán thú vị để thực hiện bằng MT, thay vì sách hoặc giấy tờ chỉ mô tả các công cụ như luồng, đột biến và khóa hoặc Làm thế nào MT có thể được sử dụng để có GUI đáp ứng ...



5
Q: Làm thế nào bạn sẽ thực hành đồng thời và đa luồng? A: bằng cách tung hứng
Steven A. Lowe

@Steven: Không xa lắm, thật đấy.
Robert Harvey

Liên kết "bữa trưa miễn phí kết thúc" đã chết
Người dùng

Nên ổn ngay bây giờ ...
Xavier Nodet

Câu trả lời:


15

Bài viết của Joseph Albahari về Threading trong C # là một trong những tài nguyên tốt nhất tôi từng thấy.

Mục lục bên dưới. Lưu ý rằng một số chủ đề, như Thư viện song song tác vụ, dành riêng cho .NET, nhưng phần lớn trong số đó có thể áp dụng cho các ngôn ngữ khác, đặc biệt là 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

Bạn cũng có thể xem hướng dẫn của Jon Skeet tại đây: http://www.yoda.arachsys.com/csharp/threads/


3
Tôi thêm trang c # mutlithreading của Jon Skeet vào câu trả lời của bạn: yoda.arachsys.com/csharp/threads

1
Thứ hai, thích 5 chương của Albahari cực kỳ hữu ích. Để thực hành, đây là một bài tập đơn giản - Tạo trò chơi tic-tac-toe nhiều người chơi bằng WCF (nếu bạn biết) và giao diện người dùng đơn giản - hãy thử cập nhật các điều khiển UI với phản hồi từ mỗi người chơi. Bạn đã kiểm tra mã firefox chưa?
Narayana

bạn có phiền giải thích thêm về những gì nó làm không và tại sao bạn lại đề nghị nó như trả lời câu hỏi được hỏi? "Câu trả lời chỉ liên kết" không được chào đón tại Stack Exchange
gnat

1
@gnat: Tôi dán mục lục vào câu trả lời của tôi.
Robert Harvey

Liên kết đến hướng dẫn của Jon Skeet dường như không hoạt động (Tôi đã nhận được trang Azure 404) - đây là kho lưu trữ của nó: web.archive.org/web/20181010053742/http://www.yoda.arachsys.com /
Lọ

13

Java Concurrency in Practice là một trong những cuốn sách hay nhất về đa luồng và đồng thời. Mặc dù tất cả các ví dụ trong cuốn sách đều dựa trên Java, cuốn sách này đưa ra một lời giải thích chắc chắn về thế giới MT. Nó đã giúp tôi rất nhiều khi tôi đang phát triển một hệ thống MT.


3
+1 cuốn sách hay. Và đó là Java đồng thời trong thực tiễn, không phải hành động.
Talonx

8

Chương 11 của cuốn sách Intel Threading Building Blocks của James Reinder dành cho các ví dụ về thuật toán và dự án sử dụng Parallel Computing (hoặc Lập trình song song): công cụ tìm chuỗi con, Trò chơi cuộc sống, Sàng lọc Eratosthenes, Matrix Multiply, và sau đó các chủ đề nâng cao khác như lọc gói mạng và trò chơi.


4

Tôi thấy Lập trình đồng thời trên Windows của Joe Duffy rất hữu ích. Có rất nhiều chiều sâu. Nó không kéo bất kỳ cú đấm nào, vì vậy bạn thực sự cảm thấy tốt về việc có bao nhiêu cách để tự bắn vào chân mình. Nó giúp tôi thận trọng, đó là lời khuyên tốt nhất tôi có thể đưa ra cho bất cứ ai bắt đầu với ứng dụng MT.


2

Có sự khác biệt giữa đồng thời và song song. Đồng thời là hành động thực hiện nhiều việc cùng một lúc, như viết vào 2 tệp. Song song là hành động tăng tốc các chương trình bằng cách sử dụng nhiều lõi.

Mặc dù không có bữa ăn trưa miễn phí khi nói đến sự tương tranh, nhưng song song, bữa trưa chắc chắn sẽ trở nên miễn phí hơn, hãy xem các phát triển như http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell


2
Phân biệt của bạn là không chính xác. Đồng thời là hành động hoàn thành nhiều nhiệm vụ trong các khoảng thời gian chồng chéo trong khi không nhất thiết phải thực hiện nhiều hơn một việc tại bất kỳ thời điểm nào . Song song là hành động làm nhiều hơn một việc tại bất kỳ thời điểm nào.
Asad Saeeduddin

Nếu chúng trùng nhau, bạn đang trong quá trình thực hiện nhiều việc cùng một lúc.
dan_waterworth

Nếu thời gian bắt đầu và kết thúc của chúng trùng nhau, điều này không cho thấy rằng cả hai nhiệm vụ đang được tiến hành đồng thời tại bất kỳ thời điểm nào. Đưa ra hai danh sách các số nguyên, bạn có thể có hai người để tổng hợp từng danh sách một cách độc lập và đồng thời, cả hai đồng thời và song song, hoặc bạn có thể ngồi xuống và xen kẽ giữa việc tổng hợp các mục trong một danh sách và các mục trong danh sách khác danh sách, đồng thời nhưng không song song.
Asad Saeeduddin

Tôi không nói rằng chúng đã xảy ra đồng thời. Tôi nói làm nhiều việc một lúc.
dan_waterworth

Làm nhiều việc cùng một lúc cũng giống như làm hai việc cùng một lúc. Nếu nhiều thứ đang xảy ra tại một thời điểm nhất định, chúng sẽ xảy ra đồng thời.
Asad Saeeduddin

1

Trang web này có một số ví dụ dự án tốt nói chung. www.planet-source-code.com

Chỉ cần chọn một ngôn ngữ và tìm kiếm đa luồng. bạn sẽ thấy một số dự án với mã nguồn có sẵn.


Tôi ngạc nhiên khi điều này chưa được bình chọn. Đây là câu trả lời duy nhất tôi thấy trong đó tập trung vào câu hỏi "làm thế nào để THỰC HÀNH lập trình song song & lập trình đồng thời". Mỗi câu trả lời khác giải quyết câu hỏi "làm thế nào để tìm hiểu các khái niệm", đó là một câu hỏi khác nhau.
Giô
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.