Il n'y en a pas de meilleur.
Mais, souvent, on préfère utiliser les sockets (c'est tout simplement, pour schématiser beaucoup: communiquer via internet). Comme ça, deux programmes sur la même machine peuvent communiquer ensemble, mais également 2 programmes sur des machines distantes, comme ton browser Web et le Apache de hardware.fr.
D'ailleurs, les communications via sockets sont souvent optimisées pour ne pas traverser toute la pile TCP/IP si tu restes sur la même machine.
Par contre, si tu as besoin d'échanger beaucoup de données entre 2 programmes et que ça aille le plus vite possible (ce qui est finalement pas si fréquent que ça), la mémoire partagée est ce qu'il y a de plus rapide (mais aussi de plus pointu, puisqu'il faut gérer les synchronisations à la main).
Pour le reste, je te laisse chercher, google est ton ami.