22
MULTI-THREADING PROGRAMMING Csharp (LP TRNH ĐA LUNG)

MULTI-THREADING PROGRAMMING Csharp

  • Upload
    zaria

  • View
    96

  • Download
    0

Embed Size (px)

DESCRIPTION

MULTI-THREADING PROGRAMMING Csharp. (LẬP TRÌNH ĐA LUỒNG). NỘI DUNG. Các khái niệm vê ̀ Thread Tạo va ̀ diều khiển Thread Tạo Thread Truyền dữ liệu cho Thread Đô ̣ ưu tiên của Thread Các vấn đê ̀ của Thread Vấn đê ̀ Race Condition Vấn đê ̀ Deadlock - PowerPoint PPT Presentation

Citation preview

Page 1: MULTI-THREADING PROGRAMMING Csharp

MULTI-THREADING PROGRAMMINGCsharp

(L P TRINH ĐA LU NG)Â Ô

Page 2: MULTI-THREADING PROGRAMMING Csharp

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

Page 3: MULTI-THREADING PROGRAMMING Csharp

Thread (concurrent programming) Lâp Trinh Đông Thơi

@2011 HUI

multiple threads

Page 4: MULTI-THREADING PROGRAMMING Csharp

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

Page 5: MULTI-THREADING PROGRAMMING Csharp

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

Page 6: MULTI-THREADING PROGRAMMING Csharp

Ứ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

Page 7: MULTI-THREADING PROGRAMMING Csharp

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

Page 8: MULTI-THREADING PROGRAMMING Csharp

Tao Threads (cont.)

@2011 HUI

Ví d : T o, th c hi n Thread ụ a ự ệ

Page 9: MULTI-THREADING PROGRAMMING Csharp

Tao Threads (cont.)

@2011 HUI

Ví d : T o và th c hi n Threadụ a ự ệ

Page 10: MULTI-THREADING PROGRAMMING Csharp

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

Page 11: MULTI-THREADING PROGRAMMING Csharp

Phương thức SleepVí dụ: sử dụng phương thức join

@2011 HUI

Page 12: MULTI-THREADING PROGRAMMING Csharp

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

Page 13: MULTI-THREADING PROGRAMMING Csharp

Phương thức SleepVí dụ: Sử dụng thread.Sleep

@2011 HUI

Page 14: MULTI-THREADING PROGRAMMING Csharp

Độ ư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

Page 15: MULTI-THREADING PROGRAMMING Csharp

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

Page 16: MULTI-THREADING PROGRAMMING Csharp

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

Page 17: MULTI-THREADING PROGRAMMING Csharp

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

Page 18: MULTI-THREADING PROGRAMMING Csharp

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

Page 19: MULTI-THREADING PROGRAMMING Csharp

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ệ

Page 20: MULTI-THREADING PROGRAMMING Csharp

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

Page 21: MULTI-THREADING PROGRAMMING Csharp

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

Page 22: MULTI-THREADING PROGRAMMING Csharp

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