Должен ли я использовать несколько потоков в этой ситуации? [Рубин] - PullRequest
2 голосов
/ 22 апреля 2010

Я открываю несколько файлов и обрабатываю их по одной строке за раз. Файлы содержат токены, разделяющие данные, так что иногда при обработке одного файла может потребоваться, чтобы другие перехватили этот же токен.

Первоначально я делал это только с одним потоком и массивом, указывающим на истину / ложь, если файл должен быть прочитан в текущей итерации или если он должен ждать, пока некоторые другие не догонят.

Будет ли использование потоков сделать это проще? Более эффективным? Есть ли в Ruby механизм для этого?

Ответы [ 2 ]

1 голос
/ 22 апреля 2010

Во-первых, потоки никогда не делают ничего проще. Потоки применимы только для ускорения приложений. Потоки вносят множество новых сложностей, может показаться удобным описать несколько потоков выполнения, но это всегда усложняет жизнь.

Во-вторых, преждевременная оптимизация - корень всего зла. Не пытайтесь ускорить обработку файла, если вы не знаете, что это узкое место. Сделайте самое простое, что может сработать (но не проще).

В-третьих, многопоточность могла бы помочь, если бы процесс чтения файлов был независимым, чтобы нить могла обрабатывать файл, не беспокоясь о том, что делают другие потоки. Похоже, что это не так в вашем случае. Поскольку разные потоки должны будут общаться друг с другом, вы вряд ли увидите выигрыш в скорости при применении потоков.

В-четвертых, я не знаю Ruby и поэтому не могу комментировать, какие у него механизмы.

0 голосов
/ 22 апреля 2010

Я не уверен, что использование потоков в ruby ​​полезно. Недавно я написал и протестировал приложение, которое должно было выполнять параллельные вычисления, но я не получил того, что ожидал, даже на четырехъядерном процессоре, он выполнял вычисления последовательно, один поток за другим. Прочтите статью , в ней обсуждается планирование потоков, может оказаться, что ничего не изменилось, по крайней мере, для оригинального ruby.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...