Berbilang pemprosesan selalunya melibatkan penciptaan berbilang proses untuk melaksanakan tugasan selari. Apabila memproses objek dalam memori yang besar, menjadi penting untuk meminimumkan overhed yang berkaitan dengan penyalinan dan perkongsian data antara proses ini. Artikel ini meneroka cara untuk berkongsi tatasusunan besar, baca sahaja dan objek Python sewenang-wenangnya dengan cekap menggunakan memori kongsi.
Kebanyakan sistem pengendalian berasaskan unix menggunakan salinan -on-write fork() semantik. Ini bermakna apabila proses baharu dicipta, ia pada mulanya berkongsi ruang memori yang sama dengan proses induk. Selagi data dalam memori kongsi ini tidak diubah suai, ia kekal boleh diakses oleh semua proses tanpa menggunakan memori tambahan.
Untuk tatasusunan baca sahaja yang besar, pendekatan yang paling cekap ialah membungkusnya ke dalam struktur tatasusunan yang cekap menggunakan NumPy atau tatasusunan. Data ini kemudiannya boleh diletakkan dalam memori kongsi menggunakan multiprocessing.Array. Dengan menghantar tatasusunan kongsi ini kepada fungsi anda, anda menghapuskan keperluan untuk menyalin dan menyediakan semua proses dengan akses terus kepada data.
Jika anda memerlukan objek kongsi boleh tulis, anda perlu menggunakan beberapa bentuk penyegerakan atau penguncian untuk memastikan integriti data. Pemprosesan berbilang menawarkan dua pilihan:
Sementara garpu salin-pada-tulis() secara amnya mengurangkan overhed , ujian telah menunjukkan perbezaan masa yang ketara antara pembinaan tatasusunan dan pelaksanaan fungsi menggunakan pelbagai pemprosesan. Ini menunjukkan bahawa walaupun penyalinan tatasusunan dielakkan, mungkin terdapat faktor lain yang menyumbang kepada overhed. Overhed bertambah dengan saiz tatasusunan, menunjukkan potensi ketidakcekapan berkaitan memori.
Jika multiprocessing tidak memenuhi keperluan khusus anda, terdapat banyak perpustakaan pemprosesan selari lain yang tersedia dalam Python. Setiap pustaka menawarkan pendekatan tersendiri untuk mengendalikan memori yang dikongsi, dan patut diterokai mana yang paling sesuai untuk aplikasi anda.
Atas ialah kandungan terperinci Bagaimanakah Memori Dikongsi Mengoptimumkan Pemprosesan Berbilang untuk Objek Data Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!