2013-01-10 31 views
5

Tôi có một ứng dụng đói bộ nhớ lặp qua một cặp mảng, xử lý mọi kết hợp các phần tử. Hiện tại, kịch bản này rất thiếu RAM. Nó kết thúc bằng cách sử dụng khoảng 3GB RAM.Việc sử dụng bộ nhớ có tốt hơn với một quy trình lớn hay nhiều quy trình nhỏ không?

Câu hỏi của tôi là:

Bộ nhớ có hiệu quả hơn để xử lý từng kết hợp các yếu tố trong một quy trình lớn không? Hoặc là tốt hơn để bắt đầu một tiến trình con mới cho mỗi kết hợp.

Nói cách khác, nó là tốt hơn để làm phương án 1:

for i in param_set1: 
    for j in paramset2: 
     Do_A_Big_Job(i, j) 

Hoặc phương án 2:

import subprocess 

for i in param_set1: 
    for j in paramset2: 
     subprocess.call([Do_A_Big_Job_Script, i, j]) 

Bằng cách "tốt hơn", tôi có nghĩa là "sử dụng ít RAM".

Cảm ơn!

Chỉnh sửa Tôi rất tò mò về việc sử dụng bộ nhớ. Khi quá trình kết thúc, một hệ thống UNIX có giải phóng bộ nhớ đó không? Điều này có hiệu quả hơn bộ sưu tập rác của python cho hợp lý kịch bản được viết hay không? Tôi không có nhiều lõi có sẵn, vì vậy tôi mong đợi nhiều quá trình chạy nhiều hơn hoặc ít hơn song song.

+1

Việc sử dụng bộ nhớ phụ thuộc rất nhiều vào những gì bạn đang làm trên "công việc" của bạn (những biến bạn đang gán và giải phóng), không phải cách bạn phân phối chúng. Nếu mỗi công việc sử dụng rất nhiều bộ nhớ, chạy chúng song song sẽ làm cho bộ nhớ ngăn xếp. Cuộc phiêu lưu duy nhất là nó * có thể * nhanh hơn. – asermax

+0

Tôi sẽ đăng nó như là một câu trả lời, nhưng tôi không nghĩ rằng nó thực sự đủ điều kiện như là một câu trả lời xD Tôi chỉ cố gắng chỉ ra rằng bạn có thể đã được đặt câu hỏi điều sai trái. Chỉnh sửa của bạn có vẻ là một câu hỏi chính xác hơn và đáng để chờ ai đó biết về chủ đề đó. Btw, nó sẽ giúp thêm một số thẻ, để làm cho câu hỏi dễ tìm (như UNIX, bộ nhớ, tiến trình con, v.v.) – asermax

Trả lời

1

Chạy một quy trình đơn lẻ sẽ sử dụng ít RAM hơn, nhưng nó khiến việc tận dụng nhiều lõi/lõi trở nên khó khăn.

Nếu bạn không quan tâm phải mất bao lâu, hãy chạy một quy trình.

Là một sự thỏa hiệp, bạn chỉ có thể chạy một vài quy trình cùng một lúc thay vì khởi chạy tất cả cùng một lúc.

Các vấn đề liên quan