Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 2494|Atbildi: 1

[Padomi] Divas vai trīs lietas par koplietojamo atmiņu

[Kopēt saiti]
Publicēts 23.07.2024 14:50:48 | | | |
Piedaloties vecās sistēmas pārvietošanā, kur koplietojamā atmiņa tiek izmantota, lai sazinātos starp procesiem (piemēram, izsaucot Window Service ASP.NET), un ir spiests saprast šīs tehnoloģijas nozīmi. NET izstrādātāju nepopulārās tehnoloģijas, īpašas piezīmes.

[Kas ir kopīga atmiņa?] 】
Starpprocesu komunikācijai ir termins Interprocess Communictaion (IPC), kam Windows platformā ir šādas iespējas: Atsauce:Hipersaites pieteikšanās ir redzama.

Starpliktuvē
Programma A ielīmē saturu starpliktuvē, un programma B izgūst saturu no starpliktuves.
COM
OLE saliktais dokuments ļauj Word failus iegult Excel darblapās, un Excel var izsaukt rediģēšanai ar diviem klikšķiem.
Datu kopija
Programma A nosūta WM_COPYDATA ziņojumus programmai B saskaņotajā formātā
DDE
DDE ir sakaru protokols, kas ļauj dažādām lietojumprogrammām apmainīties ar datiem dažādos formātos, ko var uzskatīt par starpliktuves paplašinājumu, un to var nepārtraukti pārsūtīt papildus vienreizējai pārsūtīšanai. (Salīdzinoši slikta veiktspēja, vairs nav ieteicama)
Failu kartēšana
Failu kartēšana attiecas uz faila simulēšanu kā atmiņas daļu procesā, kad vairākas lietojumprogrammas apmainās ar datiem, izmantojot koplietojamu failu kartēšanu, ko sauc par nosaukto koplietojamo atmiņu, kas ir vislabākā veiktspēja starp dažādām IPC metodēm, bet to novērš sinhronizācijas mehānismi, piemēram, Mutex.
E-pasta vietnes
Vienvirziena saziņa, Mailslot klients nosūta ziņojumus uz Mailslot serveri, un ziņojumi tiek izdzēsti, kad tos nolasījis serveris, atbalstot vairāku mašīnu pārraidi, un tos var pārraidīt arī viens pret daudziem. (Apraides ziņojuma garums ir ierobežots līdz 400 baitiem, un ziņojuma garumu nosaka Mailslot serveris, kad tas ir izveidots pārraidei viens pret vienu)
Caurules
Divvirzienu pārraide ir sadalīta anonīmā caurulē un nosauktajā caurulē. Anonīma caurule parasti tiek izmantota standarta ievades/izvades orientācijai starp vecāku programmu un bērna programmu, un divas caurules ir jāveido divvirzienu saziņai, kas nevar būt visā tīklā un ir ierobežota ar procesiem ar atkarīgām attiecībām. Named Pipe var izmantot, lai apmainītos ar datiem starp jebkuru procesu un atbalstītu starptīkla procesu pārsūtīšanu.
RPC
Attālās procedūras izsaukums (RPC) ļauj lietojumprogrammām izsaukt funkcijas, ko nodrošina citas lietojumprogrammas, un tās var izsaukt tīklos. Windows RPC atbilst ISO DCE standartam un atbalsta starpoperētājsistēmu integrāciju.
Logu ligzdas
Abstrakta komunikācijas saskarne, kuras pamatā ir TCP/IP vai citi tīkla protokoli, un datu apmaiņa tiek veikta caur tīkla savienojumiem apakšējā slānī.
Koplietojamā atmiņa ir izplatīta datu apmaiņas metode, ko izmanto C/C++ izstrādātāji (Google var atrast daudzus IPC piemērus, kas ieviesti ar koplietojamo atmiņu operētājsistēmā Linux), tāpēc C/C++ izstrādātāji to bieži izvēlas kā saziņas kanālu Windows platformā.

【Kopīgas atmiņas praktiskais vingrinājums】
Lai gan to izmanto mazāk cilvēku, .NET ir iebūvēta System.IO.MemoryMappedFiles nosaukumvieta, nav grūti atskaņot koplietojamo atmiņu, gandrīz tāpat kā operētājfailus, ja vien jums ir pieredze ar FileStream saistītās operācijās, varat ātri sākt, skatiet MSDN piemēru, es uzrakstīju mini programmas vingrinājumu.Hipersaites pieteikšanās ir redzama.

Es uzrakstīju divas programmas, ProcessA, lai izveidotu 1024 baitu telpu ar MemoryMappedFile.CreateNew() un praktizētu nodošanu un ķeršanu ar otru ProcessB. Tā kā 1024 baitus koplieto divas programmas, es plānoju, ka pirmie 512 būs ProcessA rakstīti uz ProcessB un pēdējie 512 tiks rakstīti ProcessB uz ProcessA lasīt, un programma izmanto CreateViewStream, lai nodotu sākuma adresi un garumu, lai norādītu uz savu apgabalu. Lai izvairītos no lasīšanas/rakstīšanas konfliktiem, kad ProcessA un ProcessB piekļūst MemoryMappedFile, es izmantoju Mutex bloķēšanu, lai kontrolētu, ka tikai viens process var piekļūt MemoryMappedFile vienlaikus. Testa process izveido MemoryMappedFile ProcessA, raksta ziņojumu virkni - > ProcessB nolasa ziņojuma virkni un raksta atbildes virkni - > ProcessA nolasa atbildes virkni un beidzas.

ProcessA procedūra ir šāda:

ProcessB procedūra ir šāda:

Tests bija veiksmīgs!



【Papildu padomi】

1. Kā apskatīt MemoryMappedFile, kas pašlaik ir iespējots sistēmā Windows?

SystemInternals ir AccessChk rīks, kas uzskaita visus failus, mapes, reģistrus, objektus un Windows pakalpojumus, kas ir pieejami Windows. MemoryMappedFile ir Windows objekts, un varat izmantot šo komandu, lai uzskaitītu visus objektus un tos arhivētu
accesschk -osv > e:\objList.txt
Meklējiet tajā nosaukumu MemoryMappedFile, un, ja tas pastāv, varat redzēt ierakstu, kas līdzīgs šim:
\Sesijas\1\BaseNamedObjects\DARKTHREAD
  Tips: Sadaļa
  Vidējs obligātais līmenis (noklusējums) [Bez ierakstīšanas]
  RW NT IESTĀDE\SISTĒMA
    SECTION_ALL_ACCESS
  RW DOMĒNS\Lietotājvārds
    SECTION_ALL_ACCESS
  RW DOMĒNS\Lietotājvārds-S-1-5-5-0-954410
    SECTION_ALL_ACCESS

AccessChk rīka lejupielāde:Hipersaites pieteikšanās ir redzama.

2. MemoryMappedFile sākotnējais iestatījums ir iespējots lietotāja sesijā, un sākotnējo iestatījumu nevar izmantot dažādās sesijās. Piemēram, ja diviem ASP.NET, kas pieder dažādiem AppPools, ir atšķirīgas izpildes identitātes, pat ja MemoryMappedFile nosaukums ir vienāds, tas joprojām ir viena katra kopija, tāpēc ir jāapstiprina, ka abu pušu izmantotā izpildes identitāte ir vienāda.

3. Lai sazinātos starp dažādām izpildes identitātēm, MemoryMappedFile var nosaukt par "Global\ Filename" (ņemiet vērā, ka Global gadījums ir atšķirīgs, es uzkāpu uz pērkona, kas tika kļūdaini uzrakstīts, jo GLOBAL ceļš ir nederīgs), lai tam varētu piekļūt starp izpildes identitātēm.
Tomēr jāņem vērā, ka procesiem, kas nav 0. sesija (Windows pakalpojums), ir nepieciešama atļauja SeCreateGlobalPrivilege, lai izveidotu Global\... MemoryMappedFile。 (MSDN fails)
Par 0. sesiju varat atsaukties uz šo MVP rakstu no otras puses - Iekļūšana 0. sesijas izolācija (1) (Hipersaites pieteikšanās ir redzama.Tajā ir ļoti detalizēts ievads.

Pārdrukāts no:Hipersaites pieteikšanās ir redzama.





Iepriekšējo:Angular 18 attēla statisko resursu ielādes problēma
Nākamo:Iegūstiet ātru pārskatu par Bootstrap 5 failu satura struktūru
 Saimnieks| Publicēts 10.08.2024 21:36:57 |
.NET/C# ievieš programmu singleton, kas balstīta uz Mutex un MemoryMappedFile
https://www.itsvse.com/thread-10808-1-1.html
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com