Memori Dikongsi dalam Berbilang Pemprosesan
Dalam modul pemproses berbilang Python, persoalan sama ada struktur data besar dikongsi atau disalin antara proses menjadi kebimbangan.
Kebimbangan Asal
Apabila mencipta berbilang proses menggunakan berbilang pemprosesan. Memproses dan menghantar senarai besar sebagai hujah, kebimbangan adalah sama ada senarai ini disalin untuk setiap proses atau dikongsi antara mereka. Jika setiap proses membuat salinan, ia boleh meningkatkan penggunaan memori dengan ketara.
Copy-on-Write
Linux menggunakan pendekatan copy-on-write, yang membayangkan bahawa data tidak disalin secara fizikal sehingga ia diubah suai. Ini menunjukkan bahawa senarai tidak akan diduplikasi untuk setiap subproses.
Pengiraan Rujukan
Walau bagaimanapun, mengakses objek mengemas kini kiraan rujukannya. Jika subproses mengakses elemen senarai, kiraan rujukannya meningkat. Akibatnya, tidak jelas sama ada keseluruhan objek (senarai) akan disalin.
Pemantauan Penggunaan Memori
Pemerhatian menunjukkan bahawa keseluruhan objek, sebenarnya, digandakan untuk setiap subproses, mungkin disebabkan pengiraan rujukan. Ini bermasalah jika senarai tidak boleh diubah suai dan kiraan rujukannya sentiasa positif.
Memori Dikongsi dalam Python 3.8.0
Python 3.8.0 memperkenalkan 'true' memori dikongsi menggunakan modul multiprocessing.shared_memory. Ini membolehkan penciptaan eksplisit objek memori yang dikongsi yang boleh diakses daripada pelbagai proses tanpa menyalin.
Ringkasnya, pendekatan salin atas tulis dalam Linux mengurangkan kemungkinan menyalin struktur data yang besar, tetapi pengiraan rujukan boleh membawa kepada penyalinan sebenar. Menggunakan memori kongsi 'true' dalam Python 3.8.0 menyelesaikan isu ini dengan menyediakan mekanisme untuk mencipta objek dikongsi secara eksplisit.
Atas ialah kandungan terperinci Adakah Struktur Data Besar Dikongsi atau Disalin dalam Pemprosesan Berbilang Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!