Bonjour,
L'idée est relativement simple : je développe une application audio en C++ qui integre des plugins, sous forme de DLL, qui ne seraient pas de moi. En plus de perf en beton, je voudrais aussi une stabilité en beton, et c'est là que le bat blesse.
Mettons que je concoive, teste et optimise mon code de façon parfaite (j'ai dit "mettons" :-) ), meme dans ce cas, rien ne me met à l'abri d'un crash, par exemple typiquement, une violation d'acces mémoire, qui arriverait à l'intérieur d'un de mes plugins, ce qui aurait pour conséquence -désastreuse- de faire crasher l'appli, n'est ce pas ?
Bon maintenant, je me suis dit que je pourrais lancer chaque plugin dans un processus séparé, en utilisant des named pipes, et vu je contrôle de toutes façons ce que j'envoie et ce que je recois du plugin, ce ne serait pas trop problématique techniquement. En cas de crash, le process crashe, certes, mais l'appli elle reste debout.
- Premiere question : sachant que c'est de l'audio, on parle de delais de l'ordre de la milliseconde, j'ai peur que les pipes et autres IPC ne soient trop lentes ! Ok avec un plugin, mais si j'en ai 10, donc 10 process, je risque d'avoir un overhead de malade non ?
- 2eme question : je me demandais si, avec du multithreading "tout simple", il etait possible d'arriver à un resultat semblable, c'est à dire que si une thread fait des betises, on puisse limiter les degats et empecher ainsi l'appli entiere de crasher ? Je ne pense pas car, apres tout, les threads partagent beaucoup de choses, mais bon sait on jamais ?
- Derniere question : savez vous comment je peux en gros, estimer l'overhead induit par du multiprocess, en fonction de la quantité de données (ou plutot de leur débit) à transferer entre les process ?
Ce sont des questions assez techniques, j'en conviens, mais j'ai un peu lu les autres sujets de ce forum et les gens ici m'ont l'air assez pointus. Je tente donc ma chance en esperant une reponse.
Bien cordialement,
D.
EDIT: J'utilise actuelement une API appelée Juce, ainsi que Boost pour que mon code reste indépendant de la plateforme (Win, Linux et Mac OS, pas d'architecture exotique :-) ). Aussi j'aimerai bien si c'est possible, eviter d'ajouter tout type de code spécifique à une plateforme donnée.
Partager