multi-threading programming csharp

Post on 22-Feb-2016

102 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

TRANSCRIPT

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

top related