Tôi đã phát hiện ra Perl forking và tôi khá trong tình yêu. Nhưng có một điều liên quan đến tôi - nếu tôi chỉ tách các quy trình trái và phải, chắc chắn điều này sẽ gây ra một số vấn đề ở đâu đó. Có một loại kiểm tra hợp lý mà người ta nên sử dụng để đảm bảo rằng ứng dụng nhỏ của tôi không ăn hết tất cả các tài nguyên của máy của tôi?Perl - chịu trách nhiệm forking
Lấy mẫu này mã:
foreach my $command (@commands) {
my $pid = fork();
if (!$defined $pid) {
#Fork failed. Do something.
} elsif ($pid == 0) { #This is the child.
system($command);
exit(0)
}
}
while (wait() != -1) {} #wait() will be -1 when the last child exits.
Vì vậy, đây sẽ làm việc tốt, và đẻ trứng ra một quy trình để xử lý mỗi lệnh. Tất cả sẽ xảy ra song song, điều tuyệt vời nếu các lệnh này hoàn toàn độc lập.
Nếu tôi đột nhiên có hơn 5.000 lệnh để chạy qua thì sao? Nó sẽ không được khôn ngoan để vô tư ngã ba mà nhiều quá trình. Vì vậy, loại kiểm tra nên được thực hiện, và làm thế nào?
)
Um, theo dõi có bao nhiêu bạn đã chia hai, và dừng lại ở một max vì vậy bạn không giết máy và có một sớm để được sysadmin rất giận dữ thức dậy lúc 3 giờ sáng? ;) –
Được rồi, nhưng "tối đa" hợp lý là gì? – Jeremy
Thật ngớ ngẩn khi gọi 'hệ thống' ở nơi bạn đã làm. 'system' về cơ bản là' fork' + 'exec' (child) +' waitpid' (parent). Thay đổi 'system' thành' exec'. – ikegami