MST
星途 面试题库

面试题:Ruby实时数据处理中的多线程与队列应用

在实时数据处理场景下,你需要从多个数据源获取数据,每个数据源的数据到达时间不确定。请使用Ruby的多线程和队列机制实现一个程序,它能够将来自不同数据源的数据(假设为字符串)收集到一个队列中,并在主线程中对队列中的数据进行统一处理,处理逻辑为统计每个字符串中单词的数量并输出。请考虑线程安全和性能优化。
37.3万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试
require 'thread'

# 创建一个线程安全的队列
queue = Queue.new
mutex = Mutex.new

# 模拟多个数据源,每个数据源是一个独立的线程
source_threads = []
3.times do |i|
  source_threads << Thread.new do
    loop do
      # 模拟数据到达时间不确定
      sleep rand(1..3)
      data = "This is a sample string #{i + 1}"
      mutex.synchronize do
        queue << data
      end
    end
  end
end

# 主线程处理队列中的数据
main_thread = Thread.new do
  loop do
    data = mutex.synchronize { queue.pop }
    word_count = data.split.size
    puts "Data: #{data}, Word count: #{word_count}"
  end
end

# 等待所有线程结束(实际应用中可以根据逻辑来控制结束条件)
source_threads.each(&:join)
main_thread.join