7

Tôi đang trong giai đoạn thiết kế của ngôn ngữ lập trình, hiện đang suy nghĩ về các khía cạnh đồng thời. Tôi cần tìm ra một số consistency model, tức là cách dữ liệu được xử lý bởi các quy trình đồng thời được lập trình bằng ngôn ngữ này.Chọn một mô hình nhất quán cho ngôn ngữ lập trình đồng thời

Có hai tiêu chí quan trọng:

  • Tôi thích tính dễ sử dụng hơn hiệu suất, miễn là các mô hình thống nhất cho phép mở rộng quy mô tốt,
  • tôi không thể sử dụng một mô hình thống nhất rằng cần ngăn chặn hoặc động cấp phát bộ nhớ.

hai ứng cử viên của tôi ngay bây giờ là non-blocking phần mềm bộ nhớ giao dịch ở một bên, và copy thông điệp thông qua ngữ nghĩa mà không chia sẻa la Erlang.

Tôi đặc biệt lo lắng về tính dễ sử dụng, vì vậy tôi sẽ trình bày các đối số chính mà tôi có đối với từng mô hình trong số hai mô hình này.

Trong trường hợp STM, người dùng phải hiểu những thành viên nào của lớp phải thay đổi phần nguyên tử và phân tích chính xác các phần mã nguyên tử. Chúng phải được viết để chúng có thể được lặp lại một số lần không xác định, chúng có thể không thực hiện bất kỳ I/O nào, có thể không gọi một số chức năng nước ngoài, v.v. Tôi thấy điều này dễ dàng cho một lập trình viên không có kinh nghiệm.

Đồng thời Erlang không chia sẻ các đối tượng mà chúng gửi đi, vì chúng không thể thực hiện bất kỳ cấp phát bộ nhớ nào và do đó các đối tượng phải "di chuyển" từ một quá trình này qua hàng đợi khác. Người dùng phải biết rằng nếu một quy trình thời gian thực có hai tham chiếu đến một đối tượng, cả hai tham chiếu đó sẽ bị xóa nếu anh ta gửi đối tượng đến một tiến trình khác. Đây là một chút giống như con trỏ yếu có thể có hoặc không có giá trị tại bất kỳ điểm sử dụng nào: nó có thể gây ngạc nhiên.

Tôi có xu hướng hướng tới mô hình thứ hai vì nó có vẻ dễ hiểu hơn và nó tự nhiên mở rộng đến các hệ thống phân tán.

Bạn đề xuất điều gì?

  • Bộ nhớ giao dịch phần mềm không chặn?
  • Đồng thời kiểu Erlang với những khó khăn về ràng buộc thời gian thực?
  • Điều gì đó khác mà tôi chưa xem xét?

Trả lời

2

Tôi đã làm một chút với Erlang, không nhiều, nhưng mặc dù thông điệp chia sẻ không có gì là mô hình mới mẻ đối với tôi, tôi sẽ nói rằng nó rất dễ hiểu trong điều kiện trực quan và vật lý.

Nếu ngôn ngữ của bạn được phổ biến rộng rãi, tôi sẽ nói rằng phong cách Erlang là ít nhất một cái gì đó tôi có thể quấn quanh tâm trí của tôi mà không có quá nhiều công việc. Tôi cho rằng những người khác sẽ có thể học và áp dụng loại mô hình đó dễ hơn phương pháp STM. Tôi không nói từ kinh nghiệm, nhưng có vẻ như mô hình Erlang sẽ dễ thực hiện hơn, vì nó không phải đối phó với rất nhiều hoạt động bộ nhớ mức thấp, bạn chỉ chia sẻ không có gì và quản lý bộ nhớ đi qua giữa các quá trình.

1

Tôi không nghĩ rằng một mô hình duy nhất sẽ giải quyết tất cả các vấn đề và không tương thích. Ví dụ: một ứng dụng có thể sử dụng giao diện truyền thông báo cho một số phần của chương trình và STM cho các phần khác và khóa trực tiếp cho các phần cụ thể khác.

Bạn cũng có thể xem Tham gia tính toán (JoCaml, Boost.Join), có thể được coi là một biến thể của giao diện truyền thông báo.

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