Se connecter avec
S'enregistrer | Connectez-vous

Communication Inter-Process

Dernière réponse : dans Programmation

Je débute dans le monde de l'IPC (Inter-Process Communication). Pour faire dialoguer 2 applications distantes sous Windows, j'ai utilisé le mécanisme des pipes nommées, et ça marche très bien.

Dans l'optique d'aller plus loin, je voudrais avoir l'avis d'un spécialiste sur l'aspect performances. Est-ce que les pipes sont plus/moins rapide que les sockets?
J'ai l'impression que les sockets sont plus complexes à utiliser, mais qu'elle présentent l'intérêt de faire dialoguer des applis sous des OS différents. Mais les sockets permettent-elles aussi une commnication plus efficace, plus performante?

Merci,
Eric

Autres pages sur : communication inter process

Lassé par la pub ? Créez un compte

Meilleure solution

Expert Programmation

Salut, cher ami.

Que voilà une question intéressante !


En revanche, qu'il est saugrenu de faire des tubes nommés sous Windows. :lol: 
Le tube, c'est l'art de communiquer par excellence sous UNIX, qu'il soit anonyme ou nommé, où il est redoutable d'efficacité, les entrées/sorties étant gérées nativement par le système, par les fonctions standards.

La communication par socket (si j'ai traduit pipe par tube, je me garderai bien de traduire socket) est encore une innovation du monde UNIX. Son implémentation diffère un peu en fonction du protocole, mais colle plus ou moins au modèle modèle OSI, et à ses 7 couches
  1. Application
  2. |
  3. v
  4. Présentation
  5. |
  6. v
  7. Session
  8. |
  9. v
  10. Transport
  11. |
  12. v
  13. Réseau
  14. |
  15. v
  16. Liaison
  17. |
  18. v
  19. Physique
  20.  
  21. |
  22. |
  23. |
  24. |
  25. v
  26.  
  27. Physique
  28. |
  29. v
  30. Liaison
  31. |
  32. v
  33. Réseau
  34. |
  35. v
  36. Transport
  37. |
  38. v
  39. Session
  40. |
  41. v
  42. Présentation
  43. |
  44. v
  45. Application

Beaucoup de traitements, de contrôles et de vérifications, voire d'acquittements et de comptes-rendus sont nécessaires pour implémenter une communication par socket.

Donc une communication par tube est normalement bien plus rapide mais ne concerne que les processus d'un même système.
En revanche, la communication par socket est bien plus souple et par là universelle. C'est elle qui assure la communication sur Internet par exemple.

Ça, c'est la théorie. Parce que pour implémenter le bon principe des tubes nommés UNIX, les ingénieurs de Microsoft ont codé un système client-serveur qui se rapproche énormément de la mécanique socket :/  :sarcastic:  Donc, il ne s'agit là que d'une imitation dans l'interface. Je suppose que toute la mécanique des sockets n'est pas reproduite et qu'il en résulte quand même des gains en performance.

Pour info, outre les tubes et les sockets, on communique aussi entre processus par mémoire partagé+sémaphore.

Cet avis te semble-t-il pertinent ?

Ton avis est plus que pertinent, cher ami, j'apprécie :) 
J'ai bien pensé à la communication par mémoire partagée, mais comme il s'agit pour moi de faire dialoguer 2 applications sur 2 machines différentes de mon réseau local, j'ai abandonné cette option. Autant que je sache, la mémoire partagée ne peut fonctionner que sur une et même machine, n'est-ce pas?

Eric
Expert Programmation

Tu parles au départ de communication inter-processus (IPC).
Donc j'ai fait un petit tour de ce qui existe.

Pour des machines distinctes, le choix se restreint. Viendra ensuite peut-être d'autres restrictions dues au type de réseau, (local/global, hétérogène) pour ne laisser qu'une possibilité : les sockets.
Lassé par la pub ? Créez un compte