Trong python, chúng tôi có thể sử dụng các mô-đun đa xử lý. Nếu có thư viện tương tự trong Perl và Ruby, bạn có dạy nó không? Tôi sẽ đánh giá cao nếu bạn có thể bao gồm một mẫu ngắn.Vui lòng giới thiệu một thư viện đa xử lý trong Perl hoặc Ruby
Trả lời
Với Perl, bạn có các tùy chọn. Một tùy chọn là sử dụng các quy trình như dưới đây. Tôi cần phải tìm cách viết chương trình tương tự bằng cách sử dụng các chủ đề nhưng http://perldoc.perl.org/perlthrtut.html sẽ cung cấp cho bạn một ý tưởng.
#!/usr/bin/perl
use strict;
use warnings;
use Parallel::ForkManager;
my @data = (0 .. 19);
my $pm = Parallel::ForkManager->new(4);
for my $n (@data) {
my $pid = $pm->start and next;
warn sprintf "%d^3 = %d\n", $n, slow_cube($n);
$pm->finish;
}
sub slow_cube {
my ($n) = @_;
sleep 1;
return $n * $n * $n;
}
__END__
Phiên bản sau đây sử dụng chủ đề không sử dụng một giới hạn về số lượng các chủ đề đã tạo (vì tôi không biết làm thế nào):
#!/usr/bin/perl
use strict;
use warnings;
use threads;
my @data = (0 .. 19);
my @threads = map {
threads->new({context => 'list' }, \&slow_cube, $_)
} @data;
for my $thr (@threads) {
my ($n, $ncubed) = $thr->join;
print "$n^3 = $ncubed\n";
}
sub slow_cube {
my ($n) = @_;
sleep 1;
return $n, $n * $n * $n;
}
__END__
Điều thú vị là:
TimeThis : Command Line : t.pl
TimeThis : Elapsed Time : 00:00:01.281
Các chủ đề của Perl rất tốn kém, cả trong thời gian khởi động và bộ nhớ. Chúng được sử dụng tốt nhất trên cơ sở liên tục, không phải một lần như trên - nhưng đối với điều đó, các quy trình riêng biệt thường sẽ tốt hơn. Cú pháp Perl 6 cung cấp rất nhiều lĩnh vực để xử lý đa được sử dụng một cách tự nhiên ... một ngày nào đó. – ysth
Một tùy chọn khác là sử dụng dĩa (http://search.cpan.org/~rybskej/forks-0.33/lib/forks.pm) để mô phỏng các luồng thông qua IPC thực sự khá nhanh trên các hệ thống POSIX. – jiggy
Ruby:
Perl:
Ngoài ra, chuỗi của Perl là chuỗi hệ điều hành gốc, vì vậy bạn có thể sử dụng chúng để tận dụng nhiều lõi.
Đáng buồn thay, Python cũng là nạn nhân của GIL. –
JRuby làm chủ đề tốt. Tôi chắc chắn rằng IronRuby làm chủ đề tốt. Và khi ruby nhận được một máy ảo bản địa tốt hơn, họ sẽ có thể thực hiện các chủ đề tốt. – sal
Tôi không nghĩ Ruby sẽ hỗ trợ các luồng hệ điều hành gốc. Matz cho biết ông đang xem xét xử lý song song thông qua một số loại "quy trình nhỏ" a la Erlang. –
Check-out Coro cung cấp coroutines cho Perl.
Dưới đây là một đoạn trích từ các tài liệu tác giả ....
bộ sưu tập mô-đun này quản lý continuations nói chung, thường xuyên nhất trong các hình thức của chủ đề hợp tác xã (còn gọi là coros, hoặc đơn giản là "Coro" trong tài liệu). Chúng tương tự như các luồng hạt nhân nhưng không (nói chung) chạy song song cùng một lúc ngay cả trên các máy SMP. Chủ đề cụ thể của thread được cung cấp bởi module này cũng đảm bảo rằng nó sẽ không chuyển đổi giữa các luồng trừ khi cần thiết, tại các điểm dễ xác định trong chương trình của bạn, vì vậy việc khóa và truy cập song song hiếm khi là vấn đề. các mô hình chủ đề khác.
Không giống như "chủ đề Perl" (không thực sự là chủ đề thực sự nhưng chỉ quy trình giả lập cửa sổ được chuyển sang Unix) và Coro cung cấp không gian địa chỉ dùng chung, chủ đề rất dễ dàng. Và các chủ đề của Coro cũng nhanh chóng: vô hiệu hóa mã mô phỏng quy trình Windows trong perl của bạn và sử dụng Coro có thể dễ dàng dẫn đến tăng gấp hai đến bốn lần tốc độ cho các chương trình của bạn. Một điểm chuẩn nhân ma trận song song chạy nhanh hơn 300 lần trên một lõi đơn so với các chuỗi giả của perl trên lõi tứ sử dụng tất cả bốn lõi.
Đối với một cái gì đó tương tự như trên trong Ruby sau đó có một cái nhìn tại Fiber mà đi kèm với Ruby 1.9.
Dưới đây là hai bài viết thú vị về việc sử dụng sợi quang:
Ngoài ra còn có một Fiber for Perl sử dụng Coro. Dưới đây là một số bài viết về Fiber dành cho Perl (bằng tiếng Nhật):
Có một cái nhìn tại trang này tóm tắt tốt đẹp cho Perl libs xử lý song song http://www.openfusion.net/perl/parallel_processing_perl_modules. Tôi thích Parallel :: Forker, một thư viện hiện đại và mạnh mẽ hơn Parallel :: ForkManager cũ và có nhiều tính năng hơn như báo hiệu quá trình con. Tôi đã sử dụng nó trong nhiều dự án và nó hoạt động chính xác như mong đợi. Dưới đây là một ví dụ về cách sử dụng nó:
#!/usr/bin/env perl
use strict;
use warnings;
use Parallel::Forker;
my $forker = Parallel::Forker->new(use_sig_child => 1, max_proc => 4);
$SIG{CHLD} = sub {
Parallel::Forker::sig_child($forker);
};
$SIG{TERM} = sub {
$forker->kill_tree_all('TERM') if $forker and $forker->in_parent;
die "Exiting child process...\n";
};
# an example
for (1..10) {
$forker->schedule(run_on_start => sub {
# all child process code to run here
})->ready();
}
# wait for all child processes to finish
$forker->wait_all();
Hy vọng điều này sẽ giúp bạn
https://github.com/pmahoney/process_shared cho ruby
- 1. Vui lòng giới thiệu một hoặc nhiều thành phần Biểu đồ tốt nhất, Flash hoặc javascript
- 2. Vui lòng giới thiệu một hướng dẫn Slime hay screencast tốt
- 3. Vui lòng giới thiệu trình chỉnh sửa văn bản có định dạng JQuery tốt
- 4. Thư viện xử lý ảnh Ruby/Rails
- 5. Vui lòng giới thiệu công nghệ xem được sử dụng trong ứng dụng Spring MVC 3
- 6. Vui lòng giới thiệu cấu trúc dự án bằng titan sử dụng CommonJS
- 7. Bài đọc đa luồng/đa xử lý Ruby
- 8. Giới thiệu về đa luồng
- 9. Tìm thư viện xử lý hình ảnh cho pure Ruby
- 10. Vui lòng đợi trang trong ASP.NET MVC
- 11. đa xử lý hoặc luồng trong python?
- 12. Giới thiệu hoặc ví dụ đơn giản cho iteratee?
- 13. Bạn muốn giới thiệu thư viện XML XML nào cho tệp XML 2.4MB?
- 14. Bạn có thể giới thiệu một số thư viện máy khách http python không?
- 15. Mã tiền xử lý trước trong Perl
- 16. Đa luồng và đa xử lý
- 17. Thư viện xử lý hình ảnh
- 18. Thư viện Git cho Ruby hoặc Python?
- 19. Thư viện xử lý video cho Java
- 20. Thư viện xử lý ảnh Haskell?
- 21. Thư viện xử lý PDF ở Erlang
- 22. Bất cứ ai có thể giới thiệu một thư viện đọc PDF tốt cho. Net?
- 23. Perl Xử lý Directory Separators
- 24. Ruby: Thư viện KML?
- 25. perl "hoặc" xử lý lỗi: đa tuyên bố về lỗi có thể?
- 26. Thư viện xử lý tín hiệu trong Java?
- 27. Vui lòng đề xuất một plugin JQuery xử lý phát hiện va chạm cho các yếu tố có thể kéo
- 28. cách xử lý ngoại lệ chưa được xử lý trong thư viện trong node.js
- 29. Bạn nên giới thiệu thư viện phân tích HTML nào trong Java
- 30. Thư viện C++ để xử lý tín hiệu
Chỉ cần ra khỏi tò mò, bạn đã tìm kiếm ở tất cả? –
Thực sự cảm ơn bạn đã trả lời. Tôi có phải là phần mang lại kết quả tốt hơn cho một quá trình chuyên nghiệp mà đã viết ngã ba Parallel-ForkManager của chính mình? Thật phiền phức. Nó được phân tán mà không có sự cho phép nếu tôi ném một sắp xếp và chức năng xử lý dữ liệu, và làm thế nào để sử dụng cách sắp xếp kết quả trả về có thể? – freddiefujiwara
Bạn có thể làm rõ nhận xét ở trên không? –