J'ai des fichiers assez volumineux que je dois gérer (500meg + zip dossiers). P>
Y a-t-il des implémentations non bloquantes d'IO open source pour les acteurs de Scala? p>
4 Réponses :
Parlez-vous de télécommandes em> acteurs? Une norme acteur code> est bien sûr une entité intra-jvm. Je ne suis pas au courant d'une implémentation de Nio d'acteurs distants que j'ai peur. P>
Les acteurs "locaux" seraient totalement bien
Votre question n'a pas vraiment de sens que je crains que ce soit libellé. Voulez-vous dire "Y a-t-il des implémentations Nio qui utilisent des acteurs?" I>
Bonjour est une option pour vous? BIGDATA (R) est un stockage de stockage et de calcul de l'ordinateur à l'échelle prenant en charge les transactions optionnelles, très élevées de simultanéité et à des tarifs globaux très élevés. P>
Si j'ai eu votre question à droite, vous devez non-bloquer io pour les fichiers. J'ai de mauvaises nouvelles pour vous alors. P>
Java Nio in Java6 prend en charge uniquement le blocage du fonctionnement lorsque vous travaillez avec des fichiers. Vous remarquerez peut-être cela à partir du fait FILECHANNEL CODE>
ne met pas en œuvre selectableChannel code>
interface. (NIO prend en charge le mode non bloquant pour les sockets) P>
Il y a Nio.2 ( JSR-203 ) Spécification visant à Surmontez de nombreuses limites actuelles de Java.io et Nio et de fournir une assistance aux fichiers IO asynchrones sur les fichiers. Nio.2 doit être libéré avec Java 7 autant que je sache. P>
Ce sont des limites de la bibliothèque Java, alors vous en souffrirez également à Scala. P>
Les acteurs sont basés sur la Fork-Joindre Cadre de Doug Lea (au moins dans la branche 2.7.x jusqu'à Version 2.7.7 ). Une citation de classe FJTASK < / a>: p>
Il n'y a rien d'empêchant
vous de bloquer dans un fjtak, et
très courtes attends / blocs sont complètement
bien comporté. Mais fjtasks ne sont pas
conçu pour soutenir arbitraire
synchronisation car il n'y a aucun moyen
suspendre et reprendre des tâches individuelles
une fois qu'ils ont commencé à exécuter.
FJTasks devrait également être fini dans
durée - ils ne doivent pas contenir
boucles infinies. FJTasks qui pourrait
besoin d'effectuer une action de blocage ou
tenir des serrures pendant de longues périodes, ou
boucle pour toujours peut plutôt créer normal
Java thread Objets qui le feront.
FJTasks ne sont tout simplement pas conçus pour
Soutenez ces choses. P>
blockQuote>
La bibliothèque FJ est améliorée dans SCALA pour fournir une manière unifiée permettant à un acteur de fonctionner comme un fil ou une tâche basée sur des événements en fonction du nombre de threads de travail et de "activité de la bibliothèque" (vous pouvez trouver une explication dans le rapport technique "< a href = "http://lamamp.epfl.ch/~phaller/doc/haller07coord.pdf" rel = "Nofollow NOREFERRER"> Acteurs qui unifient des threads et des événements
"de Philipp Haller et Martin Odersky). < / p>
Mais après tout si vous exécutez un code bloquant dans un acteur, il se comporte comme s'il s'agissait d'un fil, alors pourquoi ne pas utiliser de fil code> ordinaire code> pour bloquer les lectures et envoyer des événements aux acteurs basés sur des événements de ce fil? p>
Non pas que je sache, mais vous pourriez probablement obtenir beaucoup de kilométrage de regarder Naggati , un wrapper Scala autour de Apache Mina. MINA est une bibliothèque de réseau qui utilise Nio, Naggati traduit cela en un style de codage Scala. P>
Qu'est-ce que cela signifie Nio pour les fichiers? Dans Socket Nio est important car les sockets sont lents et enclins à s'arrêter à plusieurs reprises et à recommencer. En outre, dans WebServer, vous souhaiterez peut-être séparer le nombre de fils du nombre de sockets servis. Mais avec des fichiers habituellement, vous n'avez pas ces problèmes, alors quel est votre problème exactement?