Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 2494|Jawab: 1

[Kiat] Dua atau tiga hal tentang Memori Bersama

[Salin tautan]
Diposting pada 23/07/2024 14.50.48 | | | |
Berpartisipasi dalam relokasi sistem lama, di mana Memori Bersama digunakan untuk berkomunikasi lintas proses (misalnya, memanggil Layanan Jendela ASP.NET), dan dipaksa untuk memahami pentingnya teknologi ini. Teknologi pengembang NET yang tidak populer, catatan khusus.

[Apa itu Memori Bersama?] 】
Ada istilah untuk komunikasi lintas proses, Interprocess Communictaion (IPC), yang memiliki opsi berikut pada platform Windows: Referensi:Login hyperlink terlihat.

Clipboard
Program A menempelkan konten ke clipboard, dan Program B mengambil konten dari clipboard.
COM
Dokumen Majemuk OLE memungkinkan file Word disematkan dalam lembar kerja Excel, dan Excel dapat dipanggil untuk diedit dengan dua klik.
Salinan Data
Program A mengirimkan pesan WM_COPYDATA ke Program B dalam format yang disepakati
DDE
DDE adalah protokol komunikasi yang memungkinkan aplikasi yang berbeda untuk bertukar data dalam format yang berbeda, yang dapat dianggap sebagai perpanjangan dari clipboard, dan dapat ditransfer terus menerus selain transfer satu kali. (Performa yang relatif buruk, tidak lagi disarankan)
Pemetaan File
Pemetaan File mengacu pada simulasi file sebagai bagian dari memori dalam suatu proses, ketika beberapa aplikasi bertukar data melalui pemetaan file bersama, yang disebut Memori Bersama Bernama, yang merupakan kinerja terbaik di antara berbagai metode IPC, tetapi harus dicegah dengan mekanisme sinkronisasi seperti Mutex.
Slot surat
Komunikasi satu arah, Klien Mailslot mengirim pesan ke Server Mailslot, dan pesan dihapus setelah dibaca oleh server, mendukung transmisi lintas mesin, dan juga dapat disiarkan satu-ke-banyak. (Panjang pesan siaran dibatasi hingga 400 byte, dan panjang pesan ditentukan oleh Server Mailslot saat dibuat untuk transmisi satu-ke-satu)
Pipa
Transmisi dua arah dibagi menjadi Pipa Anonim dan Pipa Bernama. Pipa Anonim umumnya digunakan untuk orientasi input/output standar antara program induk dan program anak, dan dua pipa harus dibangun untuk komunikasi dua arah, yang tidak dapat melintasi jaringan dan terbatas pada proses dengan hubungan dependen. Named Pipe dapat digunakan untuk bertukar data antara proses apa pun dan mendukung transfer proses lintas jaringan.
RPC
Remote Procedure Call (RPC) memungkinkan aplikasi untuk memanggil fungsi yang disediakan oleh aplikasi lain dan dapat dipanggil di seluruh jaringan. Windows RPC mematuhi standar ISO DCE dan mendukung integrasi lintas sistem operasi.
Soket Windows
Antarmuka komunikasi abstrak berdasarkan TCP/IP atau protokol jaringan lainnya, dan pertukaran data dilakukan melalui koneksi jaringan di lapisan bawah.
Memori Bersama adalah metode pertukaran data umum yang digunakan oleh pengembang C/C++ (Google dapat menemukan banyak contoh IPC yang diterapkan dengan Memori Bersama di Linux), sehingga pengembang C/C++ sering memilihnya sebagai saluran komunikasi di platform Windows.

【Latihan Praktis Memori Bersama】
Meskipun ada lebih sedikit orang yang menggunakannya, .NET memiliki namespace System.IO.MemoryMappedFiles bawaan, tidak sulit untuk memutar Memori Bersama, hampir sama dengan file operasi, selama Anda memiliki pengalaman dalam operasi terkait FileStream, Anda dapat memulai dengan cepat, lihat contoh MSDN, saya menulis latihan program mini.Login hyperlink terlihat.

Saya menulis dua program, ProcessA untuk membuat ruang 1024 byte dengan MemoryMappedFile.CreateNew() dan berlatih mengoper dan menangkap dengan ProcessB lainnya. Karena 1024 byte dibagikan oleh dua program, saya merencanakan 512 byte pertama menjadi ProcessA ditulis ke ProcessB dan 512 terakhir untuk menjadi ProcessB ditulis ke ProcessA read, dan program menggunakan CreateViewStream untuk meneruskan alamat awal dan panjang untuk menunjuk ke areanya sendiri. Untuk menghindari konflik baca/tulis saat ProcessA dan ProcessB mengakses MemoryMappedFile, saya menggunakan kunci Mutex untuk mengontrol bahwa hanya satu Proses yang dapat mengakses MemoryMappedFile pada satu waktu. Proses pengujian membuat MemoryMappedFile untuk ProcessA, menulis string pesan – > ProcessB membaca string pesan dan menulis string respons – > ProcessA membaca string respons, dan mengakhiri.

Prosedur ProcessA adalah sebagai berikut:

Prosedur ProcessB adalah sebagai berikut:

Tes berhasil!



【Tips Tambahan】

1. Bagaimana cara melihat MemoryMappedFile yang saat ini diaktifkan di Windows?

SystemInternals memiliki alat AccessChk yang mencantumkan semua file, folder, registri, objek, dan layanan Windows yang dapat diakses oleh Windows. MemoryMappedFile adalah objek Windows, dan Anda dapat menggunakan perintah berikut untuk mencantumkan semua objek dan mengarsipkannya
accesschk -osv > e:\objList.txt
Cari nama MemoryMappedFile di dalamnya, dan jika ada, Anda dapat melihat catatan yang mirip dengan berikut ini:
\Sessions\1\BaseNamedObjects\DARKTHREAD
  Jenis: Bagian
  Tingkat Wajib Menengah (Default) [Tanpa Write-Up]
  RW NT OTORITAS\SISTEM
    SECTION_ALL_ACCESS
  RW DOMAIN\UserName
    SECTION_ALL_ACCESS
  RW DOMAIN\UserName-S-1-5-5-0-954410
    SECTION_ALL_ACCESS

Unduhan alat AccessChk:Login hyperlink terlihat.

2. Prasetel MemoryMappedFile diaktifkan di sesi pengguna, dan preset tidak dapat digunakan di seluruh sesi. Misalnya, jika dua ASP.NET milik AppPool yang berbeda memiliki identitas eksekusi yang berbeda, meskipun nama MemoryMappedFile sama, itu masih satu salinan dari masing-masing, sehingga perlu untuk mengonfirmasi bahwa identitas eksekusi yang digunakan oleh kedua belah pihak adalah sama.

3. Untuk berkomunikasi di seluruh identitas eksekusi yang berbeda, MemoryMappedFile dapat diberi nama "Global\ Filename" (perhatikan bahwa kasus Global berbeda, saya menginjak guntur yang salah ditulis sebagai jalur GLOBAL tidak valid), sehingga dapat diakses di seluruh identitas eksekusi.
Namun, perlu dicatat bahwa proses selain Sesi 0 (Layanan Windows) perlu memiliki izin SeCreateGlobalPrivilege untuk membuat Global\... MemoryMappedFile。 (Berkas MSDN)
Untuk Sesi 0, Anda dapat merujuk ke artikel ini oleh MVP di sisi lain - Penetrasi Sesi 0 Isolasi (1) (Login hyperlink terlihat.Ada pengantar yang sangat rinci di dalamnya.

Dicetak ulang dari:Login hyperlink terlihat.





Mantan:Masalah pemuatan sumber daya statis gambar Angular 18
Depan:Dapatkan gambaran singkat tentang struktur konten file Bootstrap 5
 Tuan tanah| Diposting pada 10/08/2024 21.36.57 |
.NET/C# mengimplementasikan program singleton berdasarkan Mutex dan MemoryMappedFile
https://www.itsvse.com/thread-10808-1-1.html
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com