Permettez-moi d'abord de dire que j'ai beaucoup de Java de l'expérience, mais ont récemment été intéressé dans les langages fonctionnels. Récemment, j'ai commencé à regarder Scala, ce qui semble être une très belle langue.
Cependant, j'ai lu à propos de Scala framework d'Acteur dans la Programmation Scala, et il y a une chose que je ne comprends pas. Dans le chapitre 30.4 il est dit que l'utilisation d' react
au lieu de receive
permet de ré-utiliser les threads, ce qui est bon pour la performance, puisque les threads sont chers dans la JVM.
Est-ce à dire que, aussi longtemps que je me souviens de l'appel react
au lieu de receive
, je peux commencer comme beaucoup d'Acteurs que j'aime? Avant la découverte de la Scala, j'ai été jouer avec Erlang, et l'auteur de la Programmation Erlang vante le frai plus de 200 000 processus sans casser une sueur. Je déteste faire ça avec les threads Java. Ce genre de limites, je suis à la recherche de Scala par rapport à Erlang (et Java)?
Aussi, comment est-ce fil de ré-utiliser le travail en Scala? Supposons, pour simplifier, que je n'ai qu'un seul thread. Tous les acteurs que j'ai commencer à exécuter séquentiellement dans ce fil, ou sera une sorte de basculement de tâches? Par exemple, si je commence à les deux acteurs de ping-pong des messages les uns aux autres, je risque de blocage si ils ont commencé dans le même thread?
Selon la Programmation Scala, écrit acteurs à utiliser react
est plus difficile que dans receive
. Cela semble plausible, car react
n'a pas de retour. Cependant, le livre montre comment vous pouvez mettre un react
à l'intérieur d'une boucle à l'aide de Actor.loop
. Comme un résultat, vous obtenez
loop {
react {
...
}
}
ce qui, pour moi, semble assez similaire à
while (true) {
receive {
...
}
}
qui est utilisé plus tôt dans le livre. Pourtant, le livre dit que "dans la pratique, les programmes auront besoin au moins de quelques receive
s'". Donc ce qui me manque ici? Que peut - receive
faire react
ne peut pas, en plus de retour? Et pourquoi dois-je prendre soin?
Enfin, en venant à la base de ce que je ne comprends pas: le livre garde de mentionner qu'à l'aide de react
permet de jeter la pile d'appel pour utiliser de nouveau le fil. Comment cela fonctionne? Pourquoi est-il nécessaire de jeter la pile d'appel? Et pourquoi la pile d'appel à être jetés quand une fonction se termine par la levée d'une exception (react
), mais pas lorsqu'il se termine par un retour (receive
)?
J'ai l'impression que la Programmation Scala a été dissimuler certaines des questions clés ici, ce qui est dommage, parce que sinon c'est vraiment un excellent livre.