Tiếp theo trong Đồng thời


9

Trong năm qua tôi đã làm việc rất nhiều về đồng thời trong Java và đã xây dựng và làm việc trên nhiều gói đồng thời. Vì vậy, về mặt phát triển trong thế giới đồng thời, tôi khá tự tin. Hơn nữa tôi rất quan tâm để tìm hiểu và hiểu thêm về lập trình đồng thời.

Nhưng tôi không thể tự trả lời cái gì tiếp theo? Tôi nên học thêm hoặc làm gì để kế thừa nhiều kỹ năng hơn liên quan đến xử lý Đa lõi. Nếu có bất kỳ cuốn sách hay nào (đọc và thưởng thức 'đồng thời trong thực tế' và 'lập trình đồng thời trong java') hoặc tài nguyên liên quan đến xử lý Đa lõi để tôi có thể chuyển sang cấp độ tiếp theo?


Nếu bạn đã bỏ lỡ nền tảng lý thuyết, hãy tìm hiểu chúng ngay bây giờ: en.wikipedia.org/wiki/Pi-calculus
SK-logic

Câu trả lời:


8

Tuyên bố miễn trừ trách nhiệm - Tôi không phải là chuyên gia đồng thời, nhưng đồng tác giả của tôi là, tôi đang nói xấu anh ấy :-)

Vì bạn đã đọc sách của Doug Lea và Brian Goetz, nên bạn chắc chắn đã bao quát những tài liệu tốt nhất hiện nay.

Đi tiếp, có các cải tiến đồng thời mới trong Java 7. Đáng chú ý nhất là khung Fork / Tham gia và các API NIO không đồng bộ mới.

Java 8 sẽ giới thiệu các cải tiến đồng thời hơn nữa với các bộ sưu tập lambdas / song song.

Một điều khác cần nghiêm túc xem xét là các cách khác để đối phó với sự tương tranh. Nói thẳng ra, cách tiếp cận 'khóa đối tượng có thể thay đổi' của Java luôn luôn dễ bị lỗi, bất kể API được cải thiện bao nhiêu. Vì vậy, tôi khuyên bạn nên xem mô hình diễn viên của Scala và STM của Clojure như là những cách khác để giải quyết các vấn đề tương tranh trong khi duy trì khả năng tương tác với Java.

[cảnh báo -> tự quảng cáo] Vì vậy, tôi sẽ tự nhiên giới thiệu cuốn sách sắp tới của chúng tôi, Nhà phát triển Java có căn cứ , bao gồm tất cả những điều tôi đã đề cập ở trên: -). [/ cảnh báo]

Tôi quên rằng, Groovy cũng có một lib Gpars rất được khuyến khích, mặc dù vậy tôi vẫn chưa sử dụng nó.


Hà cảm ơn rất nhiều về cuốn sách :). Bạn cũng có thể vui lòng đề xuất một số cuốn sách hay khác vì cuốn sách được đề xuất của bạn không có sẵn ở đây (phiên bản địa phương) ở Ấn Độ .PS: Đồng thời trong thực tiễn là một viên ngọc của một cuốn sách
Jatin

@Martijn, gọn gàng! Tôi đã tò mò về Groovy và Scala một thời gian và muốn chơi xung quanh nó để tìm hiểu thêm. Là cuốn sách của bạn hướng đến người mới bắt đầu trong các ngôn ngữ này hoặc nó giả định kinh nghiệm trước?
maple_shaft

@Jatin Puri - Tôi thực sự không biết bất kỳ tiêu đề nào khác về 'đồng thời trong thực tế' và 'lập trình đồng thời trong java', có tiêu đề O'Reilly của 'Chủ đề Java' của Henry Wong, nhưng đó là về nó.
Martijn Verburg

@maple_shift - Nó nhắm đến người mới bắt đầu :-)
Martijn Verburg

2

Ngôn ngữ lập trình D cung cấp hai mô hình cho lập trình đồng thời, cả hai đều có cách sử dụng và khá thú vị.

std.concurrency cung cấp tin nhắn đi qua mà không chia sẻ bộ nhớ mặc định. Tất cả các biến toàn cục và tĩnh trong D là thread-địa phương theo mặc định và spawnsendkhông cho phép gửi tin nhắn có chứa có thể thay đổi con trỏ gián tiếp. Chia sẻ hạn chế có thể thu được thông qua sharedtừ khóa, đòi hỏi phải kiểm tra bổ sung bởi hệ thống loại. Bên ngoài phương ngữ an toàn của ngôn ngữ, bạn có thể buộc các biến toàn cục / chia sẻ theo kiểu C / Java cổ điển bằng cách sử dụng __gsharedtừ khóa, nhưng tất cả các cược đã tắt khi còn an toàn cho cuộc đua. Mô hình này được trình bày chi tiết trong một chương miễn phí của cuốn sách "Ngôn ngữ lập trình D" của Andrei Alexandresu.

std.metism ít an toàn hơn nhưng về mặt nào đó linh hoạt hơn std.concurrency và đặc biệt hướng tới dữ liệu đa lõi và song song nhiệm vụ để tăng thông lượng xử lý dữ liệu thay vì đồng thời trong trường hợp chung. Nó có tính năng lặp vòng lặp song song, gọi hàm không đồng bộ, giảm song song, v.v. Nó cung cấp các cơ chế để giúp viết mã an toàn chủng tộc dễ dàng hơn nhưng làm như vậy vẫn đòi hỏi một mức độ kỷ luật.

Một cuộc thảo luận kỹ lưỡng hơn về hai mô hình đa luồng chính trong D có thể được tìm thấy trong bài viết gần đây của tôi về chủ đề này.


2

Tôi thực sự khuyên bạn nên đi và hãy xem Clojure

Cách tiếp cận đồng thời rất mới lạ và theo quan điểm của tôi là một bước tiến đáng kể về những gì bạn thấy trong Java và hầu hết các ngôn ngữ khác. Một số điểm chính:

  • Danh tính và trạng thái được phân tách - OOP tuân thủ nhận dạng đối tượng với trạng thái hiện tại của nó dưới dạng các biến thành viên có thể thay đổi. Clojure tách biệt nghiêm ngặt danh tính (tài liệu tham khảo được quản lý) và trạng thái (cấu trúc dữ liệu bất biến) theo cách đơn giản hóa đáng kể sự phát triển của các chương trình đồng thời đáng tin cậy.
  • Cấu trúc dữ liệu bất biến liên tục - bởi vì mọi thứ đều bất biến, bạn có thể chụp ảnh dữ liệu / trạng thái bất cứ lúc nào và yên tâm rằng nó sẽ không bị biến đổi bên dưới bạn. Nhưng tốt hơn thế - chúng là các cấu trúc dữ liệu liên tục chia sẻ dữ liệu với các phiên bản trước. Do đó, các hoạt động gần với O (1) hơn là O (n) mà bạn sẽ trả cho chiến lược sao chép trên ghi đối với dữ liệu không thay đổi.
  • Bộ nhớ giao dịch phần mềm - thay vì sử dụng khóa, bạn chỉ cần đặt mã trong một khối (dosync ...) và chúng sẽ tự động chạy như một giao dịch. Không có nguy cơ bế tắc, và không cần phải phát triển các chiến lược khóa phức tạp. Đây là một chiến thắng lớn, đặc biệt là khi kết hợp với các cấu trúc dữ liệu bất biến ở trên. Thực tế, Clojure thực hiện kiểm soát đồng thời nhiều phiên bản trong STM của nó.
  • Mô hình lập trình chức năng được sử dụng để làm cho việc viết mã đồng thời đáng tin cậy dễ dàng hơn nhiều. Về cơ bản nếu bạn có một cấu trúc dữ liệu bất biến, chạy nó thông qua một hàm thuần túy và xuất ra một cấu trúc dữ liệu bất biến khác, thì mã của bạn được đảm bảo an toàn cho đồng thời.

Tôi khuyên bạn nên xem video này như một lời giới thiệu


1

Hãy xem ngôn ngữ Scala, ngôn ngữ mở rộng Java và chạy trên JVM. Nó mượn khái niệm "Diễn viên" từ Erlang và cung cấp khả năng tốt để xử lý các lỗi đồng thời.


1

Nếu bạn muốn đưa nó lên một cấp độ hoàn toàn mới, bạn có thể muốn xem xét lập trình với CUDA .

Điều này cho phép bạn phân phối thuật toán của mình qua hàng trăm lõi xử lý trên card đồ họa thay vì vài lõi CPU chính. Thậm chí còn có các ràng buộc ngôn ngữ rõ ràng giúp tăng tốc các ngôn ngữ cấp cao như python bằng cách sử dụng các kỹ thuật GPGPU tương đối dễ dàng .


@Chiron - Thành thật mà nói, tôi đã ngạc nhiên rằng không ai khác đã đề cập đến nó.
Đánh dấu gian hàng

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.