Showing posts with label startnew. Show all posts
Showing posts with label startnew. 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?