2010-04-22 4 views
2

J'ouvre plusieurs fichiers et je les traite, une ligne à la fois. Les fichiers contiennent des jetons séparant les données, de sorte que le traitement d'un fichier peut parfois devoir attendre que d'autres rejoignent le même jeton. Je le faisais initialement avec un seul thread et un tableau indiquant avec true/false si le fichier devait être lu dans l'itération en cours ou s'il devait attendre que d'autres le rattrapent.Dois-je utiliser plusieurs threads dans cette situation? [Ruby]

L'utilisation de threads simplifierait-elle cela? Plus efficace? Est-ce que Ruby a un mécanisme pour ça?

Répondre

0

Je ne suis pas sûr si l'utilisation de fils dans le rubis est bénéfique. Récemment, j'ai écrit et testé une application qui était censée faire des calculs parallèles, mais je n'ai pas obtenu ce que j'attendais même sur un processeur quad core, elle effectuait des calculs séquentiellement, un thread après l'autre. Lire ce article, il a une discussion sur la programmation des discussions, il peut s'avérer que les choses n'ont pas changé au moins pour l'original ruby.

1

Tout d'abord, Threads jamais simplifier quoi que ce soit. Threading est uniquement applicable pour aider à accélérer les applications. Threading introduit une foule de nouvelles complications, il peut sembler pratique de pouvoir décrire plusieurs threads d'exécution, mais cela rend toujours la vie plus difficile. Deuxièmement, l'optimisation prématurée est la racine de tous les maux. N'essayez pas d'accélérer le traitement des fichiers, sauf si vous savez qu'il s'agit d'un goulot d'étranglement. Faites la chose la plus simple qui pourrait fonctionner (mais pas plus simple). Troisièmement, le thread peut être utile si le processus de lecture des fichiers est indépendant afin que le thread puisse traiter un fichier sans se soucier de ce que font les autres threads. Il semble que ce n'est pas vrai dans votre cas. Étant donné que les différents threads doivent communiquer entre eux, il est peu probable que vous voyiez un avantage de rapidité dans l'application des threads. Quatrièmement, je ne connais pas Ruby et je ne peux donc pas faire de commentaires sur les mécanismes dont il dispose.

Questions connexes