2010-05-22 24 views
5

Mam starszy kod, który muszę poprawić ze względu na wydajność. Moja aplikacja składa się z dwóch plików wykonywalnych, które wymagają wymiany określonych informacji. W starszym kodzie jeden exe zapisuje do pliku (nazwa pliku jest przekazywana jako argument do exe), a drugi plik wykonywalny najpierw sprawdza, czy taki plik istnieje; jeśli nie istnieje, sprawdza ponownie i kiedy go znajdzie, a następnie przejdzie do zawartości pliku. W ten sposób informacje są przesyłane między dwoma plikami wykonywalnymi. Sposób w jaki zbudowany jest kod, drugi plik wykonywalny kończy się sukcesem w pierwszej próbie.Jakie są wszystkie wady używania plików jako środka komunikacji między dwoma procesami?

Teraz muszę wyczyścić ten kod i zastanawiałem się, jakie są wady używania plików jako środka komunikacji, a nie jakiejś komunikacji między procesami, takich jak rury. Czy otwieranie i czytanie pliku jest droższe od rur? Czy są jakieś inne wady? I jak ważna jest według Ciebie degradacja wydajności.

Starsza wersja kodu jest uruchamiana zarówno w systemie Windows, jak i Linux.

Odpowiedz

3

pewne problemy z użyciem plików dla IPC są:

  • Co się dzieje, gdy proces (1) jest pisanie do pliku, kiedy proces (2) znajdzie? Aby obsłużyć tę sprawę, musisz mieć specjalną logikę.

  • Co się stanie, jeśli proces (1) chce wysłać kolejną wiadomość, podczas gdy proces (2) nadal czyta z pliku? (1) musiałby jakoś wykryć, że plik nie może być zapisany i czekać, aż będzie dostępny.

  • Pliki mogą stać się wąskim gardłem pod duże ilość ruchu wiadomości, zwłaszcza jeśli używasz tylko jednego pliku dla IPC.

Aby ustalić, czy we/wy pliku jest wąskim gardłem wydajności, musimy lepiej zrozumieć wysyłane wiadomości. Jak duże są, jak często są wysyłane, itp. W przeciwnym razie trudno jest ocenić, jaki wpływ mają one na twoją wydajność, jeśli w ogóle.

Powiedziałem, że w przeszłości używałem plików do przesyłania informacji między procesami, chociaż zwykle za każdym razem tworzone są nowe nazwy plików lub pliki będą używane do przesyłania dużych ilości danych, a mniejszy komunikat IPC będzie używany do sygnalizować, kiedy plik jest gotowy.

Moim zdaniem, chyba że masz powód do używania plików - takich jak przesyłanie dużych ilości danych - wolałbym tradycyjny mechanizm IPC, taki jak rury, gniazda, itp. Ale musiałbyś go wdrożyć ostrożnie, aby zrobić na pewno wszystko działa na obu platformach.

1

Jednym z problemów, z którymi często miałem do czynienia w tego rodzaju konfiguracjach, jest synchronizacja dostępu do pliku, np. jeśli pierwszy proces nadal zapisuje, gdy drugi plik próbuje odczytać lub odwrotnie. W zależności od Twoich wymagań może to prowadzić do różnego rodzaju złych zachowań.

Zawsze dobrze jest używać prawdziwego mechanizmu IPC, ale jeśli twoja aplikacja musi być wieloplatformowa, to naprawdę ogranicza twoje wybory.