Имитация параллельных вызовов метода в Ruby - PullRequest
0 голосов
/ 29 октября 2018

У меня есть метод, который часто вызывается от разных пользователей, поэтому я хочу смоделировать это поведение, чтобы наблюдать его поведение

Я читал о fork и threads и на самом деле думаю, что fork лучше подходит для этой цели, но я ничего не смог найти с fork, поэтому я переключаюсь на threads, и я получил это :

module MethodBenchmark
  extend self

  def execute_with_threads
    arr = []
    3.times do |i|
      arr[i] = Thread.new {
      puts "Thread number #{i}"
      call_actual_method(3)
    }
    end
    arr.each {|t| t.join;}
  end

  def call_actual_method(number_of_requests)
    number_of_requests.times do |i|
      puts "Executing request #{i}"
    end
  end

end

результат, который я получил

Thread number 2
Executing request 0
Executing request 1
Executing request 2
Thread number 0
Executing request 0
Executing request 1
Executing request 2
Thread number 1
Executing request 0
Executing request 1
Executing request 2

Итак, я хочу, чтобы каждый поток представлял отдельного пользователя и каждый запрос, хорошо, чтобы представлять новый запрос от случайного пользователя. Другими словами, я хотел бы получить что-то вроде этого:

Thread number 2
Executing request 0
Executing request 1
Thread number 0
Executing request 2
Executing request 0
Executing request 1
Thread number 1
Executing request 2
Executing request 0
Executing request 1
Executing request 2

Идея состоит в том, что, как только все потоки будут порождены, я получу много параллельных запросов от разных потоков, а не этот последовательный вывод. Как мне добиться этого поведения?

P.S Я надеялся, что это может быть связано с небольшим количеством потоков / запросов, но я получил такой же последовательный результат с 25 потоками и 100 запросами на поток.

PS.PS Внутри тела этого метода def call_actual_method (number_of_requests)

Я планирую на самом деле вызвать метод, который делает запрос к базе данных

def call_actual_method (number_of_requests) number_of_requests.times do | i | method_to_call_database () конец конец

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

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