2010-08-05 36 views
6

Tôi đang làm việc trên một dự án nhỏ liên quan đến việc tạo ra một chương trình điều khiển dự định chạy trong nền bởi một sản phẩm lớn hơn.Thất bại nhanh hoặc không an toàn?

Chương trình có nghĩa vụ phải nói chuyện với sản phẩm chính (IP21) trên một mặt và hoạt động như một máy chủ, xử lý một số máy khách, mặt khác.

Tôi đã bắt đầu nghiên cứu kiến ​​trúc và đưa ra một thứ dựa trên sự kiện xử lý reactor như kết nối hoặc sự kiện được tạo bởi sản phẩm chính. Phần xử lý của khách hàng được xử lý trong các luồng riêng biệt, một cho mỗi khách hàng.

Nhưng tôi không đồng ý với một đồng nghiệp của tôi về kiến ​​trúc này. Anh ta nói tôi nên đặt lò phản ứng và vài thành phần khác chạy trong sợi chính, trong một sợi riêng biệt. Các chủ đề chính nên càng đơn giản càng tốt. Tôi sẽ làm điều đó để chương trình không sụp đổ nếu phần này làm. Anh ta nói tốt hơn là nên có một chương trình hoàn toàn phi chức năng hơn là một vụ tai nạn dữ dội.

Tôi nói sẽ tốt hơn nếu không nhanh. Nếu điều này (quan trọng) một phần của chương trình bị treo thì không có lý do gì để cố gắng giữ nó sống. Hơn nữa tôi tin rằng nó có thể gây rắc rối cho người dùng; Anh ta sẽ nhận thấy có điều gì đó sai, nhưng nếu anh ấy nhìn vào danh sách nhiệm vụ (sản phẩm của chúng tôi như một công cụ quản lý tác vụ liệt kê các nhiệm vụ phải chạy và cho phép dễ dàng theo dõi một tác vụ bị rơi), anh ấy sẽ không nhận thấy chương trình bị lỗi!

Tôi hy vọng bạn có thể giúp chúng tôi bằng cách đưa ra một số tranh cãi về một bên này hay cách khác;)

chỉnh sửa: cảm ơn vì câu trả lời của bạn nhưng những gì chúng tôi không đồng ý về là về tính hữu ích của việc đưa các lò phản ứng và một vài các thành phần khác trong một chủ đề riêng biệt trong trường hợp có vấn đề liên quan đến lập trình nghiêm trọng (một segfault/deadlock/< chèn vấn đề quan trọng ở đây >). Tôi nghĩ rằng nó sẽ là cả hai nguy hiểm và vô nghĩa để có chương trình chạy mà không có chủ đề này.

+0

sử dụng mô hình Proactor :) http://en.wikipedia.org/wiki/Proactor_pattern – garik

Trả lời

1

Trong khi chỉnh sửa câu hỏi tôi tìm thấy this answer trên SO, tôi nghĩ, cũng trả lời câu hỏi này.

0

Phụ thuộc vào những gì bạn cần làm và mức độ quan trọng của nó. Nếu bạn có thể đối phó với các bước nhất định thất bại trong khi những người khác làm việc, sau đó thất bại những bước và tiếp tục đi. (Hãy suy nghĩ một cái gì đó giống như gửi thư, nếu một tin nhắn không gửi được, bạn không muốn nó giữ phần còn lại không vượt qua được.) Chỉ thất bại toàn bộ quá trình nếu thất bại của một bước khiến phần còn lại không thể thực hiện được một cách đáng tin cậy.

3

Sử dụng Proactor mẫu :)

Không an toàn. Nhưng nó phụ thuộc vào nhiệm vụ (quan trọng hay không) và lòng trung thành của người dùng. Ổn định. Bạn đã mất một người dùng hoặc tất cả.

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