... > Ruby > Многопоточность и Параллельное...

Многопоточность и Параллельное Выполнение в Ruby

НАВИГАЦИЯ ПО СТРАНИЦЕ

Многопоточность vs Параллелизм

Ruby предоставляет множество инструментов для работы с многопоточностью и параллельным выполнением кода.

Многопоточность vs Параллелизм

  • Многопоточность относится к одному процессу, в котором несколько потоков выполняются параллельно. Потоки в одном процессе имеют общее пространство памяти и ресурсы процесса.

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

Многопоточность в Ruby

Ruby поддерживает многопоточность с использованием класса Thread. Однако, из-за Global Interpreter Lock (GIL), только один поток может выполняться в одном процессе Ruby одновременно. Это может ограничить эффективность многопоточного выполнения кода, особенно в многозадачных приложениях.

Пример создания и запуска потока в Ruby:

thread = Thread.new do
  # Код, выполняемый в потоке
end

# Ожидание завершения потока
thread.join

Параллельное Выполнение в Ruby

Для достижения параллельного выполнения задач Ruby предоставляет несколько инструментов:

  1. Fiber: Fiber — это легковесные потоки, которые могут быть остановлены и возобновлены вручную. Они полезны для реализации кооперативной многозадачности.

  2. Parallel: Гем Parallel предоставляет простой способ запуска блоков кода параллельно.

    require 'parallel'
    
    result = Parallel.map([1, 2, 3, 4]) do |number|
      # Код, выполняемый параллельно
      number * 2
    end
    puts result
  3. Concurrent-Ruby: Concurrent-Ruby — это библиотека, предоставляющая абстракции для работы с параллельными задачами, такие как Future, Promise, и др.

    require 'concurrent'
    
    # Создание обещания (Promise)
    promise = Concurrent::Promise.new { 2 + 2 }
    
    # Получение результата
    result = promise.value
    puts result

Многопоточность и параллельное выполнение в Ruby предоставляют различные инструменты для работы с одновременными задачами. При выборе подхода важно учитывать особенности приложения, требования к производительности и возможные ограничения, такие как GIL в MRI Ruby.