Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 19555|Odgovoriti: 0

[Vir] Razmišljanja o aplikacijah za visokozmogljive TCP socket v C#

[Kopiraj povezavo]
Objavljeno na 2. 11. 2016 09:53:37 | | |

Sledi povzetek težav pri implementaciji visokozmogljive komponente socketa; če morate obravnavati le tisoče sočasnih aplikacij, se lahko osredotočite na pisanje kode, vendar se morate soočiti z desettisoči ali desettisoči sočasnih aplikacij. Povzetek naslednjih vprašanj naj bi bil v veliko pomoč pri pisanju te prijave.

SocketAsyncEventArgs

Ta objekt je na voljo po .NET 2.0 sp1 in se predvsem uporablja za izvajanje visokozmogljive obdelave podatkov iz socketov (za podrobnejši uvod lahko obiščete MSDN). Ta objekt omogoča tri načine nastavitve medpomnilnikov za pošiljanje in prejemanje povezanih sendov: SetBuffer(Int32, Int32), SetBuffer(Byte(), Int32, Int32, BufferList, prva dva ne moreta sodelovati z zadnjimi ( MSDN pojasnjuje zakaj). Ko nastavite Buffer, naj bo to SetBuffer(Byte(), Int32, Int32) ali BufferList, ga poskušajte nastaviti le enkrat na instanco SocketAsyncEventArgs skozi celotno življenjsko dobo programa, saj je ta nastavitev lahko zelo zahtevna za vire. Priporočljivo je, da podatkovni medpomnilnik nastavite preko SetBuffer(Byte(), Int32, Int32) med gradnjo SocketAsyncEventArgs, nato pa uporabite SetBuffer(Int32, Int32) za njegovo obdelavo. Ko želite nastaviti BufferList, je najbolje, da ne spreminjate <byte>izvorne kode bajta[], na katero se sklicuje IList<ArraySegment>. Če se to spremeni, bo povzročilo, da se SocketAsyncEventArgs ponovno poveže medpomnilnik in vpliva na učinkovitost.

SocketAsyncEventArgs pool

Kot je bilo omenjeno zgoraj, poskušajte čim manj spreminjati medpomnilnik, na katerega se sklicuje SocketAsyncEventArgs, da bi dosegli ta cilj. Zato je potrebno zgraditi aplikacijski nabor SocketAsyncEventArgs in čim bolj inicializirati objekt SocketAsyncEventArgs na začetku programa. Poleg zmanjšanja nastanka SocketAsyncEventArgs lahko gradnja bazenov tudi močno prihrani pomnilnik. Glavni razlog je, da ne moreš vedeti, kako veliko je vsako sporočilo, seveda lahko sporočilo določiš največjo omejitev pred načrtovanjem in nato nastaviš medpomnilnik, ki ustreza SocketAsyncEventArgs. Vendar je to velika izguba pomnilnika, saj nimajo vsa sporočila največje dolžine. Dodelite ustrezno količino medpomnilnika za SocketAsyncEventArgs, zagotovite klice prek skupin in fleksibilno zapišite sporočila v enega ali več SocketAsyncEventArgs ali shranite več sporočil v en SocketAsyncEventArgs za obdelavo.

Vrsta

Vidim, da je veliko praks tako, da se niti odpirajo neposredno ali jih po prejemu podatkov vržejo v bazen niti, kar je zelo slabo, ker to ne nadzoruje bolje dela niti, vključno s čakanjem niti. S prilagojenimi nitmi + čakalnimi vrstami lahko nadzorujete, koliko niti je odgovornih za katero delo, in delo v vrsti bo obstajalo samo v vrsti; Ne bo veliko niti ali veliko število čakalnih linij, kar bi povzročilo izgubo virov operacijskega sistema zaradi razporejanja niti.

Zamujena konsolidacija podatkov

Prenos podatkov z zamujenim združevanjem je način reševanja problema prekomernih omrežnih vhodno-vhodnih operacij, ki se ne uporablja v mnogih primerih, je pa pogost na strežnikih za igre. Nekdo mi je že postavil vprašanje: če je v sceni 400 uporabnikov, bo sprememba okolja vsakega uporabnika povedala ostalim. Če združeni podatki niso uporabljeni, bo nastala zelo zahtevna operacija omrežnega IO, kar je za IO sistem številčenja operacij težko prenašati. Zato je potrebno podatke združevati in pošiljati v ustreznem zamiku za trenutno aplikacijo.




Prejšnji:c# EF šifrira povezovalne nize podatkovne baze
Naslednji:Highcharts prikazuje več serij
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com