Tuan 4 (Thread Process) Phan1

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

Nguyn L H iu Hnh

Thc Hnh 1

Phn thc hnh: C# - C bn v Thread

Thread (tiu trnh) :

cho php chng trnh thc hin ng thi


nhiu tc v, v gip qu trnh tng tc vi ngi dng khng b gin on, lp
trnh song song v l k thut khng th thiu trong cc ng dng v mng:

Process c th hiu l mt instance ca chng trnh my tnh c thc


thi, da trn h iu hnh, hon ton c lp vi cc tin trnh khc.

Thread l mt nhm lnh c to ra thc thi mt tc v trong mt


process, chng chia s chung d liu vi nhau x l.

To v thc thi thread


.Net cung cp lp Thread trong namespace System.Threading cng vi nhng
phng thc cn thit. to mt thread mi bn lm theo cc bc sau:
To phng thc callback s thc thi ghi thread c start.
To i tng Thread v truyn mt delegate ThreadStart cha phng thc
s thc thi vo constructor ca Thread.
Chy thread: Gi phng thc Start() ca i tng thread va to.
To v d sau:

Nguyn L H iu Hnh

Thc Hnh 1

Nhn Ctrl+F5 chy (khng dng debug), ta s c kt qu sau:

Nhn xt: Nu khng dng thread chy ln lt 2 phng thc MethodA() v


MethodB() th kt qu in ra s l 100 k t 1 v sau l 100 k t 0. Tuy nhin
khi dng thread nh v d trn, kt qu in ra s l mt chui ln ln 1 v 0, tc
l hai phng thc ny chy ng thi vi nhau.

- Thay v truyn mt i tng ThreadStart bn c th truyn trc tip tn


phng thc cn thc thi cho constructor ca Thread.
Thread t = new Thread(MethodA);
- Dng Lambda expression l mt phng php hu ch vit trc tip m lnh
cn thc thi:
Thread t = new Thread(()=>
{ Console.Write(Hello); });

Truyn tham s cho Thread

Nguyn L H iu Hnh

Thc Hnh 1

ParameteriedThreadStart l mt gii php thay th cho ThreadStart trong


trng hp bn mun truyn tham s cho thread. i tng delegate
ParameteriedThreadStart ny ch chp nhn mt tham s kiu object, v th
trong phng thc callback, bn cn phi p kiu s dng c ng kiu d
liu ca tham s.

To v d sau:

Property ThreadState v ThreadPriority


ThreadState
Thuc tnh ThreadState cho thy trng thi hin ti ca thread. Mi mt li
gi phng thc ca thread s lm thay i gi tr thuc tnh ny nh Unstarted,
Running, Suspended, Stopped, Aborted,.
ThreadPriority
Thuc tnh ny xc nh mc u tin m thread s c thc thi so vi
cc thread khc. Mi thread khi c to ra mang gi tr priority l Normal. Cc
gi tr m thuc tnh c th c bao gm: Lowest, BelowNormal, Normal,
AboveNormal v Highest.

Cc phng thc thng dng ca Thread


Abort(): khi phng thc ny c gi, h thng s nm ra mt ngoi l
ThreadAbortException kt thc thread. Sau khi gi phng thc ny, thuc
tnh ThreadState s chuyn sang gi tr Stopped.
Suspend(): phng thc ny s tm dng vic thc thi ca Thread v thi hn
cho n khi n c yu cu chy tip tc vi phng thc Resume().

Nguyn L H iu Hnh

Thc Hnh 1

Sleep(): dng thread hin ti trong mt khong thi gian tnh bng
milisecond, khi thread s chuyn sang trng thi WaitSleepJoin.

To v d sau:

Output:

Nguyn L H iu Hnh

Thc Hnh 1

Join():l mt phng thc hu ch trong trng hp bn mun thc hin mt


tc v no sau khi thread kt thc. Phng thc ny ch c dng sau khi
bn chy Thread. Cc tc v nm pha di lnh gi Join() ca mt Thread ch
c thc thi sau khi Thread hon tt cng vic ca mnh.
To v d sau:

Output:

Nhn xt: T output ta thy thread th 3 (t3) ch c thc thi sau khi t2 v t1 thc
thi xong. Tuy nhin thc t th t3 s c thc thi ngay sau khi t2 thc thi xong v
khng lin quan g n t1 bi v t1 khng gi phng thc Join(). thy r iu
ny, hy tng s ln lp trong MethodA() ln ln thy rng t1 v t3 c th
chy song song vi nhau.

Foreground v Background Thread


C 2 loi Thread: Foreground thread v Background thread. Cc thread ban
u c to ra u l foreground. ng dng s vn tip tc chy nu nh tt c
cc foreground thread cha chy xong mc d bn thc hin lnh tt ng dng.

Nguyn L H iu Hnh

Thc Hnh 1

V nu tt c cc foreground thread hon thnh, ng dng s tt, ng thi tt c


background thread cng b khai t theo.
- xc nh mt Thread l foreground hay background, bn s dng thuc tnh
IsBackground.

Xt v d sau:

Output:

- Nhn xt: Trong thread t1 Sleep(1000) phng thc Main() c thi gian
kt thc. V nh bn thy kt qu xut ra, thread t1 vn tip tc chy mc d
Main() hon thnh cng vic (thread chnh kt thc). Thc hin uncomment
dng t1.IsBackground = true v chy li, kt qu s ch xut ra mt dng sau:

Thread Pooling
- Thread Pooling l mt k thut cho php bn s dng cc thread hiu qu hn
bng cch qun l v phn phi chng hp l, tn dng ti a thi gian nhn ri v
tng hiu sut ca chng trnh.
- Mi chng trnh c cung cp mt Thread pool khi khi to.

Nguyn L H iu Hnh

Thc Hnh 1

- c im ca Thread pool l cc thread s c t ch background


(Background Thread). Cc tc v khi c thm vo Thread pool s c thc
thi khi c mt thread ang trng thi sn sng. Sau khi kt thc mt tc v,
thread s chuyn v trng thi sn sng ch mt cng vic khc.
- s dng thread pool: s dng phng thc tnh QueueUserWorkItem() ca
lp ThreadPool. Phng thc ny nhn tham s l mt phng thc callback hoc
delegate, c th dng overload th hai truyn thm tham s cho phng thc
cn thc thi. Sau khi c truyn vo thread pool, tc v c t vo hng i
v sn sng thc thi bt c lc no c thread trng thi sn sang.

V d n gin v s dng Thread Pool:

Nguyn L H iu Hnh

Output :

Thc Hnh 1

You might also like