Cette question est liée à ma question sur l' existant coroutine implémentations en Java. Si, comme je le soupçonne, il s'avère qu'il n'y a pas de mise en œuvre de coroutines actuellement disponible en Java, ce qui serait nécessaire pour les mettre en œuvre?
Comme je l'ai dit dans la question, je sais que sur les éléments suivants:
- Vous pouvez mettre en œuvre "coroutines" en tant que fils/pools de threads derrière les coulisses.
- Vous pouvez faire tricksy choses avec bytecode JVM en coulisses pour faire des coroutines possible.
- Le soi-disant "Da Vinci" Machine JVM a des primitives qui font de coroutines faisable sans manipulation de bytecode.
- Il existe différents JNI-les approches fondées sur des coroutines également possible.
Je vais répondre à chacun des lacunes dans la tour.
Basé sur le Thread coroutines
Cette "solution" est pathologique. Le point de l'ensemble de coroutines est d' éviter la surcharge de filetage, de verrouillage, d'ordonnancement du noyau, etc. Coroutines sont censés être léger et rapide, et à exécuter uniquement dans l'espace utilisateur. Leur mise en œuvre dans des conditions de pleine inclinaison des discussions avec des restrictions strictes de se débarrasser de tous les avantages.
La JVM de manipulation de bytecode
Cette solution est plus pratique, bien qu'un peu difficile à enlever. C'est à peu près la même chose que de sauter vers le bas en langage d'assemblage pour la coroutine bibliothèques en C (qui est la façon dont beaucoup d'entre eux travaillent) avec l'avantage que vous n'avez qu'une architecture à s'inquiéter et obtenir le droit.
Elle a également des liens vous uniquement de l'exécution de votre code entièrement conformes à la JVM des piles (ce qui signifie, par exemple, pas d'Android), sauf si vous pouvez trouver un moyen de faire la même chose sur la non-conformité de la pile. Si vous ne trouver un moyen de le faire, cependant, vous avez doublé votre système de complexité et de besoins de tests.
Le Da Vinci Machine
Le Da Vinci Machine est cool pour l'expérimentation, mais comme il n'est pas un standard de la JVM de ses fonctionnalités ne sont pas disponibles partout. En effet, je soupçonne la plupart des environnements de production en particulier, d'interdire l'utilisation du Da Vinci de la Machine. Ainsi je pourrais l'utiliser pour faire cool expériences, mais pas pour n'importe quel code je m'attends à de la libération pour le monde réel.
Cela a aussi le problème ajouté similaire à la JVM du bytecode à la manipulation de la solution ci-dessus: ne fonctionne pas sur piles de rechange (comme Android).
JNI mise en œuvre
Cette solution rend le point de le faire en Java à tous discutable. Chaque combinaison de PROCESSEUR et système d'exploitation a besoin de tests indépendants et chacun est un point de potentiellement frustrant subtile échec. Sinon, bien sûr, je pourrais m'attacher vers le bas à une plate-forme entièrement, mais cela, aussi, fait le point de faire les choses en Java entièrement discutable.
Alors...
Est-il possible de mettre en œuvre des coroutines en Java sans l'aide de l'un de ces quatre techniques? Ou vais-je être obligé d'utiliser l'un de ces quatre qui sent le moins (JVM manipulation) à la place?
Edité pour ajouter:
Juste pour s'assurer que la confusion est contenue, cela est lié à la question de mon autre, mais pas les mêmes. Que l'on est à la recherche d'un existant, la mise en œuvre, dans une tentative d'éviter de réinventer la roue inutilement. Il s'agit d'une question relative à la façon dont on pourrait aller sur la mise en œuvre de coroutines en Java, l'autre doit prouver sans réplique. Le but est de conserver les différentes questions sur des threads différents.