14

Làm thế nào scala có thể viết các chương trình đa luồng dễ dàng hơn trong java? Scala có thể làm gì (java có thể không) để tạo thuận lợi cho việc tận dụng nhiều bộ vi xử lý?Scala có ưu điểm gì so với Java để lập trình đồng thời?

+4

Java có thể làm bất cứ điều gì Scala có thể làm và ngược lại. Cả hai đều chạy trong JVM, và chúng đều là Turing-complete, do đó, theo định nghĩa, người ta có thể làm những việc tương tự như người khác. Sự khác biệt là điều dễ dàng hơn hoặc tự nhiên hơn trong một ngôn ngữ so với ngôn ngữ kia. – cHao

+0

@cHao @Zan đã chỉnh sửa câu hỏi để giải quyết vấn đề chặt chẽ hơn. :) –

Trả lời

6

không có gì Scala làm điều đó Java không. Đó sẽ là ngớ ngẩn. Scala chạy trên cùng một JVM mà Java thực hiện.

Điều gì Scala làm làm là giúp dễ dàng viết, dễ dàng hơn để giải thích và dễ dàng gỡ lỗi chương trình nhiều chuỗi hơn.

Các bit tốt của Scala cho đồng thời là tập trung vào các đối tượng bất biến, thông điệp truyền đi và các diễn viên của nó.

Tính năng này cung cấp cho bạn dữ liệu chỉ đọc an toàn theo chủ đề, cách dễ dàng để chuyển dữ liệu đó đến các chủ đề khác và dễ dàng sử dụng nhóm chủ đề.

+2

Tôi muốn thêm các bao đóng vào nó. Nó thực sự làm cho rất nhiều thứ dễ dàng hơn. –

+1

Tôi cũng sẽ thêm các liên kết được giới hạn thực sự thay đổi trường chơi để viết các chương trình đồng thời. Hy vọng rằng sự hỗ trợ thư viện tuyệt vời sẽ xuất hiện trong vài tháng tới. – jsuereth

13

Các quy tắc để đồng thời là

1 tránh nó nếu bạn có thể

2 cổ phiếu không có gì nếu bạn có thể đối tượng

3 phần bất biến nếu bạn có thể

4 phải rất cẩn thận (và may mắn)

Đối với quy tắc 2 Scala giúp bằng cách cung cấp thư viện chuyển thư được tích hợp độc đáo ra khỏi hộp dưới dạng diễn viên.

Đối với quy tắc 3, Scala giúp mọi thứ không thay đổi theo mặc định.

Đối với quy tắc 4 Cú pháp linh hoạt của Scala cho phép tạo DSL nội bộ làm cho nó dễ dàng hơn và ít phức tạp hơn để thể hiện những gì bạn cần một cách tự tin. tức là ít hơn cho những bất ngờ (nếu được thực hiện tốt)

+1

Tôi nghĩ rằng # 1 đang ngày càng trở nên khó khăn để làm. Tôi muốn nói rằng bằng cách sử dụng một khuôn khổ, ví dụ: map-reduce hoặc một số thư viện fork-join, có thể giúp bạn viết các chương trình đồng thời mà không có cảm giác đồng thời. – jsuereth

+0

Tôi đồng ý. Nó chắc chắn trả tiền để kiểm tra cẩn thận nhu cầu của bạn và chọn các mẫu tương tranh phù hợp với những điều này. Và sau đó sử dụng một thư viện/khung được gỡ rối để triển khai thực hiện những điều này. –

+1

# 1 Cần có danh sách; thay vào đó, chúng ta nên tích cực tìm cách khai thác nhiều lõi CPU có sẵn trên các máy tính hiện đại. –

12

Nếu một người lấy Akka làm nền tảng cho điện toán đồng thời (và phân tán), người ta có thể cho rằng sự khác biệt duy nhất là công cụ bình thường phân biệt Scala với Java, vì Akka có cả Java và ràng buộc Scala cho tất cả các cơ sở của nó.

Các vấn đề liên quan