Banyak dari ini berkaitan dengan sejarah dan arah masa depan.
Sekali waktu ada dua versi unix utama (dan agak bersaing) - sistem V dan BSD. SysV memiliki versi IPC sendiri, termasuk 3 besar - memori bersama, semaphore, dan antrian pesan. POSIX datang untuk mencoba dan menyatukan berbagai hal.
Jadi saat ini kami memiliki dua versi - posix shared memory, MQs, dan semaphore dan versi sysV. Untuk membuatnya sedikit lebih membingungkan, versi sysV juga bagian dari posix.
Jadi pada dasarnya pertanyaan Anda adalah apakah Anda ingin menggunakan memori bersama gaya Posix atau sysV? Secara umum kebanyakan orang mengambil pandangan jangka panjang dan memilih Posix karena tampaknya jalan menuju masa depan. Namun, secara realistis, hal-hal sysV begitu tertanam dalam begitu banyak sistem sehingga Anda pasti ragu bahwa hal itu akan hilang.
Jadi, menghilangkan hal-hal jangka panjang, tergantung pada apa yang masuk akal untuk proyek dan selera Anda. Secara umum versi sysV sebenarnya cenderung agak lebih kuat tetapi mereka memiliki antarmuka kikuk yang bagi kebanyakan orang sedikit membingungkan pada kontak pertama. Ini terutama berlaku untuk sysV semaphore dan antrian pesan. Dalam hal memori bersama, dapat dikatakan sysV dan posix canggung. Versi sysV membawa ftok
yang kikuk dan hal-hal penting sementara posix akhirnya menerima banyak panggilan dan beberapa kondisi balapan untuk disiapkan. Dari luar, versi posix memiliki keuntungan karena menggunakan sistem file dan dapat dipertahankan dengan fungsi baris perintah standar seperti 'rm' daripada mengandalkan program utilitas terpisah (mis. ipcs
) yang dibutuhkan sysV.
Jadi mana yang harus Anda gunakan? Sebagai aturan, versi posix. Tetapi Anda harus benar-benar membiasakan diri dengan versi sysV. Mereka memiliki beberapa fitur yang melampaui kemampuan versi posix yang mungkin ingin Anda manfaatkan dalam situasi tertentu.
Kedua metode itu layak. mmap
metode ini sedikit lebih ketat daripada shmget
, tetapi lebih mudah digunakan. shmget
adalah model memori bersama System V lama dan memiliki dukungan terluas. mmap
/shm_open
adalah cara POSIX baru untuk melakukan memori bersama dan lebih mudah digunakan. Jika OS Anda mengizinkan penggunaan memori bersama POSIX maka saya sarankan untuk melakukannya.
Beberapa petunjuk:
- Jika Anda membuat anak Anda melalui
fork
lalummap
denganMAP_ANONYMOUS | MAP_SHARED
sejauh ini merupakan cara termudah - hanya satu panggilan.MAP_ANONYMOUS
namun merupakan ekstensi Linux yang tidak ditentukan oleh POSIX. - Jika Anda memulai proses secara mandiri, tetapi dapat menyediakannya dengan nama memori bersama, maka
shm_open
(+ftruncate
) +mmap
denganMAP_SHARED
adalah dua/tiga panggilan. Membutuhkanlibrt
pada beberapa OS. - Jika OS Anda memiliki
/dev/shm/
lalushm_open
sama dengan membuka file di/dev/shm/
.