Descărcarea fișierelor de pe Internet. Care sunt acțiunile obișnuite ale programatorilor în acest caz?

După ce am analizat tehnicile de compresie, concatenare, stocare în cache și paralelizare, o întrebare rezonabilă de luat în considerare este: Cât de mult din pagină ar trebui să se încarce cu fișierul HTML principal și cât de mult ar trebui să încarce numai fișierele externe?

A fost asamblat un mediu de testare sub forma unei singure pagini, pentru care s-au aplicat diverse tehnici de optimizare (în același timp, s-a obținut o accelerare reală pentru încărcarea unei pagini arbitrare și s-a arătat cum toate aceste tehnici afectează efectiv viteza de încărcare a paginii).

În plus, au fost efectuate calcule teoretice pentru a determina distribuția optimă a sarcinii pe etape, ținând cont de toate aspectele.

Situație reală

Orez. 29. Diagrama de încărcare a site-ului (nemodificat) WebHiTech.ru

Ideea principală din spatele variației fluxului de încărcare a fost crearea cantitate minima„pete albe” pe diagrama de sarcină. După cum se poate observa din fig. 29, aproximativ 80% din încărcarea paginii se datorează timpului de întrerupere a conexiunii (în mod firesc, acest grafic nu reflectă încărcarea reală a canalelor de descărcare deschise în browser, cu toate acestea, când imaginea este clarificată, situația practic nu se schimbă). Descărcările paralele încep numai după trecerea „ blocaj", care se termină (în acest caz) după ce pagina este preîncărcată - după fișierul CSS.

Pentru a optimiza viteza de descărcare, trebuie să reducem numărul de fișiere (săgeți verticale) descărcate în paralel și să le „mutăm” cât mai mult posibil spre stânga (săgeată orizontală). Reducerea „spațiilor albe” (de fapt, reducerea timpului de nefuncționare a canalelor de descărcare), teoretic, ar trebui să crească viteza de descărcare datorită paralelizării acesteia. Să vedem dacă acesta este într-adevăr cazul și cum se poate realiza.

Pasul unu: Pagina simplă

În primul rând, am luat o pagină obișnuită, pentru care a fost folosită numai compresia gzip a fișierului HTML. Acesta este cel mai simplu lucru care poate fi făcut pentru a accelera încărcarea paginii. Această optimizare a fost luată ca bază împotriva căreia totul a fost comparat. Pentru teste, pagina principală a competiției WebHiTech (http://webhitech.ru/) a fost pregătită cu un număr mic de imagini suplimentare (astfel încât să fie mai multe obiecte externe și dimensiunea paginii a crescut).

Chiar la începutul (capul) paginii, se măsoară timpul inițial, iar în funcție de evenimentul window.onload (rețineți că numai prin acesta, deoarece doar acesta garantează că întreaga pagină se află în browserul clientului) - finalul timp, apoi se calculează diferența. Dar acesta este un exemplu foarte simplu, să trecem la pașii următori.

Pasul doi: redimensionați imaginile

Mai întâi, să minimizăm toate imaginile originale (principalele tehnici aplicate au fost deja tratate în al doilea capitol). S-a dovedit destul de amuzant: dimensiunea totală a paginii a scăzut cu 8%, iar viteza de încărcare a crescut cu 8% (adică s-a obținut accelerația proporțională).

În plus, odată cu reducerea la minimum a imaginilor, foaia de stil (prin CSS Tidy) și fișierul HTML în sine au fost reduse (spațiile suplimentare și rupturile de linie au fost eliminate). Nu existau scripturi pe pagină, așa că timpul general de încărcare nu s-a schimbat prea mult. Dar acesta nu este sfârșitul și trecem la a treia etapă.

Pasul trei: all-in-one

Ai putea folosi data:URI și încorpora toate imaginile în fișierele HTML/CSS corespunzătoare, reducând astfel dimensiunea paginii (datorită compresiei gzip, practic, deoarece foaia de stil nu a fost comprimată înainte) cu încă 15%, însă încărcarea timpul a scăzut cu doar 4% (cu memoria cache activată, numărul de solicitări cu un răspuns de 304 a scăzut). Când pagina se încarcă pentru prima dată, îmbunătățirile sunt mult mai consistente: 20%.

Fișierul CSS, desigur, a fost inclus și în HTML, așa că atunci când întreaga pagină s-a încărcat, a fost făcută o singură cerere către server (pentru a afișa întreaga pagină cu câteva zeci de obiecte).

Pasul patru: tăierea fluxului

Puteți încerca să distribuiți fișierul monolitic inițial în mai multe (5-10) părți egale, care vor fi apoi asamblate și încorporate direct în document.body.innerHTML. Aceste. Fișierul HTML inițial în sine este foarte mic (de fapt, conține doar un preîncărcare) și se încarcă foarte repede, iar după aceea începe descărcarea paralelă a multor fișiere identice, care folosesc canalul de descărcare cât mai dens posibil.

Cu toate acestea, după cum au arătat cercetările, costurile solicitărilor XHR și ale asamblarii innerHTML pe client depășesc cu mult beneficiile unei astfel de paralelizări. Drept urmare, pagina va dura de 2-5 ori mai mult pentru încărcare, dar dimensiunea nu se schimbă prea mult.

Puteți încerca să utilizați cadre iframe clasice în loc de solicitări XHR pentru a evita unele costuri. Acest lucru ajută, dar nu foarte mult. Încărcarea paginii va dura de 2-3 ori mai mult decât ați dori.

Și puțin despre problema folosirii cadrelor: de foarte multe ori cele mai utilizate părți ale unui site sunt construite pe ele pentru a reduce dimensiunea datelor transmise. După cum am menționat mai sus, majoritatea întârzierilor se datorează cantitate mare obiecte externe de pe pagină, nu din cauza dimensiunii obiectelor externe. Prin urmare, mai departe în acest moment această tehnologie nu este nici pe departe la fel de relevantă ca în anii 90 ai secolului trecut.

De asemenea, este de menționat că atunci când se folosește un iframe pentru navigarea pe site, apare problema actualizării tocmai a acestei navigări (de exemplu, dacă dorim să evidențiem un element de meniu ca fiind activ). Soluția corectă la această problemă necesită ca utilizatorul să aibă JavaScript activat și este destul de netrivial din punct de vedere tehnic. În general, dacă vă puteți descurca fără cadre atunci când proiectați un site web, atunci nu trebuie să le utilizați.

Pasul cinci: Memorarea în cache algoritmică

După ce am analizat situația cu primii trei pași, vedem că o parte din accelerarea poate fi realizată permițând browserului să încarce fișierele externe ca obiecte separate, și nu ca cod JSON care trebuie să fie într-un fel transformat. În plus, apar aspecte ale stocării în cache: este mai rapid să încărcați jumătate din pagină, iar pentru a doua jumătate, verificați cu solicitările cu codurile de stare 304 că obiectele nu s-au schimbat. Încărcarea întregii pagini de către client pentru prima dată în acest caz va fi puțin mai lentă (în mod firesc, decizia în această chestiune va depinde de numărul de utilizatori obișnuiți ai resursei).

Drept urmare, a fost posibilă reducerea timpului de încărcare cu încă 5%, accelerația finală (în cazul unui cache complet) a ajuns la 20%, iar dimensiunea paginii a scăzut cu 21%. Este posibil să includeți nu mai mult de 50% din dimensiunea paginii în încărcarea obiectelor externe, iar obiectele trebuie să fie aproximativ egale ca dimensiune (diferența nu este mai mare de 20%). În acest caz, viteza de încărcare a paginii pentru utilizatorii cu un cache complet va fi cea mai mare. Dacă o pagină este optimizată pentru utilizatorii cu un cache gol, atunci cele mai bune rezultate vor fi obținute numai prin includerea tuturor fișierelor externe în HTML-ul sursă.

Masa finală

Mai jos sunt toate rezultatele optimizării pentru o singură pagină. Descărcarea a fost testată pe o conexiune de 100 Kbps, numărul total de obiecte inițiale: 23.

Numărul pasului

Descriere

Dimensiunea totală (kb)

Timp de încărcare (ms)

1 Pagina obișnuită. Nimic nu este comprimat (doar html este servit prin gzip) 63 117
2 Fișierele și imaginile HTML/CSS sunt minimizate 58 108
3 Un singur dosar. Imaginile sunt inserate prin data:URI 49 104
4 Fișierul HTML descarcă 6 bucăți de date în paralel și le colectează pe client 49 233
4.5 Fișierul HTML încarcă 4 cadre iframe 49 205
5 Opțiunea #3, doar imaginile JPEG (aproximativ aceeași dimensiune) sunt transferate în fișiere și încărcate prin (new Image()).src în pagina principală 49 98

Tabelul 5. Diverse moduriîncărcarea paralelă a obiectelor de pe pagină

Pasul șase: echilibrarea etapelor de încărcare

Deci, cum echilibrăm cel mai bine încărcarea paginii între etapele paginii? Unde este „mijlocul de aur” care asigură încărcarea optimă? Să începem cu presupunerea că am implementat deja toate sfaturile de reducere a datelor. Acest lucru se poate face oricând, este destul de simplu (în majoritatea cazurilor sunt necesare doar modificări minore ale configurației serverului). Să presupunem, de asemenea, că conținutul static este servit cu anteturi de cache (pentru a returna 304 răspunsuri dacă fișierul de resurse nu s-a schimbat fizic de la ultima vizită).

Ce urmează? Acțiunile ulterioare depind de structura fișierelor externe. Dacă există un număr mare (mai mult de două) de fișiere incluse în pagini, trebuie să combinați fișierele de stil și fișierele script. Accelerarea preîncărcării paginii va fi evidentă.

Dacă volumul de scripturi, chiar și după compresie, este suficient de mare (mai mult de 10 KB), atunci merită să le conectați înainte de închidere, sau în general încărcați folosind evenimentul combinat window.onload (începutul capitolului al șaptelea este dedicat încărcării dinamice a scripturilor). Aici, de fapt, transferăm o parte din încărcarea din a doua etapă la a patra, doar încărcarea „vizuală” a paginii este accelerată.

Numărul total de poze ar trebui să fie minim. Cu toate acestea, aici este, de asemenea, foarte important să se distribuie uniform volumul lor pe parcursul celei de-a treia etape de încărcare. Destul de des, o imagine de 50-100 KB încetinește finalizarea descărcării, împărțirea acesteia în 3-4 componente poate accelera procesul general. Prin urmare, atunci când utilizați un număr mare de imagini de fundal, este mai bine să le împărțiți în blocuri de 10-20, care vor fi încărcate în paralel.

Pasul șapte: echilibrarea stocării în cache

Dacă, totuși, există mai mult de 10 obiecte externe pe pagină în a treia etapă (imagini și diferite fișiere multimedia), atunci merită să introduceți o gazdă suplimentară pentru a crește numărul de fire paralele. În acest caz, costurile unei interogări DNS vor fi recuperate printr-o reducere a timpului mediu de stabilire a conexiunii. 3 gazde trebuie introduse după 20 de obiecte etc. Nu mai mult de 4 în total (după cum a arătat un studiu al grupului de lucru Yahoo!, după 4 gazde, costurile sunt mai probabil să crească decât să scadă).

Întrebarea cât volum de pagină să includeți în fișierul HTML în sine (cod sub formă de CSS, JavaScript sau data:URI) și cât să lăsați pe obiectele externe, este foarte simplu de rezolvat. Soldul în acest caz este aproximativ egal cu raportul dintre numărul de vizite regulate și unice. De exemplu, dacă 70% dintre utilizatori vizitează site-ul în timpul săptămânii, atunci aproximativ 70% din pagină ar trebui să fie în obiecte externe și doar 30% în documentul HTML.

Când o pagină este menită să fie văzută o singură dată, este logic să includeți totul pe pagina în sine. Totuși, aici intră deja în vigoare aspectele psihologice. Dacă pentru utilizatorul mediu, pagina va dura mai mult de 3-4 secunde pentru a se încărca (ținând cont de timpul pentru cererea DNS și conexiunea la server), atunci va fi necesar să o împărțiți în două părți: versiunea inițială, care va fi afișat suficient de repede, iar restul paginii.

Este foarte important să înțelegeți ce etapă de încărcare este optimizată și ce vede un utilizator real (cu un cache clar și, poate, un canal lent). Citiți mai multe despre analiza procesului de încărcare a paginii la exemple concrete se spune în al optulea capitol.

Concluzie

Deci, folosind exemplul unei pagini obișnuite (deja destul de bine făcută, de remarcat), am realizat o accelerare a încărcării acesteia cu încă 15-20% (și asta fără a ține cont de utilizarea compresiei gzip pentru HTML, care în acest caz dă aproximativ 10% din viteza totală ). Cele mai importante metode au fost deja date mai sus, acum putem doar să menționăm că atunci când optimizați viteza paginii, este mai bine să ne bazați întotdeauna pe mecanismele interne ale browserului și să nu încercați să le emulați în JavaScript (în acest caz vorbim despre „tăierea” artificială a pârâului). Poate că în viitor, mașinile client vor deveni suficient de puternice (sau motoarele JavaScript vor deveni mai bine optimizate) pentru ca astfel de metode să funcționeze. Acum există o singură alegere - memorarea în cache algoritmică.

Funcțiile încorporate ale Windows nu oferă posibilitatea de a relua descărcarea fișierelor - ca urmare, dacă conexiunea este pierdută, informațiile trebuie descărcate din nou, petrecând timp și nervi în plus și plătind pentru trafic suplimentar. Și chiar și cu o conexiune normală, această opțiune de descărcare nu poate fi apelată rapid, deoarece descărcarea se realizează într-un singur flux. Un alt lucru este managerii de descărcare speciali (manageri de descărcare), care pot relua descărcarea din punctul în care a fost întreruptă și pot împărți fișierele descărcate în secțiuni care sunt descărcate simultan, ceea ce vă permite să obțineți o creștere semnificativă a vitezei de descărcare.

Există mulți manageri de descărcare pe piață astăzi cu funcționalități similare - a afla care soluție va fi cea mai bună într-o anumită situație nu este ușor. Prin urmare, în acest articol vom conduce evaluare comparativă câțiva manageri de descărcare populari, oferiți de diferiți dezvoltatori.

Să clarificăm imediat că toate, desigur, acceptă descărcarea cu mai multe fire și reluarea fișierelor după o pierdere a conexiunii și selectează automat viteza de descărcare optimă (în funcție de tipul de conexiune). De asemenea, se integrează în browserele populare, înlocuind modulul standard de descărcare și monitorizează clipboard-ul, identificând în mod independent link-urile. Aceasta înseamnă că, în general, oricare dintre soluțiile menționate mai sus asigură descărcarea rapidă și fiabilă a fișierelor de pe serverele FTP și HTTP.

Managerii de descărcare diferă unul de celălalt în diferite nuanțe (a se vedea tabelul). În special, nu toate oferă descărcarea parțială a arhivelor ZIP, recunosc corect link-urile de pe site-uri de stocare a fișierelor, cum ar fi Rapidshare în modul gratuit și permit descărcarea directă (adică, pur și simplu adăugarea unei adrese URL precum http://www.youtube.com). /watch?v= ...) descărcați clipuri din serviciile video online3 (YouTube, Google Video etc.). Nu toți managerii de descărcare pot descărca de pe servere FTP și web securizate (adică folosind protocoalele SFTP și, respectiv, HTTPS) și vă permit să estimați dimensiunea fișierului înainte de a-l descărca. Iar suportul pentru clienții BitTorrent și eDonkey este implementat, în general, doar în unii manageri de descărcare, care, totuși, în opinia noastră, nu mai este atât de relevant, deoarece funcționalitatea unor astfel de clienți este limitată. Diferite soluții au liste diferite de browsere de internet acceptate, iar principiul unei astfel de integrări în sine este diferit: în unele cazuri este suficient doar să activați casetele de selectare corespunzătoare în setări, dar în altele va trebui mai întâi să descărcați și să instalați plug-in-ul corespunzătoare browserului. În plus, există diferențe mai subtile în ceea ce privește procesul de descărcare în sine - de exemplu, în unele soluții, atunci când este detectată activitatea browserului, prioritatea traficului se schimbă automat (și în unele cazuri acest lucru va trebui făcut manual), în altele puteți atribuie priorități descărcărilor (ceea ce este cazul unor produse nefurnizate), etc.

GetRight/GetRight Pro 6.3e

Dezvoltator: Software pentru faruri

Dimensiunea distributiei: GetRight - 4,78 MB; GetRight Pro - 4,91 MB

Munca sub control: Windows 95/98/Me/NT/2000/XP/Vista

Metoda de distribuire: shareware (demo de 30 de zile: GetRight - http://download.getright.com/getright-download.exe ; GetRight Pro - http://download.getright.com/getright_pro_setup.exe)

Preţ: GetRight - 19,95 USD; GetRight Pro - 49,95 USD

GetRight este un manager de descărcare care a fost prezent pe piață de mult timp și a câștigat popularitate datorită confortului și funcționării fiabile, dar astăzi nu mai este la fel de atractiv pentru o gamă largă de utilizatori, deoarece este inferior analogilor săi. într-o serie de parametri și este oferit la un preț foarte mare. Și, de fapt, dezvoltarea ulterioară a acestei soluții nu mai este în curs. Acest manager de descărcări vă permite să descărcați fișiere (inclusiv într-un program) prin protocoalele HTTP, HTTPS, FTP și FTPS și poate fi folosit pentru a descărca fișiere de pe serverele de partajare a fișierelor, pentru a primi videoclipuri muzicale noi pe un canal Podcast/RSS și pentru a descărca fișiere prin protocolul BitTorrent (este posibil să primiți simultan o parte din date prin FTP/HTTP și o parte din BitTorrent cu „lipire” ulterioară din mers). Este posibil să adăugați automat fișiere multimedia primite la listele de redare din aplicațiile MediaPlayer și iTunes. Cu toate acestea, utilitarul nu va ajuta la descărcarea videoclipurilor de pe site-uri de găzduire video și la descărcarea parțială a arhivelor.

GetRight se integrează automat în browserele de top și puteți specifica o listă de browsere de interes atunci când instalați utilitarul. Un browser special încorporat oferă vizualizarea structurii de foldere a serverelor FTP și a site-urilor HTTP. Traficul este limitat manual prin setarea limitei maxime admisibile de viteză de descărcare și puteți activa o casetă de selectare pentru a elimina această limitare atunci când screensaver-ul este activ. Înainte de descărcare, puteți verifica adresa de interes pentru existență și puteți verifica dimensiunea fișierului. Numărul de fișiere descărcate simultan și numărul de fluxuri sunt reglementate, iar cele mai bune „oglinzi” pentru descărcare sunt ușor de găsit automat sau specificate manual. În funcție de tipuri, fișierele descărcate pot fi distribuite în diferite foldere, iar prioritățile pot fi setate pentru foldere. La finalizarea descărcării, este posibil să se evalueze automat integritatea fișierelor primite și să le scaneze pentru viruși.

Programul este prezentat în două versiuni - GetRight de bază și GetRight Pro extins. Versiunea Pro oferă posibilitatea de a lucra în modul „client-server” (pentru descărcarea fișierelor de către un computer din rețea, către care legăturile sunt pur și simplu transferate de la celelalte) și ca server proxy (permite altor utilitare de Internet să folosească GetRight). capabilități de descărcare a fișierelor). Are, de asemenea, funcționalitate încorporată pentru sincronizarea fișierelor deja descărcate în cazul în care actualizările acestora apar pe servere și încărcarea fișierelor pe servere, există un limbaj de scripting (oferă capabilități avansate de gestionare a descărcării), puteți limita viteza de descărcare a persoanelor individuale. fisiere etc.

Descărcați Master 5.5.12.1171

Dezvoltator: Software-ul WestByte

Dimensiunea distributiei: versiune standard - 5,24 MB; Versiune portabilă - 3,7 MB

Munca sub control: Windows 95/98/Me/NT 4.0/2000/XP/Vista

Metoda de distribuire: software gratuit (http://www.westbyte.com/dm/index.phtml?page=download&lng=Russian)

Preţ: gratuit

Download Master este un manager de descărcare multifuncțional care vă permite să descărcați fișiere nu numai de pe serverele FTP și HTTP, ci și de la servicii video populare (YouTube, Google Video, RuTube, Video@mail.?ru, Rambler Vision) și servicii de stocare a fișierelor ( inclusiv Rapidshare) în modul liber. În cazul arhivelor ZIP, conținutul acestora poate fi vizualizat înainte de descărcare și, de asemenea, este posibil să descărcați doar fișierele selectate din arhivă. Căutare implementată pentru fișiere, programe, jocuri și muzică în directorul de fișiere TopDownloads.

Download Master este integrat în toate cele mai populare browsere (clonele IE vor necesita configurarea setărilor), iar FTP Explorer încorporat în utilitar oferă o navigare convenabilă prin serverele FTP. Utilitarul poate determina independent tipurile de fișiere descărcate și le poate distribui pe categorii (programe, muzică, videoclipuri etc.), iar când viteza scade, repornește automat descărcarea, ceea ce evită timpul de nefuncționare. Descărcarea se realizează în mai multe fire. Dacă este necesar, pentru anumite site-uri, este ușor să limitați numărul de fluxuri și să configurați programul astfel încât fișierele descărcate de pe acestea să fie salvate în anumite foldere și/sau categorii. Odată ce descărcarea este finalizată, vă puteți deconecta de la Internet, puteți intra în modul de repaus, puteți opri computerul etc. Este posibil să controlați viteza de descărcare și să o reduceți automat dacă utilizatorul navighează pe internet. Este posibil să lucrați conform unui program, precum și să verificați fișierele descărcate pentru actualizări și să sincronizați (actualizare automată) fișierele pe server și pe computerul local.

Programul este prezentat în două versiuni: standard Download Master și portabil Download Master Portable. Acesta din urmă nu necesită instalare și poate fi înregistrat pe o unitate flash sau pe o unitate externă, ceea ce face posibilă descărcarea fișierelor pe orice computer conectat la Internet. Versiunea portabilă nu are integrare cu browsere și capacitatea de a exporta/import setări este dezactivată, astfel încât versiunea standard a programului va fi mai convenabilă pentru utilizare pe propriul computer.

ReGet Deluxe 5.2

Dezvoltator: ReGet Software

Dimensiunea distributiei: ReGet Deluxe - 2,5 MB; ReGet Deluxe Personal - 2 MB

Munca sub control: Windows 2000(SP3/SP4)/XP(SP2)/Server 2003/Vista

Metoda de distribuire: shareware (versiunea demo pentru 30 de zile: ReGet Deluxe - http://download.reget.com/regetdx.exe ; ReGet Deluxe Personal - http://download.reget.com/regetdxpers.exe)

Preţ: ReGet Deluxe - 600 RUR; ReGet Deluxe Personal - gratuit (doar pentru uz casnic)

ReGet Deluxe este un manager de descărcare multifuncțional care vă permite să descărcați fișiere (inclusiv în program) nu numai de pe serverele obișnuite FTP și HTTP, ci și de pe servere securizate de fișiere (SFTP) și web (HTTPS). De asemenea, utilitarul poate descărca conținut multimedia prin protocoale de streaming (MMS, RTSP) și poate fi folosit pentru a descărca de pe serverele de partajare a fișierelor (MySpace.com, iDrive.com etc.), cu toate acestea, nu va ajuta la descărcarea videoclipurilor flash din video. site-uri de găzduire, în special de pe YouTube. Utilitarul afișează dimensiunea fișierului descărcat înainte de descărcare, vă permite să vizualizați arhive ZIP și să le descărcați parțial și poate comuta automat la „oglinzi” mai rapide.

ReGet Deluxe se integrează automat în Internet Explorer și o serie de clone ale acestuia în unele browsere se realizează prin pluginuri terțe. Browserul FTP încorporat facilitează găsirea fișierelor de care aveți nevoie pe serverele FTP. Fișierele descărcate pot fi plasate automat în diferite foldere, ținând cont de categoria atribuită acestora de către utilizator, iar la utilizarea macrocomenzilor, este chiar posibilă crearea automată a folderelor necesare în conformitate cu extensiile fișierelor descărcate, data de descărcare. sau numele serverului de pe care a fost descărcat fișierul. Când o anumită descărcare încetinește, utilitarul se deconectează automat de la server și se conectează din nou la acesta, dând descărcării o pornire rapidă. Mai multe fișiere pot fi descărcate în același timp - numărul lor (precum și numărul de fire) depinde de tipul de conexiune. În timpul descărcării, utilitarul observă activitatea browserului și își reduce automat traficul atunci când browserul transmite date. Odată ce descărcarea este finalizată, acesta poate deconecta automat conexiunea la Internet, poate lansa o aplicație externă, poate opri computerul etc.

Programul este prezentat în două ediții: ReGet Deluxe și ReGet Deluxe Personal, acesta din urmă nu are suport multilingv și este destinat utilizării doar pe un computer de acasă. Utilitarul poate funcționa în unul dintre cele trei moduri: simplificat (numai funcții de bază), modul avansat și expert, comutarea între ele se realizează folosind comenzile din meniul principal.

Free Download Manager 3.0 build 848

Dezvoltator: Download Manager.ORG gratuit

Dimensiunea distributiei: 6,39 MB

Munca sub control: Windows 9x/Me/2000/2003/XP/Vista (numai versiuni pe 32 de biți)

Metoda de distribuire: software gratuit (http://freedownloadmanager.org/download.htm)

Preţ: gratuit

Free Download Manager este un manager de descărcări cu drepturi depline și foarte convenabil, care vă permite să descărcați fișiere (inclusiv într-un program) de pe servere FTP și HTTP, servere web securizate (HTTPS), precum și din servicii populare de stocare a fișierelor și video (YouTube). , Google Video și etc.). Este posibilă descărcarea simultană din mai multe „oglinzi”. Când descărcați conținut video, puteți converti automat fișierele FLV în alte formate video folosind transcoderul video încorporat. Sunt furnizate descărcarea parțială a arhivelor ZIP, descărcarea fișierelor prin rețeaua BitTorrent și site-uri întregi pentru vizualizarea ulterioară offline. Există, de asemenea, un manager special de încărcare care vă permite să încărcați fișiere în spațiul de stocare online WikiFortio (http://www.wikifortio.com/), unde puteți stoca fișiere cu dimensiunea de până la 100 MB timp de până la o lună.

Programul se integrează în toate cele mai populare browsere (fără a fi nevoie să instalați pluginuri) și monitorizează clipboard-ul. Un browser special de site vă permite să vizualizați structura folderului site-ului, ceea ce facilitează descărcarea datelor necesare. Traficul este limitat manual prin selectarea unuia dintre cele trei moduri presetate, este posibil să se reducă automat încărcarea canalului atunci când este detectată activitatea browserului. Mai multe fișiere pot fi descărcate în același timp - fiecare în mai multe fire, numărul de fișiere descărcate simultan este reglementat. Fișierele descărcate pot fi distribuite în diferite foldere în funcție de categoriile specificate de utilizator, iar pentru descărcări specifice este posibil să se stabilească restricții privind utilizarea canalului. Înainte de a descărca orice fișier, este ușor să verificați dimensiunea acestuia. Odată ce descărcarea este completă, utilitarul poate întrerupe automat conexiunea la Internet și poate opri computerul. Este posibil să gestionați descărcările de la distanță.

Programul este prezentat în două ediții: Free Download Manager standard și Free Download Manager Lite. Acesta din urmă nu acceptă protocolul BitTorrent și, de asemenea, nu are un convertor video încorporat și un manager pentru încărcarea fișierelor pe servere. Ambele ediții au funcționalitate pentru înregistrarea unei versiuni portabile, care nu necesită instalare și poate fi înregistrată pe o unitate flash sau pe o unitate externă.

Orbit Downloader 2.8.13

Dezvoltator: OrbitDownloader

Dimensiunea distributiei: 2,17 MB

Munca sub control: Windows NT/2000/XP/2003/Vista

Metoda de distribuire: software gratuit (http://www.orbitdownloader.com/download.htm)

Preţ: gratuit

Orbit Downloader este foarte ușor de utilizat, dar un manager de descărcare destul de funcțional și convenabil, oferind suport avansat pentru serviciile sociale. Vă permite să descărcați nu numai fișiere prin protocoalele FTP și HTTP, ci și diverse tipuri de conținut flash, video și audio prin intermediul protocoalelor RTSP/MMS/RTMP din MySpace, YouTube, Imeem, Pandora și alte servicii similare. Este posibil să descărcați fișiere din serviciile de partajare a fișierelor (inclusiv Rapidshare, MegaUpload, 4shared, Depositfiles etc.), precum și descărcarea folosind tehnologia Metalink, care vă permite să descărcați segmente individuale din rețele cu aproape orice protocol. Descărcarea conținutului media din serviciile sociale este implementată în acest utilitar prin modulul Grab++ încorporat, care funcționează numai sub Internet Explorer. Mai mult, tehnologia de descărcare este fundamental diferită de cea adoptată în alți manageri de descărcare: dacă de obicei este obișnuit ca un manager de descărcare să indice pur și simplu un link precum http://www.youtube.com/watch?v=.., atunci Modulul Grab++ determină o legătură directă atunci când treceți cursorul mouse-ului peste videoclipul dorit în fereastra de vizualizare a acestuia.

Programul se integrează în browserele populare, iar suportul pentru browserele necesare este configurat în timpul instalării. Limitarea traficului se face manual prin intermediul setărilor. Mai multe fișiere pot fi descărcate în același timp - fiecare în mai multe fire, numărul de fire este ajustabil, de asemenea, puteți modifica numărul de fire pentru o singură descărcare. Este imposibil să verificați dimensiunea fișierului înainte de descărcare, precum și să descărcați parțial o arhivă ZIP, dar aveți voie să vizualizați conținutul unui fișier ZIP înainte de a-l descărca. O creștere a vitezei de descărcare se realizează nu numai prin multi-threading, ci și prin utilizarea tehnologiei Orbitnet, bazată pe P2P și căutarea automată a „oglinzilor”. Este ușor să redistribuiți fișierele deja descărcate în foldere diferite. Odată ce descărcarea este finalizată, utilitarul poate verifica fișierul pentru viruși cu antivirusul încorporat, poate deconecta automat conexiunea la internet și poate opri computerul.

FlashGet 1.9.6

Dezvoltator: Trend Media Corporation Ltd

Dimensiunea distributiei: 4,43 MB

Munca sub control: Windows (toate versiunile)

Metoda de distribuire: software gratuit (http://www.flashget.com/en/download.htm?uid=undefined)

Preţ: gratuit

FlashGet este probabil cel mai popular manager de descărcare de fișiere din lume, cu cea mai lungă istorie de dezvoltare. Astăzi, acest utilitar este încă demn de atenție datorită confortului, ușurinței de utilizare și vitezei mari de descărcare, cu toate acestea, funcționalitatea sa nu se va potrivi tuturor utilizatorilor, deoarece în cea mai mare parte este limitată doar la capacitățile de bază. FlashGet vă permite să descărcați fișiere prin protocoalele HTTP/FTP/MMS/RTSP și recunoaște destul de corect link-urile de la Rapidshare. Cu toate acestea, în general, pot apărea probleme atunci când lucrați cu servicii de găzduire de fișiere, iar descărcarea videoclipurilor de pe site-urile de găzduire video este în general imposibilă, precum și descărcarea parțială a arhivelor ZIP. În același timp, cea mai recentă versiune a utilitarului are capacitatea de a descărca folosind protocoalele BitTorrent și eMule, care nu este furnizată în fiecare manager de descărcare.

FlashGet se poate integra în browsere populare, suportul pentru unele dintre acestea necesită instalarea de pluginuri. Browserele FTP și HTTP încorporate facilitează găsirea fișierelor de care aveți nevoie. Viteza optimă de conectare este indicată în setări prin setarea tipului de conexiune, este posibilă setarea manuală a restricțiilor de trafic prin selectarea unuia dintre cele trei moduri prestabilite; Fișierele descărcate pot fi distribuite în diferite foldere în funcție de categoriile specificate de utilizator. Există o căutare automată pentru „oglinzi” și descărcare de pe cele mai rapide și mai accesibile servere. Este ușor să configurați descărcarea să aibă loc la o oră strict stabilită, iar la finalizare, utilitarul poate scana fișierele pentru viruși și poate întrerupe conexiunea.

ReGet Junior 2.2

Dezvoltator: ReGet Software

Dimensiunea distributiei: 1,66 MB

Munca sub control: Windows 95/98/Me/NT/2000/XP

Metoda de distribuire: shareware (demo de 30 de zile - http://download.reget.com/regetjr.exe)

Preţ: 250 de ruble.

ReGet Junior este cel mai ușor de utilizat manager de descărcare, destinat utilizatorilor începători. Utilitatea are o funcționalitate minimă, iar atractivitatea sa constă doar în faptul că nu trebuie să vă ocupați de setări în principiu. Vă permite să descărcați fișiere de pe serverele FTP și HTTP și se integrează în cele mai populare browsere. Descărcarea se realizează în mai multe fire și mai multe fișiere pot fi descărcate simultan; Numărul de fluxuri și fișiere descărcate simultan nu este reglementat.

Concluzie

Deci, funcționalitatea managerilor de descărcare de la diferiți dezvoltatori este foarte asemănătoare - toți oferă descărcare fiabilă și rapidă a fișierelor de pe Internet. Prin urmare, pentru mulți utilizatori casnici care lucrează în cele mai populare browsere sub Windows, este suficient să achiziționeze un instrument gratuit pentru a rezolva această problemă, de exemplu Download Master, Free Download Manager, ReGet Deluxe (ediția personală) sau Orbit Downloader. Teoretic, toți pot descărca diverse tipuri de informații, inclusiv fișiere de pe servere precum Rapidshare.com și, cu excepția ReGet Deluxe, streaming flash, conținut video și audio de pe YouTube și alte servicii sociale. Cu toate acestea, capacitatea de a captura video și flash este implementată cel mai pe deplin în Orbit Downloader, la care merită să acordați atenție fanilor care descarcă acest tip de conținut. În ceea ce privește FlashGet, pariul pe el, în opinia noastră, nu are prea mult sens datorită funcționalității sale inferioare față de programele menționate mai sus.

Alegerea utilizatorilor Google Chrome și Apple Safari este mai modestă - vor trebui să folosească Download Master, Free Download Manager sau Orbit Downloader, deoarece ceilalți manageri de descărcare luati în considerare nu acceptă browserele corespunzătoare. Cu toate acestea, trebuie să rețineți că nu veți putea folosi Orbit Downloader pentru a descărca conținut media de la serviciile sociale, deoarece funcționează numai sub Internet Explorer.

5.6. Condensarea fluxului de încărcare

După ce am analizat tehnicile de compresie, concatenare, stocare în cache și paralelizare, ar fi rezonabil să punem următoarea întrebare: Cât de mult din pagină ar trebui să se încarce cu fișierul HTML principal și cât de mult ar trebui să încarce numai fișierele externe?

A fost asamblat un mediu de testare sub forma unei singure pagini, pentru care s-au aplicat diverse tehnici de optimizare (în același timp, s-a obținut o accelerare reală pentru încărcarea unei pagini arbitrare și s-a arătat cum toate aceste tehnici afectează efectiv viteza de încărcare a paginii).

În plus, au fost efectuate calcule teoretice pentru a determina distribuția optimă a sarcinii pe etape, ținând cont de toate aspectele.

Din cartea Boost your website autor Matsievski Nikolay

Tabel final Mai jos sunt toate rezultatele optimizării pentru o singură pagină. Descărcare testată pe o conexiune de 100 Kbps, număr total de obiecte inițiale: 23. Număr pas Descriere Dimensiune totală (kb) Timp de descărcare (ms) 1Pagină obișnuită. Nimic nu este comprimat

Din cartea Iptables Tutorial 1.1.19 de Andreasson Oskar

Din cartea EMBEDDED SYSTEMS SOFTWARE. Cerințe generale la dezvoltare și documentare autor Gosstandart al Rusiei

Din cartea Linux pentru utilizator autor Kostromin Viktor Alekseevici

2.4.3. Opțiuni de încărcare Deci, în opinia mea, alegerea opțiunii de încărcare este următoarea: Dacă aveți instalat Windows NT sau Windows 2000, atunci utilizați NT Loader. Dacă aveți Windows 95 sau Windows 98 pe FAT16 și nu doriți să instalați un program de încărcare de la un alt sistem de operare sau de la

Din cartea 200 de cele mai bune programe pentru Internet. Tutorial popular autorul Krainsky I

8.2. Procedura de pornire a sistemului de operare Linux În primul rând, trebuie remarcat faptul că tot ceea ce va fi discutat în această secțiune se aplică distribuției Red Hat și analogilor acesteia. Alte distribuții (de exemplu, Debian) pot avea proceduri de descărcare diferite.

Din cartea Asterisk™: The Future of Telephony Ediția a doua autor Meggelen Jim Wang

Manageri de descărcare Nimic nu deranjează un utilizator de internet mai mult decât vitezele mici de descărcare. Această problemă poate fi rezolvată în diferite moduri. Puteți să utilizați diferite browsere și să îl alegeți pe cel mai rapid sau să economisiți bani și să cumpărați un modem scump care va

Din cartea Arhitectură TCP/IP, protocoale, implementare (inclusiv versiunea IP 6 și securitate IP) de Faith Sydney M

Protocolul utilizat pentru descărcarea telefoanelor Polycom își poate descărca configurația folosind unul dintre cele trei protocoale: TFTP, HTTP și FTP. Am dori să vă rugăm să evitați TFTP. Nu oferă securitatea necesară și telefonul nu poate folosi informații despre dată pentru

Din cartea Manual de autoinstruire pentru lucrul pe Macintosh autoarea Sofia Skrylina

11.11 Opțiuni de pornire Opțiunile din Tabelul 11.1 pot fi conținute în răspunsurile BOOTP sau DHCP, iar opțiunile din Tabelul 11.2 pot fi utilizate numai în DHCP

Din cartea Primii pași cu Windows 7. Un ghid pentru începători autor Kolisnichenko Denis N.

4.1.6. Dosarul Descărcări Făcând clic pe butonul Salvare situat în antetul scrisorii duce la salvarea automată a fișierelor atașate în folderul Descărcări, care se află în folderul de acasă al utilizatorului (Fig. 4.21). Îl poți deschide ca orice dosar dintr-o fereastră

Din cartea Linux: Ghid complet autor Kolisnichenko Denis Nikolaevici

2.4.4. Activați pornirea de pe DVD Pentru a porni de la disc de instalare Windows, trebuie să modificați ordinea de pornire în BIOS Setup (astfel încât sistemul să pornească de pe DVD, nu de pe hard disk). În cazul unui computer desktop, pentru a intra în BIOS Setup, de obicei trebuie doar să apăsați tasta pe loc,

Din cartea Adobe Flash. Creați jocuri arcade, puzzle și alte jocuri cu ActionScript autor Rosenzweig Gary

9.1.2. Continuați încărcarea. Daemonul init Din momentul în care nucleul este încărcat, procesul inițial de pornire al sistemului este controlat de sistemul însuși. Prima care primește controlul este procedura de pornire automată a nucleului. Acesta determină cantitatea disponibilă RAM, tipul și viteza procesorului,

Din cartea Cum să promovezi și să faci publicitate unui site web pe Internet autor Zagumenov Alexandru Petrovici

Ecran de încărcare Deși ar trebui să urmăriți întotdeauna să mențineți dimensiunea fișierului final la minim, probabil că veți avea videoclipuri care durează mai mult de câteva secunde pentru a se încărca atunci când lucrați cu un modem. Dacă un joc are o dimensiune de sute de kiloocteți, unii utilizatori o vor face

Din cartea Linux prin ochii unui hacker autor Flenov Mihail Evghenievici

Timp de încărcare a paginii Încărcarea lentă a paginilor site-ului web irită adesea utilizatorii și, prin urmare, reduce traficul pe server. Nevrând să piardă timpul, mulți preferă să caute informații în alte surse. Prin urmare, este extrem de important să nu te zgarci cu material

Din cartea Windows 10. Secrete și dispozitiv autor Almametov Vladimir

3.2.4. Setări de pornire interesante Să ne uităm la câteva fișiere care, deși ușor, afectează încărcarea Înainte să apară solicitarea de introducere a parolei, ecranul se afișează informații text, explicație. Cel mai adesea, aici dezvoltatorul scrie numele distribuției

Din cartea autorului

10.3.2. Controlul încărcării fișierelor Încărcarea fișierelor este cea mai periculoasă oportunitate pentru un server. Fiecare utilizator ar trebui să aibă dreptul de a accesa doar propriul director. Ce ar trebui făcut pentru ca utilizatorii anonimi să poată lucra și cu fișiere? În acest caz, trebuie


Înainte de a începe să învățați despre sistemul de fișiere C, trebuie să înțelegeți diferența dintre cursuriŞi fișiere. Sistemul C I/O menține o singură interfață pentru programe, indiferent de dispozitivul specific care este accesat. Adică, în acest sistem, între program și dispozitiv există ceva mai comun decât dispozitivul în sine. Un astfel de dispozitiv generalizat de intrare sau de ieșire (un dispozitiv mai mult nivel înalt abstracții) se numește curgere, în timp ce un anumit dispozitiv este apelat fişier. (Cu toate acestea, un fișier este, de asemenea, un concept abstract.) Este foarte important să înțelegeți cum interacționează firele și fișierele.

Fluxuri

Sistemul de fișiere C este proiectat să funcționeze cu o mare varietate de dispozitive, inclusiv terminale, unități de disc și unități de bandă. Chiar dacă un dispozitiv este foarte diferit de celelalte, sistemul de fișiere tamponat îl va prezenta în continuare ca dispozitiv logic, care se numește flux. Toate firele se comportă într-un mod similar. Și, deoarece acestea sunt în mare măsură independente de dispozitivele fizice, aceeași funcție care scrie pe un fișier de disc poate efectua aceeași operație și pe un alt dispozitiv, cum ar fi o consolă. Există două tipuri de fluxuri: text și binar.

Fluxuri de text

Flux de text este o succesiune de caractere. Standardul C presupune că un flux de text este organizat în linii, fiecare dintre acestea se termină cu un caracter newline. Cu toate acestea, la sfârșitul ultimului rând, acest caracter este opțional. Într-un flux de text, anumite transformări de caractere pot avea loc după cum este cerut de mediul de bază. De exemplu, caracterul de noua linie poate fi înlocuit cu o pereche de caractere - retur caruș și avans de linie. Prin urmare, este posibil să nu existe o corespondență unu-la-unu între caracterele care sunt scrise (citite) și cele care sunt stocate în dispozitivul extern. În plus, este posibil ca numărul de caractere care sunt scrise (citite) și cele stocate pe dispozitivul extern să nu se potrivească din cauza posibilelor conversii.

Fluxuri binare

Flux binar este o secvență de octeți care are o corespondență unu-la-unu cu octeții de pe dispozitivul extern și nu are loc nicio conversie de caractere. În plus, numărul de octeți care sunt scrieți (citiți) și cei care sunt stocați pe dispozitivul extern este același. Cu toate acestea, un număr definit de aplicație de zero octeți poate fi atașat la sfârșitul fluxului binar. Astfel de octeți zero, de exemplu, pot fi folosiți pentru a umple spațiul liber dintr-un bloc de memorie cu informații nesemnificative, astfel încât să umple exact un sector de pe disc.

Fișiere

În limbajul C, un fișier poate fi orice, de la un fișier de disc la un terminal sau imprimantă. Un flux este asociat cu un anumit fișier prin efectuarea unei operații deschideri. Odată ce fișierul este deschis, informațiile pot fi schimbate între acesta și program.

Dar nu toate fișierele au aceleași capacități. De exemplu, un fișier de disc poate fi accesat direct, în timp ce unele imprimante nu pot. Așa că am ajuns la un singur lucru principiu important, legat de sistemul de intrare/ieșire C: toate fluxurile sunt la fel, dar fișierele nu sunt.

Dacă fișierul poate suporta interogări de locație (indicator de poziție curentă), apoi la deschiderea unui astfel de fișier indicatorul către poziția curentă din fișier este setat la început. Pe măsură ce fiecare caracter este citit dintr-un fișier (sau scris în) un fișier, indicatorul de poziție curentă este incrementat, avansând astfel prin fișier.

Un fișier este detașat dintr-un anumit fir de execuție (adică, conexiunea dintre fișier și firul de execuție este întreruptă) folosind operația închidere. Când un fișier deschis pentru ieșire este închis, conținutul (dacă există) al fluxului asociat este scris pe dispozitivul extern. Acest proces, care este de obicei numit înregistrare suplimentară stream, se asigură că nicio informație nu este lăsată accidental în memoria tampon de disc. Dacă programul iese normal, de ex. Fie main() returnează controlul sistemului de operare, fie exit() este apelat, apoi toate fișierele sunt închise automat. Dacă programul se termină anormal, cum ar fi prin blocarea sau oprirea apelând abort() , fișierele nu sunt închise.

Fiecare fir asociat unui fișier are o structură de control care conține informații despre fișier; este de tip FILE. In aceasta bloc de control al fișierelor nu schimba niciodată nimic.

Dacă sunteți nou în programare, distincția dintre fire și fișiere poate părea redundantă sau chiar arcană. Cu toate acestea, trebuie să ne amintim că scopul principal al unei astfel de distincții este de a oferi o singură interfață. Pentru a efectua toate operațiunile I/O, ar trebui să utilizați numai concepte de fir și să utilizați un singur sistem de fișiere. Intrarea sau ieșirea de la fiecare dispozitiv este convertită automat de sistemul I/O într-un flux ușor de gestionat.

Sau prin forțarea eliberării (conținutului) tamponului.
Bloc de control al fișierelor- un bloc mic de memorie, alocat temporar sistem de operare pentru a stoca informații despre un fișier care a fost deschis pentru utilizare. Un bloc de control al fișierului conține de obicei informații despre identificatorul fișierului, locația acestuia pe disc și un pointer către poziția curentă din fișier.
Dacă, desigur, nu proiectați un sistem I/O.

1.1. Definiția fluxului

Fluxîn Windows, un obiect kernel căruia sistemul de operare alocă timp procesorului pentru a rula o aplicație. Fiecare thread deține următoarele resurse:

  • codul funcției executabile;
  • set de registre de procesor;
  • stivă pentru rularea aplicației;
  • stivă pentru operarea sistemului de operare;
  • un token de acces care conține informații de securitate.

Toate aceste resurse se formează contextul firului în Windows.

Pe lângă descriptor, fiecare fir în Windows are și propriul său identificator, care este unic pentru firele care rulează în sistem. ID-urile firelor sunt utilizate de utilitare care permit utilizatorilor sistemului să urmărească activitatea firelor.

  • În sistemele de operare Windows, există două tipuri de fire:
  • fire de sistem;

fluxurile de utilizatori. Fire de sistem

efectuează diverse servicii ale sistemului de operare și sunt lansate de nucleul sistemului de operare. Fire de utilizare

servesc la rezolvarea problemelor utilizatorilor și sunt lansate de aplicație.

  • Într-o aplicație care rulează, există două tipuri de fire:
  • fire de lucru;

fire de interfață cu utilizatorul. Fire de lucru efectuați diverse sarcini de fundal în aplicație. Fire de interfață cu utilizatorul sunt asociate cu ferestrele și procesează mesajele primite de aceste ferestre. Fiecare aplicație are cel puțin un fir numit primar (primar) sau principal (principal) curent. În aplicațiile de consolă, acesta este firul care execută funcția principal ..

În aplicațiile GUI, acesta este firul care execută funcția WinMain

Un fir este creat de funcție WinMain(
Create Thread funcţie
lpThreadAttributes: Pointer; // atribute de securitate
dwStackSize: DWORD;
// dimensiunea stivei de fire în octeți lpStartAddress: TFNThreadStartRoutine;
// adresa funcției lpParameter: Pointer;
// adresa parametrului dwCreationFlags: DWORD;
// steaguri de creare a firelor

var lpThreadId: DWORD WinMain// identificator de fir ): mâner;.

La finalizarea cu succes, funcția

returnează un handle la firul de execuție creat și identificatorul acestuia, care este unic în întregul sistem. În caz contrar, această funcție revine

zero Atribuirea parametrilor lpThreadAttributes ): mâner; Parametru

zero lpThreadAttributes setează atributele de securitate ale firului creat. Până când vom explora securitatea Windows, vom seta acest parametru la atunci când apelați aproape toate funcțiile kernel-ului Windows. În acest caz, aceasta înseamnă că sistemul de operare însuși va seta atributele de protecție a firelor folosind setările implicite.. Aceasta este cea mai mică dimensiune a stivei care poate fi alocată unui fir. Dacă valoarea parametrului lpThreadAttributes este mai mică decât valoarea implicită, atunci firului i se alocă în continuare o stivă de dimensiune atunci când apelați aproape toate funcțiile kernel-ului Windows. În acest caz, aceasta înseamnă că sistemul de operare însuși va seta atributele de protecție a firelor folosind setările implicite.. Sistemul de operare Windows rotunjește dimensiunea stivei la o pagină de memorie, ceea ce este de obicei.

zero 4 KB lpStartAddress

indică funcția executată de firul de execuție. Se poate observa că un singur parametru poate fi transmis funcției thread lpParameter , care este un pointer către un tip gol. Această limitare rezultă din faptul că funcția thread este apelată de sistemul de operare și nu de programul de aplicație. Programele sistemului de operare sunt module executabile și, prin urmare, ar trebui să apeleze doar funcții a căror semnătură este predefinită. Prin urmare, pentru fire, am definit cea mai simplă listă de parametri, care conține doar un pointer. Deoarece funcțiile thread sunt apelate de sistemul de operare, ele sunt de asemenea apelate.

zero funcții de apel invers dwCreationFiags determină în ce stare va fi creat firul. Dacă valoarea acestui parametru este 0, atunci funcția thread începe să se execute imediat după crearea firului. Dacă valoarea acestui parametru este CREATE_SUSPENDED , apoi firul este creat într-o stare suspendată. Acest thread poate fi pornit mai târziu apelând funcția.

zero Resume Thread lpThreadId

este scos, adică valoarea sa este setată de Windows. Acest parametru ar trebui să indice o variabilă în care Windows va plasa ID-ul firului. Acest identificator este unic în întregul sistem și poate fi folosit ulterior pentru referințe de flux. ID-ul firului de execuție este utilizat în principal de funcțiile de sistem și rar de funcțiile aplicației. ID-ul firului de execuție este valabil numai pe durata de viață a firului de execuție. După ce un fir de execuție se termină, același identificator poate fi atribuit unui alt fir..

Când este creat un fir de execuție, prioritatea sa de bază este setată ca suma dintre prioritățile procesului în al cărui context rulează firul de execuție și nivelul de prioritate al firului de execuție WinMain THREAD_PRIORITY_NORMAL

Lista 1.1 prezintă un exemplu de program care utilizează funcția WinMain

Programul CreateThreadd; ($APPTYPE CONSOLE) folosește SysUtils, Windows; var n: Integer = 0;

inc: întreg = 10; hFit: HWND; IDThread: DWORD; procedura Add(iNum: Pointer); stdcall; begin Writeln("Firul este pornit"); n:= n + Integer(iNum^);.

Writeln("Firul este terminat"); Sfârşit; începe Writeln("n = ", n); //începe firul Adaugă hThread:= CreateThread(nil, 0, @Add, @inc, 0, IDThread);//Așteptați ca firul Adăugare să se termine WaitForSingleObject(hThread, INFINITE);

//închide mânerul firului Adaugă CloseHandle(hThread); //începe firul Adaugă hThread:= CreateThread(nil, 0, @Add, @inc, 0, IDThread);(
Writeln("n = ", n); Readln; Sfârşit.
Rețineți că acest program folosește funcția

WaitForSingleObject , care așteaptă finalizarea firului Adăuga

Firul se termină cu un apel de funcție ExitThread

, care are următorul prototip: ExitThread(
procedură dwExitCode: DWORD
//codul de terminare a firului Readln; Sfârşit.
); stdcall;

Această funcție poate fi apelată fie explicit, fie implicit atunci când returnează o valoare dintr-o funcție thread. Când această funcție este executată, sistemul trimite un mesaj bibliotecilor dinamice care sunt încărcate de proces ExitThread DLL_THREAD_DETACH , ceea ce indică faptul că firul își încheie activitatea. Un thread poate termina un alt thread apelând o funcție ExitThread Terminate Thread

funcţie ExitThread.

Programul TerminateThreadd; ($APPTYPE CONSOLE) folosește SysUtils, Windows; var count: Cardinal = 0;

hFit: HWND; IDThread: DWORD; c: Char; b1: Boolean = Adevărat; fir de procedură; stdcall; var b2: boolean; începe b2:= Adevărat;//Așteptați ca firul Adăugare să se termine WaitForSingleObject(hThread, INFINITE);

, care are următorul prototip: în timp ce b2 începe numărarea:= numără + 1;(
Somn (100); // odihnește un pic sfârșit; Sfârşit; începe hThread:= CreateThread(nil, 0, @thread, nil, 0, IDThread); dwExitCode: DWORD
în timp ce b1 începe Write("Introduceți ""y"" pentru a afișa numărul sau orice caracter pentru a termina: ");

Readln(c); în timp ce b2 începe numărarea:= numără + 1; daca c = "y" atunci Writeln("count = ", count) else Break;

Sfârşit; //întrerupe executarea firului de execuție TerminateThread(hThread, 0); în timp ce b2 începe numărarea:= numără + 1;//închide mânerul firului CloseHandle(hThread); Sfârşit. Fiecare fir creat are un contor de suspendare a cărui valoare maximă este.

MAXIMUM_SUSPEND_COUNT , apoi firul este creat într-o stare suspendată. Acest thread poate fi pornit mai târziu apelând funcția//Așteptați ca firul Adăugare să se termine WaitForSingleObject(hThread, INFINITE);

, care are următorul prototip: , apoi firul este creat într-o stare suspendată. Acest thread poate fi pornit mai târziu apelând funcția(
Somn (100); // odihnește un pic sfârșit; Sfârşit; începe hThread:= CreateThread(nil, 0, @thread, nil, 0, IDThread); dwExitCode: DWORD
în timp ce b1 începe Write("Introduceți ""y"" pentru a afișa numărul sau orice caracter pentru a termina: ");

. Numărul de suspendări arată de câte ori a fost suspendat firul. Un fir de execuție se poate executa numai dacă numărul de suspendări este zero. În caz contrar, firul nu este executat sau se spune că este în limbo. Execuția fiecărui thread poate fi suspendată prin apelarea funcției , apoi firul este creat într-o stare suspendată. Acest thread poate fi pornit mai târziu apelând funcția Suspend Thread , apoi firul este creat într-o stare suspendată. Acest thread poate fi pornit mai târziu apelând funcția Suspend Thread hFiul:Mâner): DWORD; stdcall;

Această funcție crește contorul de suspendare cu 1 și, la succes, returnează valoarea curentă a contorului respectiv. Dacă eșuează, funcția returnează o valoare egală cu -1.//Așteptați ca firul Adăugare să se termine WaitForSingleObject(hThread, INFINITE);

//închide mânerul firului Adaugă CloseHandle(hThread); returnează o valoare egală cu -1.(
Rețineți că un fir se poate suspenda. Pentru a face acest lucru, el trebuie să treacă funcțiile
Rețineți că acest program folosește funcția

propriul pseudo-descriptor, care poate fi obținut folosind funcția returnează o valoare egală cu -1. specifică numărul de milisecunde pentru care firul care a apelat această funcție își întrerupe execuția. Dacă acest parametru este setat la 0, firul de execuție este pur și simplu întrerupt și apoi reluat atâta timp cât nu există alte fire de execuție care să aștepte timpul CPU. Dacă valoarea acestui parametru este INFINIT, apoi thread-ul își suspendă pentru totdeauna execuția, ceea ce duce la blocarea aplicației.

Listarea 1.3 este un program care demonstrează cum funcționează funcțiile în timp ce b2 începe numărarea:= numără + 1;, , apoi firul este creat într-o stare suspendată. Acest thread poate fi pornit mai târziu apelând funcțiaŞi returnează o valoare egală cu -1..

//Exemplu de funcționare a funcțiilor SuspendThread, ResumeThread și programul Sleep SuspendThreadd; ($APPTYPE CONSOLE) folosește SysUtils, Windows; var nCount: Cardinal = 0;

dwCount: DWORD; hFit: HWND; IDThread: DWORD;

, care are următorul prototip: Fiecare fir creat are un contor de suspendare a cărui valoare maximă este c: Char;

b: Boolean = Adevărat; fir de procedură; stdcall; începe în timp ce b începe nCount:= nCount + 1; Somn (100); // întrerupe firul de execuție timp de 100 de milisecunde; Sfârşit; începe hThread:= CreateThread(nil, 0, @thread, nil, 0, IDThread);.

în timp ce b începe Writeln("Intrare:"); Fiecare fir creat are un contor de suspendare a cărui valoare maximă este Writeln(#9, """n"" pentru a ieși");

//Un exemplu despre cum funcționează funcția GetcurrentThread programul GetCurrentThreadd; ($APPTYPE CONSOLE) folosește SysUtils, Windows; var hThread: HWND; begin // obține pseudo-descriptorul firului curent hThread:= GetCurrentThread;

// obține pseudo-descriptorul firului curent Writeln(hThread); Readln; Sfârşit., ): mâner; Majoritatea funcțiilor API Win32 returnează un cod care poate fi folosit pentru a determina dacă funcția a fost finalizată cu succes sau nu. Dacă funcția eșuează, codul de returnare este de obicei fals sau -1. În acest caz, funcția Win32 API setează și un cod de eroare intern numit ultimul cod de eroare//Așteptați ca firul Adăugare să se termine WaitForSingleObject(hThread, INFINITE);

, care are următorul prototip: ultimul cod de eroare(cod ultima eroare) și este acceptat separat pentru fiecare fir.

Pentru a obține ultimul cod de eroare, trebuie să apelați funcția GetLastError: DWORD; stdcall;

//închide mânerul firului Adaugă CloseHandle(hThread); GetLastError(
Această funcție returnează codul ultimei erori apărute în fir. Puteți seta ultimul cod de eroare dintr-un flux folosind funcția
Rețineți că acest program folosește funcția

SetLastError , având următorul prototip: dwErrCode: DWORD //cod de eroare

, care are următorul prototip: , având următorul prototip:(
Pentru a primi un mesaj corespunzător ultimului cod de eroare, trebuie să utilizați funcția FormatMessage
, care are următorul prototip: dwFlags: DWORD;
// moduri de formatare lpSource: Pointer;
// sursa mesajului dwMessageId: DWORD;
// ID mesaj dwLanguageId: DWORD;
// identificator de limbă lpBuffer: PChar;
// buffer de mesaje nDimensiune: DWORD;
în timp ce b1 începe Write("Introduceți ""y"" pentru a afișa numărul sau orice caracter pentru a termina: ");

// dimensiunea maximă a memoriei tampon pentru un mesaj , având următorul prototip:

Argumente: pointer

// listă de valori de inserat în mesaj

Lista 1.5 prezintă un exemplu de program care apelează funcția

Program ErrorMessageBoxx; ($APPTYPE CONSOLE) folosește SysUtils, Windows; var mâner: THandle; procedura ErrorMessageBox; var lpMsgBuf: PChar; începe FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER sau FORMAT_MESSAGE_FROM_SYSTEM sau FORMAT_MESSAGE_IGNORE_INSERTS, nil, GetLastError, 0, @lpMsgBuf, 0, nil);

Ministrul Economiei și Finanțelor din Regiunea Moscova: 2002 Universitatea Drexel (SUA), specializare...