Ruby 多线程学习笔记

什么是多线程?

多线程(Multithreading)是指在同一时间内,多个线程在单个程序中同时运行。

在 Ruby 中,多线程能够提高程序的性能和效率。

如何在 Ruby 中创建线程?

Ruby 提供了 Thread 类来创建和管理线程。下面是一个简单的示例:

rubyCopy Code
t1 = Thread.new { puts "Hello from thread 1" } t2 = Thread.new { puts "Hello from thread 2" } t1.join t2.join

上面的代码将输出以下内容:

Copy Code
Hello from thread 1 Hello from thread 2

如何使用 Mutex?

Mutex 是一种互斥对象,用于控制线程访问共享资源。在 Ruby 中,可以使用 Mutex 类来创建 Mutex 对象。

下面是一个简单的示例:

rubyCopy Code
require 'thread' mutex = Mutex.new count = 0 t1 = Thread.new { mutex.synchronize { 1000000.times do count += 1 end } } t2 = Thread.new { mutex.synchronize { 1000000.times do count += 1 end } } t1.join t2.join puts count

上面的代码将输出以下内容:

Copy Code
2000000

实例:使用多线程加速图像处理

下面是一个使用多线程加速图像处理的示例:

rubyCopy Code
require 'chunky_png' def thumbnail(input_path, output_path, width, height) image = ChunkyPNG::Image.from_file(input_path) rows = height.times.map { |y| Thread.new { width.times.map { |x| image[x,y] } } } rows.each(&:join) result = ChunkyPNG::Image.new(width, height) rows.each_with_index do |row, y| row.value.each_with_index do |color, x| result[x,y] = color end end result.save(output_path) end thumbnail('input.png', 'output.png', 64, 64)

上面的代码将加载 input.png 文件,生成一个大小为 64x64 的缩略图,保存到 output.png 文件中。

通过使用多线程来处理每一行像素,可以显著提高程序的性能和效率。