12
votes

Les processus séquentiels de communication sont-ils déjà utilisés dans de grands programmes multi-filetés C ++?

J'écris actuellement un grand programme multi-fileté C ++ (> 50k LOC).

En tant que tel, j'ai été motivé à lire beaucoup sur diverses techniques pour la gestion du code multi-threadé. Une théorie que j'ai trouvée être assez cool est:

http://fr.wikipedia.org/wiki/communicatinal_processes

Et il est inventé par un gars légèrement célèbre, qui a fait d'autres contributions non triviales à la programmation simultanée.

Cependant, le CSP est utilisé dans la pratique? Quelqu'un peut-il indiquer une application importante écrite dans un style CSP?

merci!


2 commentaires

lol @ 50k local étant grand


PYSCP ressemble à une mise en œuvre pratique viable du CSP. Quelques exemples sont inclus. Cependant, pour le moment, il serait utilisé uniquement à des fins éducatives.


9 Réponses :


0
votes

Ce style est omniprésent sur UNIX où de nombreux outils sont conçus pour traiter de la norme en standard. Je n'ai aucune connaissance de première main de grands systèmes qui sont construits de cette façon, mais j'ai vu de nombreux petits systèmes à découverte

par exemple cette ligne de commande simple utilise (au moins) 3 processus. xxx


3 commentaires

Oui, mais le pipeline n'est pas entre les processus et non entre les threads comme le PO est question.


Le papier qu'il relie concerne les processus.


Le CSP en tant que théorie ne se soucie pas de la distinction entre les threads et les programmes. La question telle que indiquée reste valide: La théorie du CSP est-elle utilisée dans la pratique, dans des programmes multi-filetés?



0
votes

Ce système n'est que modérément dimensionné, mais j'ai écrit un processeur de protocole qui abrite et interprète des couches successives de protocole dans un message qui a utilisé un style très similaire à celui-ci. C'était un système piloté par événement utilisant quelque chose qui s'apparente à un filetage coopératif, mais j'aurais pu utiliser de multiples-lames assez facilement avec quelques modifications supplémentaires.

Le programme est propriétaire (malheureusement), je ne peux donc pas montrer le code source.

À mon avis, ce style est utile pour certaines choses, mais généralement mieux mélangé à d'autres techniques. Il existe souvent une partie centrale de votre programme qui représente un goulot d'étranglement de traitement et applique diverses techniques d'augmentation de la concurrence de la concurrence, il est susceptible de donner les plus gros gains.


0 commentaires

0
votes

Microsoft a eu une technologie appelée Activemovie (si je me souviens bien) qui a fait du traitement séquentiel sur les flux audio et vidéo. Les données ont été passées d'un filtre à un autre pour passer de l'entrée au format de sortie (et source / évier). Peut-être que c'est un exemple pratique ??


1 commentaires

Pas vraiment, un thread est utilisé pour pousser les données tout au long de la chaîne de filtres.



6
votes

oui et non. L'idée de base de csp est utilisée un peu. Par exemple, les files d'attente de fil-sécurité sur une forme ou une autre sont fréquemment utilisées comme mécanisme de communication principal (souvent seulement) pour construire un pipeline à partir de processus individuels (fils).

HOARE Être hoare, cependant, il y a beaucoup plus à sa théorie originale que cela. Il a inventé une notation pour parler des processus, défini un ensemble spécifique de signaux pouvant être envoyé entre les processus, etc. La notation a depuis été affinée de différentes manières, un peu de travail mettant en évidence divers aspects, etc.

L'application de ce modèle relativement formel de CSP (par opposition à l'idée générale) est beaucoup moins fréquente. Il a été utilisé dans quelques systèmes où une grande fiabilité était considérée comme extrêmement importante, mais peu de programmeurs semblent intéressés par l'apprentissage (encore une autre) notation de conception formelle.

Lorsque j'ai conçu des systèmes tels que cela, j'ai généralement utilisé une approche moins rigoureuse, mais (du moins pour moi) plutôt plus facile à comprendre: un diagramme assez simple, avec des boîtes représentant les processus et les flèches représentant la lignes de communication. Je doute que je puisse vraiment offrir beaucoup dans la voie d'une preuve de la plupart des dessins (et je vais admettre que je n'ai pas conçu de type énorme de cette façon), mais cela a fonctionné raisonnablement bien .


0 commentaires

9
votes

CSP, comme un calcul de processus, est fondamentalement une chose théorique qui nous permet de formaliser et étude certains aspects d'un programme parallèle.

Si vous voulez plutôt une théorie qui vous permet de build programmes distribués, alors vous devriez jeter un oeil à parallèle programmation structurée .

Programmation structurelle parallèle est la base du HPC actuelle (haute performance de calcul) la recherche et vous fournit une méthodologie sur la façon d'aborder et de concevoir des programmes parallèles (essentiellement, des organigrammes de communication des noeuds de calcul) et systèmes d'exécution < / em> pour les outils.

Une idée centrale dans la programmation structurée parallèle est celle de squelette algorithmiques , développé initialement par Murray Cole. Un squelette est une chose comme un modèle de conception parallèle avec un modèle de coût associé et (généralement) un système d'exécution qui le prend en charge. Un squelette modèles , étude et supports une classe d'algorithmes parallèles qui ont une certaine "forme".

A titre d'exemple notable, MapReduce (rendu populaire par Google) est juste une sorte de squelette qui adresse le parallélisme de données, où un calcul peut être décrit par une carte Phase (appliquer une fonction f à tous les éléments qui composent les données d'entrée), et une réduire phase (prendre tous les articles transformés et « combiner » les utilisant un opérateur associatif +).

Je trouve l'idée de la programmation parallèle structurée à la fois théorique et son utilité pratique, donc je vais vous proposer de donner un coup d'oeil à lui.

Un mot sur le multi-threading: depuis squelettes adresses parallélisme massif, le plus souvent, ils sont mis en œuvre en mémoire distribuée au lieu de partager. Intel a développé un outil, TBB , qui adresse multi-threading et (partiellement) suit le cadre parallèle de la programmation structurée. Il est une bibliothèque C ++, donc probablement vous pouvez simplement commencer à l'utiliser dans vos projets.


2 commentaires

La chose drôle est, csp est maintenant le mécanisme simultané le plus chaud utilisé dans la programmation :)


@NXQD: J'utilise la forme de Go de Go pendant 7 ans et je ne peux pas dire que ça s'en entraîne. Je ne sais pas si cela diffère du CSP, mais il y a beaucoup de défauts et de meilleures façons de faire des choses.



0
votes

L'article Wikipedia me ressemble à beaucoup de symboles drôles utilisés pour représenter des concepts un peu piétonniers. Pour des programmes très importants ou extensibles, le formalisme peut être très important de vérifier comment les processus (sous) sont autorisés à interagir.

Pour un programme de classe de 50 000 lignes, vous êtes probablement mieux préférable de l'archiver comme vous le voyez.

En général, les idées suivantes telles que celles-ci sont une bonne idée en termes de performance. Les threads persistants qui traitent les données des étapes auront tendance à ne pas contenir et exploiteront bien la localité de données. En outre, il est facile d'étendre les fils pour éviter que les données s'accumulent comme une étape rapide alimente une étape lente: bloquez simplement le rapide si son tampon de sortie pousse trop gros.


0 commentaires

3
votes

Regardez le site Web d'une entreprise appelée verum . Leur technologie ASD est basée sur le CSP et est utilisée par des sociétés telles que Philips Healthcare, Ericsson et NXP Semiconductors pour créer des logiciels pour toutes sortes d'équipements et d'applications de haute technologie.

Pour répondre à votre question: Oui, le CSP est utilisé sur de grands projets logiciels dans la vie réelle.

Divulgation complète: je travaille indépendante pour Verum


0 commentaires


2
votes

Répondre à une très vieille question, mais il semble important que l'un

Il y a Go où les CSP sont une partie fondamentale de la langue. Dans le FAQ to Go , les auteurs écrivent:

La programmation simultanée et multi-threadé a une réputation de difficulté. Nous croyons que cela est dû en partie à des conceptions complexes telles que Pthreads et en partie à la sur-chômage sur des détails de bas niveau tels que les mutiles, les variables de condition et les barrières de mémoire. Les interfaces de niveau supérieur permettent un code beaucoup plus simple, même s'il y a des mutiles encore et des couvertures.

L'un des modèles les plus réussis pour fournir une prise en charge linguistique de haut niveau à la simultanéité provient des processus séquentiels de communication de Hoare, ou du CSP. Occam et Erlang sont deux langues bien connues de CSP. Allez les primitives de la concurrence de Go dérivent d'une autre partie de l'arbre généalogique dont la contribution principale est la puissante notion de canaux comme objets de première classe. L'expérience avec plusieurs langues antérieures a montré que le modèle CSP convient bien à un cadre de langue procédurale.

Les projets mis en œuvre sont:


0 commentaires