Как передавать данные с вилок через память вместо записи файлов в Ruby? - PullRequest
0 голосов
/ 31 января 2020

Я должен придерживаться МРТ Ruby по конкретным c причинам. Мне нужен настоящий параллелизм вместо зеленых нитей, поэтому я использую вилки, которые прекрасно работают. Но я не могу найти способ передать информацию изнутри процессов ветвления в основной процесс через память вместо необходимости записывать данные во внешние файлы.

Как эффективно изменить данные в следующем коде? Я хотел бы добавить данные в глобальный массив из разветвлений:

$data = []

4.times {
    Process.fork {
        $data << rand
    }
}

Process.waitall
p $data

Если нет способа вернуть данные обратно, то есть ли какое-либо решение кеша памяти, которое я могу начать с Ruby без необходимости устанавливать что-либо в основную операционную систему? Драгоценные камни будут работать для меня также. Спасибо.

1 Ответ

0 голосов
/ 30 марта 2020

Ну, мне удалось решить ее по-другому, используя параллельный гем:

https://github.com/grosser/parallel

установка параллельного камня

require "parallel"

# passing data to 3 processes
data = [ 1, 2, 3 ]

result = Parallel.map( data ){|d|
    # some expensive computation ...
    d ** 3
}

p result

[1, 8, 27]

...