using threads

26
MÔN: LẬP TRÌNH MẠNG USING THREADS Nhóm: Nguyễn Văn Lai - 10110059 Nguyễn Văn Huân - 101100 1

Upload: cong-thanh-nguyen

Post on 12-Jan-2017

769 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Using Threads

1

MÔN: LẬP TRÌNH MẠNG

USING THREADS

Nhóm: Nguyễn Văn Lai - 10110059 Nguyễn Văn Huân - 10110043

Page 2: Using Threads

2

NỘI DUNG CƠ BẢN Một số khái niệm

Đa nhiệm (Multitasking) Tiến trình (Process) Tuyến (Thread)

Cơ bản về Thread trong C# Tạo và thực thi thread Truyền tham số cho Thread Property ThreadState và Priority Các phương thức và thuộc tính thông dụng của

Thread Foreground và Background Thread Thread Pooling Đồng bộ hóa và locking Deadlock

Page 3: Using Threads

3

DEMO Sử Thread cơ bản. Sử dụng Synchronization trong

multiThread. Sử dụng MultiThread trong các chương

trình Server. Sử dụng ThreadPool trong các chương

trình Server.

Page 4: Using Threads

4

MỘT SỐ KHÁI NIỆM (1) Đa nhiệm (Multitasking) : là khả năng hệ

điều hành làm nhiều công việc tại một thời điểm.

Page 5: Using Threads

5

MỘT SỐ KHÁI NIỆM (2) Tiến trình (Process) : Khi chạy một ứng

dụng, hệ điều hành sẽ cấp phát riêng cho ứng dụng đó bộ nhớ và các tài nguyên khác.

Bộ nhớ và tài nguyên vật lý riêng biệt này được gọi là một tiến trình.

Các tài nguyên và bộ nhớ của một tiến trình thì chỉ tiến trình đó được phép truy cập.

Page 6: Using Threads

6

MỘT SỐ KHÁI NIỆM (3) Tuyến (Thread) : Trong hệ thống, một

tiến trình có thể có một hoặc nhiều chuổi nhiệm vụ thực hiện tách biệt nhau và có thể chạy đồng thời. Một chuổi thực hiện này được gọi là tuyến (Thread).

Trong một ứng dụng, Thread khởi tạo đầu tiên gọi là thread sơ cấp hoặc thread chính (main).

Page 7: Using Threads

7

CƠ BẢN VỀ THREAD TRONG C#(1)

Tạo và thực thi Thread : .Net cung cấp lớp Thread trong namespace

System.Threading

Các bước tạo một thread : Tạo phương thức (gọi là phương thức callback)

sẻ thực thi khi thread được gọi. Tạo đối tượng Thread và truyền một delegate

ThreadStart chứa phương thức sẽ thực thi vào constructor của thread.

Chạy thread : gọi phương thức Start() của đối tượng thread vừa tạo.

Page 8: Using Threads

8

CƠ BẢN VỀ THREAD TRONG C#(1)

Page 9: Using Threads

9

CƠ BẢN VỀ THREAD TRONG C#(1)

Page 10: Using Threads

10

CƠ BẢN VỀ THREAD TRONG C#(1)

Page 11: Using Threads

11

CƠ BẢN VỀ THREAD TRONG C#(2)

Truyền tham số cho thread

Page 12: Using Threads

12

CƠ BẢN VỀ THREAD TRONG C#(2)

Truyền tham số cho thread(lambda expression)

Page 13: Using Threads

13

CƠ BẢN VỀ THREAD TRONG C#(3)

Property ThreadState và PriorityThreadState : thuộc tính ThreadState cho

thấy trạng thái hiện tại của thread. Mỗi một lời gọi phương thức của thread sẽ làm thay đổi giá trị thuộc tính này như Unstarted, Running, Suspended, Stopped,  Aborted,….

Priority : Thuộc tính này xác định mức độ ưu tiên mà thread sẽ được thực thi so với các thread khác. Mỗi thread khi được tạo ra mang giá trị priority là Normal. Các giá trị mà thuộc tính có thể có bao gồm:  Lowest, BelowNormal, Normal, AboveNormal và Highest.

Page 14: Using Threads

14

CƠ BẢN VỀ THREAD TRONG C#(4)

Các phương thức thông dụng

Page 15: Using Threads

15

Các phương thức thông dụng

Page 16: Using Threads

16

Các thuộc tính thông dụng

Page 17: Using Threads

17

CƠ BẢN VỀ THREAD TRONG C#(5)

Foreground và Background Thread Thread ban đầu được tạo ra gọi là

foreground.Ứng dụng sẽ tiếp tục chạy nếu như tất cả

các foreground thread chưa chạy xong mặc dù bạn thực hiện tắt ứng dụng.

Nếu tất cả các foreground thread hoàn thành, ứng dụng sẻ tắt, đồng thời tất cả các background thread cũng bị tắt theo.

Để xác định một Thread là foreground hay background, bạn sử dụng thuộc tính IsBackground.

Page 18: Using Threads

18

CƠ BẢN VỀ THREAD TRONG C#(5)

Page 19: Using Threads

19

CƠ BẢN VỀ THREAD TRONG C#(6)

Thread PoolingThread Pooling là một kĩ thuật cho phép

bạn sử dụng các thread hiệu quả hơn bằng cách quản lý và phân phối chúng hợp lý, tận dụng tối đa thời gian nhàn rỗi và tăng hiệu suất của chương trình.

Mỗi chương trình được cung cấp một Thread pool khi khởi tạo, vì thế bạn không cần tạo một thể hiện của thread pool để sử dụng.

Một đặc điểm của Thread pool là các thread sẽ được đặt ở chế độ background (Background Thread).

Page 20: Using Threads

20

CƠ BẢN VỀ THREAD TRONG C#(6)

Thread PoolingCác tác vụ khi được thêm vào Thread

pool sẽ được thực thi khi có một thread đang ở trạng thái sẵn sàng.

Sau khi kết thúc một tác vụ, thread sẽ chuyển về trạng thái sẵn sàng để chờ một công việc khác.

Để sử dụng thread pool, bạn chỉ sử dụng phương thức tĩnh QueueUserWorkItem() của lớp ThreadPool.

Page 21: Using Threads

21

Thread Pooling

Page 22: Using Threads

22

CƠ BẢN VỀ THREAD TRONG C#(7)

Đồng bộ hóa và lockingVấn đề bảo toàn dữ liệu khi dùng

thread là rất quan trọng vì có thể gây ra những sai sót khi nhiều thread cùng thay đổi cùng dữ liệu tại một thời điểm.

Vì thế .Net cung cấp một số kĩ thuật để đồng bộ việc truy xuất dữ liệu. Một khi được sử dụng, dữ liệu sẽ bị khóa lại và các thread khác muốn sử dụng phải chờ cho đến khi dữ liệu hay tài nguyên được giải phóng.

Page 23: Using Threads

23

CƠ BẢN VỀ THREAD TRONG C#(7)

Đồng bộ hóa và locking .Net cung cấp một số giải pháp cho vấn

đề này như Monitor, SpinLock, Mutex, WaitHandle,…

Nhóm chỉ giới thiệu về từ khóa lock.

Page 24: Using Threads

24

Page 25: Using Threads

25

CƠ BẢN VỀ THREAD TRONG C#(8)

DeadlockĐồng bộ hóa khi sử dụng thread là một công

việc cần thiết, tuy nhiên nếu không cẩn thận bạn sẽ gặp phải tình trạng chương trình dừng hoạt động vô thời hạn. Tình trạng này được đặt tên là deadlock. Deadlock xảy ra khi có ít nhất hai thread cùng đợi thread kia giải phóng, thật “trùng hợp” là cả hai lại đang giữ “chìa khóa” của nhau.

Để khắc phục tình trạng này bạn cần sử dụng lock cho các đối tượng theo thứ tự rõ ràng. Tuy nhiên điều này không thể khắc phục hoàn toàn với những chương trình tương đối phức tạp. Nếu dự án và mã nguồn của bạn không được tổ chức tốt, nguy cơ xảy ra rắc rối này rất cao và khó kiểm soát.

Page 26: Using Threads

26

DEMO Sử dụng multithread: