This page is READ-ONLY. It is generated from the old site.
All timestamps are relative to 2013 (when this page is generated).
If you are looking for TeX support, please go to VietTUG.org

Đa luồng với Ruby

có ích trong một số trường hợp
Added by about 3 years ago

Với Ruby có thể dễ dàng mở các luồng xử lý song song. Điều này không thể thực hiện được với PHP.

Ví dụ, ta cần kiểm tra khả năng nhận mail của một hệ thống, xem sức tải của nó thế nào khi nhận cùng lúc $n thư từ phía khách. Từ phía máy khách, hiển nhiên không thể gửi từng thư một hoặc gửi với các thời gian gần nhau. Mặc dù có thể tiếp cận kiểu tiến trình nền trong bash (background job), nhưng rõ ràng các tiến trình không thật sự bắt đầu song song.

Dưới đây là một ví dụ với ruby. Trong ví dụ này, ta sẽ bắt đầu cùng lúc 100 tiến trình hệ thống; mỗi tiến trình như vậy được gọi bởi hàm system, và sẽ thật sự bắt đầu sau khi được join và luồng chính. Hiển nhiên, con số n có thể thay đổi tùy ý.

1 n = 100
2 
3 threads = []
4 (1..n).each do |i|
5   threads << Thread.new { system("/bin/sh ./send_mail.sh") }
6 end
7 
8 threads.each(&:join)

Có một nhận xét nhỏ cần kiểm tra lại kỹ hơn, rằng khi gọi các tiến trình kiểu này, tài nguyên sẽ bị dư thừa, không được tối ưu, do đó, trong trường hợp cực đoan, khi con số n quá lớn, chính máy khách dùng để kiểm tra sẽ chết trước. Do đó, việc sử dụng tính năng Thread trong Ruby cần được thay thế bởi các giải pháp chuyên dụng hơn. Ví dụ, khi kiểm tra sức tải của các web server, hãy dùng ab chẳng hạn.


Comments