Download - MULTI-THREADING PROGRAMMING Csharp
MULTI-THREADING PROGRAMMINGCsharp
(L P TRINH ĐA LU NG)Â Ô
NÔI DUNG
Cac khai niêm vê Thread Tao va diêu khiên Thread
Tao Thread Truyên dữ liêu cho Thread Đô ưu tiên cua Thread
Cac vân đê cua Thread Vân đê Race Condition Vân đê Deadlock
Cac kỹ thuât đông bô
@2011 HUI
Thread (concurrent programming) Lâp Trinh Đông Thơi
@2011 HUI
multiple threads
Thread (concurrent programming) Lâp Trinh Đông Thơi
Thread: La môt phần code có thê thực hiên được trong chương trình
Môt ứng dụng la môt tâp hợp nhiêu nhiêm vụ(Task), mỗi nhiêm vụ được gan cho môt Thread
Nhiêu Thread được thực hiên đông thời được gọi la Multiple Threading
@2011 HUI
Thread (concurrent programming) Lâp Trinh Đông Thơi
Khi môt ứng dụng C# ở phía client được thực thi thì môt thread được tự đông tao ra bởi CLR gọi la Main thread.
Từ Main thread ta có thê tao ra cac Thread khac. CLR câp cho mỗi Thread môt vùng nhớ riêng đê lưu
cac biến cục bô cua nó.
@2011 HUI
Ứng dụng của Thread
Duy trì sự đap ứng cua giao diên đối với thao tac cua người dùng
Sử dụng CPU hiêu quả hơn
Chương trình thực hiên nhanh hơn
Cho phép cac yêu cầu có thê xử lý đông thời
@2011 HUI
Tao Threads Tao môt đối tượng thuôc class Thread va truyên cho
nó phương thức sẽ thực hiên khi Thread bắt đầu thực thi (start)
Gọi phương thức start đê bắt đầu môt Thread
Truyên tham số cho Thread: Thông qua phương thức start (chỉ dùng được khi phương
thức có 1 tham số kiêu Object) Dùng biêu thức Lambda khi tao đối tượng (Phương thức
có số tham số va kiêu dữ liêu tùy ý)
@2011 HUI
Tao Threads (cont.)
@2011 HUI
Ví d : T o, th c hi n Thread ụ a ự ệ
Tao Threads (cont.)
@2011 HUI
Ví d : T o và th c hi n Threadụ a ự ệ
Phương thức JoinJoin: yêu cầu “call thread” phải chờ cac “called
thread” kết thúc rôi mới kết thúc Ví dụ: Không sử dụng join
@2011 HUI
Phương thức SleepVí dụ: sử dụng phương thức join
@2011 HUI
Phương thức SleepTam dừng thread hiên tai trong môt khoảng thời
gian (tinh bằng milisecond)Khi môt thread ở trang thai sleep thì cpu được
dùng bởi Thread khacVí dụ: Không dùng sleep
@2011 HUI
Phương thức SleepVí dụ: Sử dụng thread.Sleep
@2011 HUI
Độ ưu tiên của Thread (Thread Priority)
Cho phép Hê điêu hanh quyết định: Thời gian sử dụng CPU cua Thread Cơ hôi nhân quyên sử dụng CPU
Đô ưu tiên được gan bằng môt trong cac gia trị cua enum:
Ví dụ:
@2011 HUI
Hợp nhất các Thread (Thread Pooling)
Cho phép quản lý cac Thread hiêu quả hơn Quyết định khi nao thì start môt thread Cho phép qui định số Thread tối đa, tối thiêu có thê
thực hiên đông thời
@2011 HUI
Các vấn đề khi sử dụng Thread (Threading Issues )
Race Condition: Xuât hiên khi hai hay nhiêu Thread truy xuât cùng môt tai nguyên tai cùng môt thời điêm.
Ví dụ:
@2011 HUI
Xu t thông báo khi ấstate!=6
Các vấn đề khi sử dụng Thread (Threading Issues )
Race Condition:
Tao 20 Thread, mỗi Thread sẽ thực hiên ham RaceCondition , tham số truyên cho 20 Thread la đối tượng state dẫn đến Race Condition
Nguyên nhân?
@2011 HUI
Các vấn đề khi sử dụng Thread (Threading Issues )
Đông bô giữa cac Thread (Synchronization ): Đê tranh tình trang Race Codition sử dụng giải phap
đông bô (Synchronization). Synchronization: môt Thread khi muốn sử dụng môt
tai nguyên (nếu chưa sử dụng bởi những Thread khac), nó sẽ lock tai nguyên đó cho đến khi sử dụng xong. Cac thread khac muốn sử dụng tai nguyên nay phải chờ đến khi tai nguyên được unlock.
@2011 HUI
Các vấn đề khi sử dụng Thread (Threading Issues )
Đông bô giữa cac Thread (Synchronization ): Dùng cơ chế Locking đê đông bô:
@2011 HUI
Lock trên m t đ i ộ ốt ng tr c khi th c ượ ướ ự
hi n l nh ệ ệ
Unlock đ i ốt ng khi th c ượ ự
hi n xongệ
Các vấn đề khi sử dụng Thread (Threading Issues )
Đông bô giữa cac Thread (Synchronization ): Đối tượng dùng trong Lock:
Visible cho tât cả cac phần cua Thread (thường khai bao trong class)
Phải có kiêu la reference Pham vi trong class: Private, Readonly
@2011 HUI
Các vấn đề khi sử dụng Thread (Threading Issues )
Deadlock : xảy ra khi hai Thread cùng chờ đê sử dụng tai nguyên đang lock bởi Thread kia (Thread 1 cố lock đối tượng đang sử dụng bởi Thread 2 va ngược lai)
Đê ngăn chặn Deadlock: Dùng Monitor.TryEnter với timeout
@2011 HUI
Cơ chế Wait-Notify
Dùng đê điêu khiên sự phối hợp giữa cac Thread Bai toan Producer-Consumer (sản xuât – Tiêu thụ)
C# dùng đối tượng cua lớp EventWaitHandle đê cai đặt cơ chế Wait-Notify
Cac phương thức cua EventWaitHandle: WaitOne: Block Thread hiên tai, cho đến khi nhân được Notify từ môt
Thread khac Set: Notify cac Thread đang ở chế đô waiting
Ví dụ: xem ví dụ nonWaitNotify va ThreadWaitNotify (dong bo ket hop phoi hop)
@2011 HUI