Các tài nguyên tốt nhất để tìm hiểu về các ứng dụng đồng thời và đa luồng là gì? [đóng cửa]


16

Tôi nhận ra rằng tôi có một lỗ hổng kiến ​​thức lớn khi nói đến các ứng dụng đa luồng và lập trình đồng thời. Tôi đã đề cập đến một số điều cơ bản trong quá khứ, nhưng hầu hết nó dường như không còn trong tâm trí tôi, và đó chắc chắn là một lĩnh vực mà tôi muốn, và cần, để hiểu biết nhiều hơn.

Các tài nguyên tốt nhất để tìm hiểu về việc xây dựng các ứng dụng đồng thời là gì? Tôi là một người có định hướng rất thực tế, vì vậy nếu nói cuốn sách chứa các ví dụ cụ thể thì tốt hơn, nhưng tôi sẵn sàng để đề xuất. Cá nhân tôi thích làm việc trong mã giả hoặc C ++, và nghiêng về phát triển trò chơi sẽ là tốt nhất, nhưng không bắt buộc.


Bạn thích "làm việc trong mã giả"? Tôi hi vọng nó làm việc cho bạn! :)
logc

Câu trả lời:


6

Đây là những cuốn sách tôi thấy hữu ích gần đây:

Thực hành đồng thời Java - bởi tác giả của nhiều công cụ đồng thời của Java. Hơi cụ thể về Java, nhưng rất rõ ràng và nhiều thông tin về sự nguy hiểm và cạm bẫy của các luồng.

Nghệ thuật đồng thời - không phải là một chuyên luận lý thuyết hấp dẫn như tiêu đề cho thấy, trên thực tế là một bản tóm tắt khá phổ biến và thực tế về những lời khuyên và ví dụ hữu ích.

Lập trình đồng thời trên JVM - Đây thực sự một chuyên luận lý thuyết hấp dẫn, nhưng rất, rất dễ đọc và sâu sắc. Nếu bạn cần biết STM hoặc diễn viên là gì, điểm mạnh và điểm yếu của họ là gì và tại sao , cuốn sách này sẽ cho bạn biết.

Có nhiều thư viện tiện ích chuyên dụng như Khối xây dựng luồng của Intel hoặc Trạm trung tâm lớn của Apple - những thư viện này thường có hướng dẫn sử dụng riêng, thường khá tốt và dù sao cũng là bắt buộc đọc nếu bạn muốn làm gì đó với chúng.


4

Tôi đã tìm thấy tài nguyên luồng miễn phí này được đưa ra bởi Joe Albahari tuyệt vời ...

Luồng trong C #

Nó nghiêng về phía C # nhưng các khái niệm này hoàn toàn có thể áp dụng cho các ngôn ngữ khác. Ông cũng cung cấp hướng dẫn dưới dạng tải xuống PDF bằng tiếng Anh và một số ngôn ngữ khác. Tôi muốn giới thiệu nó do sự kết hợp của mã ví dụ, từng bước giải thích về mã và trình tự xuất sắc và sơ đồ trạng thái kèm theo các ví dụ.

Hướng dẫn gồm năm phần:

Nó có sẵn ở dạng sách ở đây: C # 4.0 in a Nutshell (chương 23 và 24)


1
+1, đây là tài liệu tham khảo "đi đến" thông thường của tôi để phân luồng / đồng thời / song song trong .NET
Matthew King


1

Hiện tại có các tiện ích luồng trong tiêu chuẩn C ++. Vì vậy, nếu bạn muốn tìm hiểu về C ++, tôi khuyên bạn nên đọc một bài đánh giá đơn giản về tính năng ngôn ngữ mới trước khi chuyển sang một hướng dẫn phân luồng chung. Sau đó quay lại và xem xét các tiêu chuẩn chi tiết hơn sau.

Trong thực tế, xâu chuỗi là một trong những điều mà hầu hết mọi người nghĩ rằng họ hiểu, nhưng không. Tôi đã đi đến một cuộc nói chuyện từ một nhà nghiên cứu phân tích tĩnh, người đã xác định các điều kiện chủng tộc trong cơ sở dữ liệu nghiên cứu của IBM (Java), trong một hệ thống tệp linux (C) và trong một số dự án cao cấp khác. Một số dự án được viết bởi các chuyên gia có uy tín trong việc đồng thời và phân luồng. Xin lưu ý rằng việc tạo mã an toàn cho luồng là khó khăn và khoảng cách kiến ​​thức không chỉ dành riêng cho những người nhận ra nó.

Mặc dù nó sẽ không trực tiếp giúp bạn trong lập trình trò chơi, tôi khuyên bạn nên xem một số hướng dẫn về Bộ KH & ĐT (xin lỗi, không có khuyến nghị cụ thể nào). Mặc dù có vẻ khó để viết mã đồng thời chính xác với các luồng, nhưng có vẻ khá dễ dàng để thực hiện với việc truyền thông điệp. Một cách gián tiếp, hy vọng là việc khám phá các mô hình đồng thời khác nhau sẽ giúp quá trình suy nghĩ của bạn về cấu trúc mã của bạn được an toàn theo luồng.


1

Để tìm hiểu về tương tranh, hãy sử dụng ngôn ngữ được thiết kế cho tương tranh. Golang là một lựa chọn tốt vì nó có hỗ trợ tích hợp cho đồng thời và cú pháp giống như C giúp ngôn ngữ dễ học đối với hầu hết các lập trình viên.

Nó có thông điệp truyền qua, mutexes, vv bao gồm hầu hết tất cả các nhu cầu đồng thời của bạn và có tương đương phức tạp hơn trong các ngôn ngữ khác.

Ví dụ: nhận một int từ một luồng khác thành biến abằng MPI trong C:

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

Nhận một int thành biến a từ một luồng (người dùng) khác trong go:

a := <-c

Để học đi trong thực tế, hãy xem chuyến tham quan, nơi bạn có thể viết, biên dịch và chạy mã đi trong trình duyệt của mình.

tour.golang.org

Để bỏ qua phần đồng thời

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

Giáo sư cũ của tôi đã tổ chức một khóa học ngắn rất phổ biến cho sinh viên CS năm thứ nhất về chủ đề đồng thời. Để nhanh chóng, nhưng kỹ lưỡng, giới thiệu về đồng thời là gì, tôi chắc chắn khuyên bạn nên đọc phần này.

Nguyên tắc cơ bản của lập trình đồng thời

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.