Hướng dẫn memory management in python
Với developer, việc hiểu quản lý bộ nhớ thường ít được nghĩ tới. Tuy nhiên, việc này rất quan trọng trong thực tế. Khi dữ liệu ít, ừ thì việc quản lý bộ nhớ nó không được quan tâm. Nhưng khi dự án phình to, dữ liệu nó nở ra nhiều, việc quản lý bộ nhớ không thể bỏ qua. Cái này cũng dễ hiểu, dữ liệu nhiều mà code không tối ưu được về memory, memory lại không nâng cấp dẫn tới ứng dụng chậm chạp hoặc xử lý sai nếu memory leaks. Nếu nâng memory, nó lại dẫn tới chi phí duy trì hệ thống tăng. Đều là vấn đề bất cập cả. Show Đầu tiên, bộ nhớ vật lý sẽ được OS tạo ra một bộ nhớ ảo, nơi mà tất cả các ứng dụng, bao gồm cả Python có thể truy cập. Bộ nhớ ảo đó sẽ có trình bảo lý riêng do hệ diều hành làm chủ. Trình quản lý bộ nhớ OS sẽ cấp một đoạn bộ nhớ cho Python. Với Python, hầu như việc quản lý bộ nhớ sẽ do Python Memory Manager xử lý. Với Python developer, phần quan trọng nhất của quản lý bộ nhớ là memory allocation. Memory allocation có 2 loại:
Static Memory Allocation còn được gọi là Compile-time allocation. Nó được áp dụng cho variable static và variable global. Memory cho các variable được cấp phát tại thời điểm compilation.
Dynamic Memory Allocation được áp dụng cho variable local, function argumen. Memory cho các variable được cấp phát tại thời điểm runtime.
Đó là điểm hay của Python. Nó có nghĩa, Dynamic Memory Allocation mới chính là nên tảng của Python Memory Management. Khi object không còn cần thiết, Python Memory Management sẽ tự động lấy lại bộ nhớ đã bị object đó chiếm dụng. Private heap chứa đựng toàn bộ Python objects và data structures. Python memory manager quản lý các private heap theo yêu cầu và developer không có kiểm soát các private heap này. Python memory manager cũng sẽ tương tác với system memory manager để đame bảo có đủ không gian cho private heap. Python memory manager quản lý các khổi bộ nhớ, chúng được
gọi là các Một điều quan trọng là Python memory manager không nhất thiết giải phóng bộ nhớ từ object bị destroyed trở lại OS. Có thể, nó sẽ trả lại cho python interpreter. Python cũng sẽ có một số lượng nhở các objects allocator được giữa lại để sử dụng thêm. Best Practices for Efficient Python CodeMục đích của Practices là giúp Python code của bạn sử dụng memory một cách tối ưu hơn. Sử dụng joinTa có đoạn code:
Thay thế bằng:
Tránh sử dụng + để nối các stringLý do là bởi, string thì immutable, mỗi khi thêm một element vào string, Python sẽ tạo ra một string mới với một địa chỉ mới trên memory. Điều này sẽ làm memory cần được phân bổ mỗi lần thay string. Thay thế thì có thể chọn một số giải pháp:
Hoặc:
Từ bản
Sử dụng GeneratorsThông thường thì một hàm thường sẽ Ví dụ:
Đặt evaluations ngoài loopVí dụ chuẩn mà bạn nên dùng:
Gán function cho một biến cục bộPython truy cập vào các variable local tốt hơn nhiều so với variable global.
Sử dụng built-in functions and librariesBạn nên sử dụng buil-in functions và libraries bất cứ lúc nào có thể. Lý do, bởi những functions/libraries đó được tối ưu tốt nhất cho performance. Ví dụ:
Thay thế bằng:
Sử dụng itertools thay thế loop
Ví dụ:
Thay thế bằng:
Check for performance in Python codePython hỗ trợ 2 modules: cProfile và Profile giúp việc check performance code.
Tóm lạiDeveloper nên chú ý tới việc quản lý bộ nhớ. Nó giúp bạn tự tin hơn khi xử lý những project lớn và yêu cầu hiều năng cao. Source: https://towardsdatascience.com/memory-management-in-python-6bea0c8aecc9 |