Utiliser la programmation réactive avec, par exemple, Java et Project Reactor a beaucoup de sens lorsqu'il s'agit d'E / S lentes, ou lorsque vous souhaitez diffuser les résultats à l'utilisateur final. Le code que vous écrivez a tendance à paraître plus propre - comme lors de l'utilisation de la programmation fonctionnelle et des flux - mais vous êtes également obligé d'écrire les choses différemment, ce qui rend la vie plus difficile pour les programmeurs novices dans le concept.

Je me demandais s'il était judicieux d'utiliser du point de vue des performances en général? Dans le cas d'un programme sans E / S en dehors d'une sortie d'écran (comme le calcul de nombres PI infinis ou de séquences de Fibonacci), ne ralentira-t-il pas simplement vos calculs? Ou est-ce que les gains de propreté de votre code en font un petit prix?

1
Kristof 27 juil. 2017 à 09:49

2 réponses

Pour autant que je sache, la programmation réactive n'est pas seulement une question de performance, c'est aussi une question d'évolutivité, vous souhaitez utiliser la programmation réactive lorsque vous savez que votre application va avoir une demande croissante à l'avenir et que vous planifiez votre architecture afin de gérer cela. En dehors de la programmation réactive, il existe quelques autres techniques comme les micro-services ou SOA pour résoudre ces problèmes.

À mon avis, l'utilisation de ces stratégies dépend entièrement du problème, car rien n'est gratuit et les temps de développement sont généralement plus longs lorsque vous développez ce type d'architectures en fonction de l'expérience (de vous / de votre équipe).

Pour envoyer des données à votre client, vous pouvez utiliser d'autres techniques telles que l'interrogation ou l'envoi de données avec des sockets Web ou des files d'attente / sujets où vous publiez des données mises à jour.

0
karelss 27 juil. 2017 à 07:18

En général, différents paradigmes conviennent à différents problèmes et la vérité probable est qu'un problème est résolu par une combinaison de ces paradigmes. Voici un exposé léger de Brian Goetz à ce sujet. Vous ne pouvez pas généraliser "utiliser RP lorsque vous traitez avec des E / S lentes et FP lors du calcul de PI" ou quelque chose comme ça.

Vous touchez ici plusieurs sujets complètement orthogonaux.

Le code que vous écrivez a tendance à paraître plus propre

Tout dépendant de la syntaxe de la langue et des facilités qu'elle offre. Java a l'API de liaison JavaFX qui peut rendre RP très propre en Java, mais sans elle, cela peut sembler très compliqué. Par exemple, dans le langage A, un résultat n'est pas lié à ses arguments et si vous voulez qu'il se comporte de manière réactive, vous devez le déclarer:

a = b + c;
b = b + 1; // a doesn't change
a = react(b + c);
b = b + 1; // a increases by 1

Donc RP est plus compliqué dans cette langue. Dans le langage B, c'est le contraire - le résultat est lié par défaut et si vous ne voulez pas que vous deviez le spécifier, implémenter RP est donc moins compliqué, mais implémenter autre chose est plus compliqué.

mais vous êtes également obligé d'écrire les choses différemment, ce qui rend la vie plus difficile pour les programmeurs novices dans le concept.

Comme pour tout paradigme. N'était-ce pas le même cas quand OO a pris vie? Pensez à quelqu'un qui a fait de la PF tout le temps et qui doit maintenant lire le code OO. Leur vie est tout de même plus dure.

Je me demandais s'il était judicieux d'utiliser du point de vue des performances en général?

Pourquoi pas? Avec le calcul paresseux, vous n'avez pratiquement aucun problème de performances. Dans l'exemple de code ci-dessus, a n'a pas besoin d'être mis à jour à chaque fois que b ou c sont modifiés si la valeur de a n'est pas utilisée. Pensez au pseudo-code react comme spécifiant une formule - "faites ceci quand vous avez besoin de la valeur de a" - et non comme une relation constante - "un doit toujours être ceci".

C'est également ce que font les liaisons JavaFX. Il serait extrêmement coûteux de mettre à jour en permanence toutes les valeurs liées. Chaque fois qu'une opération de lecture se produit, alors et alors seulement, mettez à jour la valeur et renvoyez-la.

La question est: devrait la valeur réagir aux changements et non si cela sera plus facile à lire ou si les performances seront meilleures.

0
user1803551 31 juil. 2017 à 09:43