2010-05-22 17 views
5

Tôi có mã kế thừa mà tôi cần cải thiện vì lý do hiệu suất. Ứng dụng của tôi bao gồm hai tệp thực thi cần trao đổi thông tin nhất định. Trong mã kế thừa, một exe ghi vào một tệp (tên tệp được chuyển thành đối số để thoát) và tệp thực thi thứ hai đầu tiên sẽ kiểm tra xem tệp đó có tồn tại hay không; nếu không tồn tại các kiểm tra một lần nữa và khi nó tìm thấy nó, sau đó đi vào để đọc nội dung của tập tin. Bằng cách này thông tin được chuyển giao giữa hai tập tin thực thi. Cách mã được cấu trúc, tệp thực thi thứ hai thành công trên lần thử đầu tiên.Tất cả những bất lợi của việc sử dụng các tập tin như một phương tiện giao tiếp giữa hai quy trình là gì?

Bây giờ tôi phải làm sạch mã này và tự hỏi nhược điểm của việc sử dụng tệp như một phương tiện giao tiếp thay vì một số thông tin liên lạc quá trình như đường ống.Là mở và đọc tệp đắt hơn đường ống? Có bất kỳ nhược điểm nào khác không? Và làm thế nào đáng kể bạn nghĩ sẽ là sự xuống cấp hiệu suất.

Mã cũ được chạy trên cả hai cửa sổ và linux.

Trả lời

3

Một số vấn đề với việc sử dụng các file cho IPC là:

  • gì xảy ra khi quá trình (1) được viết vào tập tin khi quá trình (2) tìm thấy nó? Bạn cần phải có logic đặc biệt để xử lý trường hợp này.

  • Điều gì xảy ra nếu quá trình (1) muốn gửi một thư khác trong khi quá trình (2) vẫn đang đọc từ tệp? (1) sẽ phải bằng cách nào đó phát hiện rằng các tập tin không thể được ghi vào, và chờ cho đến khi nó có sẵn.

  • Tệp có thể trở thành nút cổ chai theo số lớn lượng lưu lượng thư, đặc biệt nếu bạn chỉ sử dụng một tệp cho IPC.

Để xác định xem tệp I/O có phải là nút cổ chai hiệu suất cho bạn hay không, chúng tôi cần hiểu thêm về thư bạn đang gửi. Chúng lớn như thế nào, tần suất chúng được gửi đi, v.v. Nếu không, sẽ rất khó để đánh giá ảnh hưởng của chúng đối với hiệu suất của bạn, nếu có.

Điều đó nói rằng, trước đây tôi đã sử dụng tệp để chuyển thông tin giữa các quy trình, mặc dù tên tệp mới sẽ được tạo mỗi lần hoặc tệp sẽ được sử dụng để chuyển lượng lớn dữ liệu và thông báo IPC nhỏ hơn sẽ được sử dụng để tín hiệu khi tệp đã sẵn sàng. Theo tôi, trừ khi bạn có lý do để sử dụng các tệp - chẳng hạn như chuyển một lượng lớn dữ liệu - tôi muốn có cơ chế IPC truyền thống như đường ống, ổ cắm, v.v. Nhưng bạn sẽ phải thực hiện nó một cách cẩn thận để thực hiện chắc chắn mọi thứ hoạt động trên cả hai nền tảng.

1

Một vấn đề mà tôi thường gặp phải với các loại thiết lập như vậy là đồng bộ hóa quyền truy cập vào tệp, ví dụ: nếu quá trình đầu tiên vẫn đang ghi khi tệp thứ hai cố đọc hoặc ngược lại. Tùy thuộc vào yêu cầu của bạn, điều này có thể dẫn đến tất cả các hành vi xấu.

Thật tuyệt khi sử dụng cơ chế IPC thực nhưng nếu ứng dụng của bạn phải là nền tảng chéo, điều đó thực sự hạn chế lựa chọn của bạn.

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