Showing posts with label threating. Show all posts
Showing posts with label threating. Show all posts

Wednesday, May 04, 2016

Rad sa taskovima u C# programskom jeziku


U prethodnom postu „Rad sa nitima u C# programskom jeziku“ je u najkraćim crtama sa čak 7 primera objašnjeno kako se radi sa nitima. Međutim, da bi ste razumeli niti i to je malo. Na internetu možete pronaći mnogo primera varijacija i upotrebe niti, dok možete i trebate eksperimentisati i sa vlastitim kombinacijama. Zato vam savetujem da mnogo samostalno eksperimentišete i testirate vaše vlastite metode pozivajući ih u nitima; u vašim vlastitim testovima i aplikacijama. To se isto odnosi i na taskove i na asinhronizovane metode i sve što učite. Takođe, morate da poznajete razliku i kad i šta treba da koristite. Na primer, pored upotrebe niti će te brzo shvatili da je mnogo bolje koristiti klasu ThreadPool nego klasu Threading pogotovo ako nameravate koristiti više niti sa dugotrajnim procesima ili kad više puta nameravate koristiti istu nit. Razlog je jednostavan, niti su expensive – skupi. Znači uzimaju mnogo memorije i vremena. Potrebno vam je 1MB za svaku nit koju koristite. Klasa Threading vam omogućava da kreirate niti na veoma niskom nivou, na nivou OS – Operativnog sistema. To znači da nad niti imate punu kontrolu, tj. možete da nit pokrenete, zaustavite ili prekinete.

 
( Taskovi su često mnogo bolje rešenje od upotrebe niti ) 

Za razliku od niti ThreadPool je delimično rešenje jer je mnogo jeftiniji; upamtite i da u ThreadPool-u svaka nit je uvek Background nit i da se niti u ThreadPool ne uništavaju kad se nit izvrši. Ali sa ThreadPool-om vi ne možete određivati prioritete izvršavanja niti, zato bi ste morali koristiti neke druge mehanizme; isto tako vi ne možete niti prekinuti u vreme izvršavanja. Kada koristite ThreadPool nemate kontrolu nad nitima kao sa klasom Threading jer ThreadPool radi na nivou CLR – Common Language Runtime-a. To znači i da broj niti koji možete izvršavati u ThreadPool-u zavisi od verzije .Net Framework-a kojeg koristite. Na primer ako koristite .NET Framework 4.0 onda možete koristiti 1 023 niti za 32-bit aplikacije ili 32 767 za 64-bit aplikacije. Međutim ako koristite .Net Framework 2.0 ograničeni ste na samo 25 niti prema procesoru. Isto tako vi faktički, najjednostavnije rečeno; samo pošaljete vaše zadatke u ThreadPool, kad se ThreadPool napuni vi samo trebate sačekati dok se ne oslobodi i nastavi sa izvršavanjem drugih zadataka. Vi čak možete i sami da odredite veličinu ThreadPool-a ali činjenica je da kontrolu nemate. Vi možete da pošaljete neki zadatak, ali ne možete sačekati da se završi ili da prihvatite neki rezultat. Zato postoji klasa Task koja rešava probleme i nedostatke i klase Threading i klase ThreadPool.

Kako da kreiramo taskove?


Saturday, April 09, 2016

Rad sa nitima u C# programskom jeziku


Skoro svaki korisnik PC računara kod svoje kuće koristi računar sa jednim CPU – Central Processing Unit – centralnim procesorom, koji u suštini obavlja samo jednu operaciju u datom vremenu. Zbog velike brzine procesora, mi često imamo utisak da na primer računar obavlja više poslova istovremeno kad otvorimo više aplikacija u Windows-u. Međutim, činjenica je dok se jedna operacija obavlja, druge čekaju. Na primer; kad vam se pojavi neki veliki bag u računaru, to često znači da se neka operacija na procesorskom nivou izvršava previše vremena ili se ne može izvršiti do kraja i zbog toga vam tada izgleda da vam je celi Windows smrznut i slika na monitoru ukočena, sve dok ne resetujete računar.


( Životni ciklus niti u C# programskom jeziku )

Da se ovo nebi stalno dešavalo da svaka aplikacija zamrzne celi Windows pri svakoj komplikaciji tokom rada, stvoren je koncept korišćenja niti. Svaka aplikacija u Windows-u pokreće svoj vlastiti proces koji je izolovan od drugih aplikacija. Znači, svaki proces pokreće vlastiti thread – nit; nit shvatite jednostavno kao virtualni CPU. Nit je sekvenca izvršavanja programa. Većina programa koje programirate u C# programskom jeziku ima jednu ulaznu tačku, to je metoda Main() i završava se povratkom iz metode. Međutim, ni jedan Internet pretraživač ne radi na taj način. Oni kao da izvršavaju više zadataka istovremeno. I vi ćete dolaziti u situacije u vašim programima da vam je potrebno da obavljate neke funkcije bar prividno istovremeno. Svaka nit u Windows-u ima svoje određeno vreme koje se meri u milisekundima i nakon tog perioda nit se pauzira i Windows se prebacuje na drugu nit. Takvo ponašanje zovemo Context Switching. Koristeći niti mi izvršavamo procese bez čekanja da se prethodni proces završi. Na taj način mi samo stvaramo iluziju da se izvršava više niti u isto vreme. Kod više procesorskih računara gde imamo više CPU, koristimo Parallelism – paralelizam; gde se niti izvršavaju paralelno na više različitih CPU. Na koje sve načine možete da izvršavate Multithreating – izvršavanje više niti; najbolje da vidite šta vam .Net Framework nudi.

Kako se kreira nit koristeći Thread klasu?