Programmation Basée Sur Le Flux

J'ai fait un peu de lecture sur Flow Based Programming au cours des derniers jours. Il y a un wiki {[2] } qui fournit plus de détails. Et wikipédia a un bon aperçu sur elle aussi. Ma première pensée a été, "grand un autre partisan de la programmation Lego-Land pretend" - un concept qui remonte à la fin des années 80. mais, comme je le lis plus, je dois admettre que je suis devenu intrigué.

  1. avez-vous utilisé FBP pour un vrai projet?
  2. Quelle est votre opinion de FBP?
  3. FBP a-t-il un avenir?

Dans certains sens, cela semble être le Saint Graal de la réutilisation que notre industrie a poursuivi depuis l'avènement des langages procéduraux.

39
demandé sur Software Monkey 2009-01-02 01:57:22

10 réponses

Discussion intéressante! Il m'est apparu hier qu'une partie de la confusion peut être due au fait que de nombreuses notations différentes utilisent des arcs dirigés, mais les utilisent pour signifier des choses différentes. Dans FBP, les lignes représentent des tampons délimités, à travers lesquels se déplacent des flux de paquets de données. Étant donné que les composants sont généralement des processus de longue durée, les flux peuvent comprendre un grand nombre de paquets, et les applications FBP peuvent s'exécuter pendant de très longues périodes-peut-être même "perpétuellement" (voir un article de 2007 sur un projet appelé Eon, principalement par des gens à UMass Amherst). Comme un envoi vers un tampon borné se suspend lorsque le tampon est (temporairement) plein (ou Temporairement vide), des quantités indéfinies de données peuvent être traitées à l'aide de ressources finies.

Par comparaison, le E dans Grafcet vient D'Etapes, signifiant "pas", ce qui est un concept assez différent. Dans ce type de modèle (et il y en a un certain nombre), les données qui circulent entre les étapes sont soit limitées à ce qui peut être tenu à haute vitesse mémoire à la fois, ou doit être maintenue sur le disque. FBP prend également en charge les boucles dans le réseau, ce qui est difficile à faire dans les systèmes basés sur les étapes-voir par exemple http://www.jpaulmorrison.com/cgi-bin/wiki.pl?BrokerageApplication - notez que cette application a utilisé à la fois MQSeries et CORBA d'une manière naturelle. En outre, FBP est nativement parallèle, de sorte qu'il se prête à la programmation des réseaux de grille, des machines multicœurs, et un certain nombre de directions de l'informatique moderne. Un dernier commentaire: dans le littérature j'ai trouvé beaucoup de projets connexes, mais peu d'entre eux ont toutes les caractéristiques de FBP. Une liste que j'ai amassée au fil des ans (un certain nombre d'entre eux plus proches que Grafcet) peut être trouvée dans http://www.jpaulmorrison.com/cgi-bin/wiki.pl?FlowLikeProjects .

16
répondu Paul Morrison 2009-03-21 01:13:58

1. Avez-vous utilisé FBP pour un vrai projet?

Nous avons conçu et implémenté un serveur DF pour notre projet d'automatisation (dispatcher, component iterface, un tas de composants, langage DF, compilateur DF, interface utilisateur). Il est écrit en C++ nu, et fonctionne sur plusieurs systèmes de type Unix (Linux x86, MIPS, avr32 etc., Mac OSX). Il manque plusieurs fonctionnalités, par exemple un contrôle de flux sophistiqué, un contrôle de thread complexe (il n'y a qu'un composant pas trop avancé pour cela), donc c'est juste un prototype, même ça marche. Nous travaillons maintenant sur un serveur complet. Nous avons beaucoup appris lors de la mise en œuvre et de l'utilisation du prototype.

Aussi, nous ferons un éditeur visuel un jour.

2. Quelle est votre opinion sur FBP?

2.1. Tout d'abord, la programmation par flux de données est plaisir ultime

Quand j'ai rencontré la programmation de flux de données, je me sentais comme il y a 20 ans, quand j'ai rencontré la programmation en premier. Cependant, la programmation DF diffère de programmation procédurale / POO, c'est juste une sorte de programmation. Il y a beaucoup de choses à découvrir, même si elles sont simples! C'est très drôle, quand, en tant que programmeur expérimenté, vous avez rencontré un problème DE DF, ce qui est une chose très-très basique, mais c'était complètement inconnu pour vous auparavant. Donc, si vous sautez dans la programmation DF, vous vous sentirez comme un programmeur débutant, qui a d'abord rencontré le "cycle" ou la "condition".

2.2. Il ne peut être utilisé que pour des architectures spécifiques

C'est juste un marteau, qui sont pour marteler les ongles. DF ne convient pas pour les interfaces utilisateur, serveur web et ainsi de suite.

2.3. L'architecture de flux de données est optimale pour certains problèmes

Un framework de flux de données peut faire des choses magiques. Il peut paralellize procédures, qui ne sont pas conçus à l'origine pour paralellization. Les composants sont monothread, mais lorsqu'ils sont organisés en un graphe DF, ils deviennent multithread.

Exemple: saviez-vous, que faire est une DF système? Essayez make-j (voir man, dans quel cas-j est utilisé). Si vous avez une machine multi-core, compilez votre projet avec et sans-j, et comparez les temps.

2.4. Répartition optimale du problème

Si vous écrivez un programme, vous divisez souvent le problème pour des sous-problèmes plus petits. Il y a des points de partage habituels pour les sous-Problèmes bien connus, que vous n'avez pas besoin d'implémenter, utilisez simplement les solutions existantes, comme SQL pour DB, ou OpenGL pour graphics / animation,etc.

DF architecture divise votre problème d'une manière très intéressante:

  • le framework dataflow, qui fournit l'architecture (il suffit d'utiliser une architecture existante),
  • Les composants: le programmeur crée des composants; les composants sont des unités simples et bien séparées - il est facile de faire des composants;
  • la configuration: a. k. a. programmation de flux de données: le configurateur met le graphique de flux de données (Programme) ensemble à l'aide de composants fournis par le programmeur.

Si votre jeu de composants est bien conçu, le configurateur peut construire un tel système, qui le programmeur n'a même jamais rêvé. Le configurateur peut implémenter de nouvelles fonctionnalités sans perturber le programmeur. Les clients sont heureux, car ils ont une solution personnalisée. Le fabricant de logiciels est également heureux, car il n'a pas besoin de maintenir plusieurs branches spécifiques au client du logiciel, juste des configurations spécifiques au client.

2.5. Vitesse

Si le système est construit sur natif composants, le programme DF est rapide. La seule perte de temps est la répartition des messages entre les composants par rapport à un simple programme POO, elle est également minime.

3. Est-ce que FBP a un avenir?

Oui, bien sûr.

La raison principale est qu'il peut résoudre des problèmes de multitraitement massifs sans introduire de nouvelles architectures logicielles étranges, des langages étranges. La programmation de flux de données est facile, et je veux dire les deux: programmation de composants et configuration de flux de données bâtiment. (Même l'écriture de framework de flux de données n'est pas une science de fusée.)

Aussi, c'est très économique. Si vous avez un bon ensemble de composants, il vous suffit de mettre les briques lego ensemble. Un programme DF est facile à entretenir. Le bâtiment de configuration DF ne nécessite aucun programmeur expérimenté, juste un intégrateur système.

Je serais heureux, si les systèmes natifs se propagent, avec des portes ouvertes pour la création de composants personnalisés. Il devrait également y avoir un langage DF standard, ce qui signifie qu'il peut être utilisé avec éditeurs visuels indépendants de la plate-forme et plusieurs serveurs DF.

27
répondu ern0 2015-12-08 01:50:57

Je ne suis pas d'accord avec le commentaire à propos de FBP étant juste un moyen d'implémenter FSM: je pense que les FSM sont propres, et je crois qu'ils ont un rôle défini dans la construction d'applications, mais le concept de base de FBP est de processus à plusieurs composants exécutant de manière asynchrone, communiquant Oui, certainement FSM sont une façon de construire des processus de composants, et en fait il y a tout un chapitre dans mon livre sur FBP consacré à cette idée, et celui connexe des PDA (1) - http://www.jpaulmorrison.com/fbp/compil.htm - mais à mon avis, Un FSM implémentant un réseau FBP non trivial serait incroyablement complexe. A titre d'exemple le diagramme montré dans http://www.jpaulmorrison.com/fbp/image010.jpg est d'environ 1/3 d'ununique travail par lots en cours d'exécution sur un mainframe. Chacun de ces blocs fonctionne de manière asynchrone avec tous les autres. En passant, je serais très intéressé d'entendre plus de réponses aux questions posées dans le premier post!

1: http://en.wikipedia.org/wiki/Pushdown_automaton automates poussoirs

7
répondu Paul Morrison 2013-07-19 13:23:54

Chaque fois que j'entends le terme flow based programming, je pense à LabView, conceptuellement. Processus de composants Ie qui est la planification est principalement motivée par un changement à ses données d'entrée. C'est vraiment la programmation lego dans le sens où la plate-forme labview a été utilisée pour la dernière récolte de produits mindstorm. Cependant, je ne suis pas d'accord que cela en fait un modèle de programmation moins utile.

Pour les systèmes industriels qui impliquent généralement la collecte de données, le contrôle et l'automatisation, cela convient très bien. Qu'est-ce qu'un système de contrôle si les données ne sont pas transformées en données? Ie quels composants de votre système de contrôle ne préféreriez-vous pas représenter comme une boîte noire dans une image plus grande, si vous pouviez le faire. Pour atteindre ce niveau de clarté architecturale en utilisant d'autres méthodologies, vous devrez peut-être dessiner un diagramme de classe de domaine de données, puis une relation de classe d'exécution de domaine problématique, puis un diagramme de cas d'utilisation. Avec flow driven systems vous avez le luxe d'être en mesure de réduire beaucoup de ces informations ensemble assez précisément que vous pouvez concevoir de manière réaliste un système visuellement une fois que les composants sont construits et définis.

Une question que je n'ai jamais eu à poser en regardant une application écrite dans labview est " quel morceau de code définit cette valeur?", comme il était inhérent et facile de retracer en arrière à partir des données, et aussi des erreurs comme plusieurs écrivains non tendus étaient impossibles à créer par erreur.

Si seulement c'était vrai du code écrit d'une manière plus typiquement procédurale!

4
répondu CRK 2009-03-21 02:28:24

1) je construis un petit framework FBP pour un projet de détection d'anomalies, et il s'avère que c'était une excellente idée.

Vous pouvez également jeter un oeil à certaines des vidéos KNIME, qui donnent une bonne idée de ce qu'est un framework basé sur flow lorsque le framework est mis en place par une grande équipe. Certes, il est basé sur le lot et non créé pour un fonctionnement continu.

De loin le meilleur exemple de programmation basée sur le flux, cependant, est Unix pipes qui est l'un des cadre FBP le plus ancien et le plus négligé. Je ne pense pas avoir à développer la puissance des tuyaux nix...

2) PBF est un outil très puissant pour un grand nombre de problèmes. Le parallélisme intrinsèque est un grand avantage, et tout cadre FBP peut être rendu complètement transparent en réseau à l'aide de modules adaptateurs. Les frameworks intelligents sont également absurdement tolérants aux pannes et capables de recharger dynamiquement les modules bloqués si nécessaire. La simplicité conceptuelle permet également une communication plus propre avec tout le monde impliqué dans un projet, et beaucoup de code plus propre.

3) absolument! Pipes sont là pour rester, et sont l'une des fonctionnalités les plus puissantes d'unix. Les pouvoirs inhérents à un framework FBP par rapport à un programme statique sont nombreux et banalisent le changement, au point que certains frameworks peuvent être reconfigurés en cours d'exécution Sans mesures spéciales.

FBP FTW! ;-)

3
répondu brice 2010-12-16 13:07:41

Dans le développement automobile, ils ont un protocole de messagerie agnostique de langage qui fait partie de la spécification la plus (Media Oriented Systems Transport), ce qui a été conçu pour communiquer entre les composants sur un réseau ou dans le même dispositif. Les systèmes ont généralement à la fois un bus de messages réel et visualisé-par conséquent, vous avez effectivement une forme de programmation basée sur le flux.

C'est ce qui a fait que l'ampoule s'allume pour moi il y a plusieurs années et m'a amené ici. C'est vraiment un fantastique façon de travailler et tellement plus amusant que la programmation conventionnelle. Le Catalogue de messages constitue la spécification centrale et le point de référence. Cela fonctionne bien pour les développeurs et la direction. c'est-à-dire que la direction peut parcourir le catalogue de messages au lieu de regarder la source.

Avec la journalisation intégrée référençant également le catalogue pour produire une analyse intelligible, les choses peuvent devenir vraiment productives. J'ai une expérience du monde réel de développer des produits commerciaux de cette façon. Je suis intéressé à aller plus loin, en particulier en ce qui concerne les outils et les IDE. Malheureusement, je pense que beaucoup de gens dans le secteur automobile ont manqué le point sur la façon dont cela est grand et ont échoué à construire sur elle. Ils sont maintenant distraits par d'autres modes et n'ont pas réalisé qu'il y avait beaucoup plus à la plupart développement que le bus physique.

3
répondu KatieK 2012-12-13 17:16:01

J'ai largement utilisé Spring Web Flow dans les applications Web Java pour modéliser (généralement) les processus d'application, qui ont tendance à être des affaires Complexes de type assistant avec beaucoup de logique conditionnelle quant aux pages à afficher. C'est incroyablement puissant. Un nouveau produit a été ajouté et j'ai réussi à recoupiller les pièces existantes dans un processus d'application complètement nouveau en une heure ou deux (avec l'ajout de quelques nouvelles vues/États).

J'ai également examiné l'utilisation de OS Workflow pour modéliser processus d'affaires, mais ce projet a été mis en conserve pour diverses raisons.

Dans le monde Microsoft, vous avez Windows Workflow Foundation ("WWF"), qui devient de plus en plus populaire, en particulier en conjonction avec Sharepoint.

FBP est juste un moyen d'implémenter une machine à états finis . C'est rien de nouveau.

2
répondu cletus 2009-01-01 23:05:48

Je me rends compte que ce n'est pas exactement la même chose, mais ce modèle a été utilisé pendant des années dans la programmation PLC. ISO l'appelle diagramme de flux séquentiel, mais beaucoup de gens l'appellent Grafcet après une implémentation populaire. Il offre un traitement parallèle et définit les transitions entre les États.

2
répondu Jim C 2009-01-06 20:18:38

Il est utilisé dans le monde de la Business Intelligence ces jours-ci pour mashup et traiter les données. Les étapes de traitement des données telles que ETL, l'interrogation , l'assemblage et la production de rapports peuvent être effectuées par l'utilisateur final. Je suis un développeur sur un système ouvert - ComposableAnalytics.com Dans CA, les applications basées sur les flux peuvent être partagées et exécutées via le navigateur.

0
répondu Lars Fiedler 2014-08-22 06:51:26

C'est ce que sont les séries MQ, MSMQ et JMS.

C'est la pierre angulaire des implémentations de services Web et de bus de service D'entreprise.

Les produits comme les JCAPS de TIBCO et de Sun sont essentiellement basés sur les flux sans utiliser ce mot à la mode particulier.

La plupart du travail de l'application se fait avec de petits modules qui transmettent des messages via un réseau de traitement.

-2
répondu S.Lott 2009-01-02 00:43:57