using threads
TRANSCRIPT
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
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
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.
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.
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.
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).
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.
8
CƠ BẢN VỀ THREAD TRONG C#(1)
9
CƠ BẢN VỀ THREAD TRONG C#(1)
10
CƠ BẢN VỀ THREAD TRONG C#(1)
11
CƠ BẢN VỀ THREAD TRONG C#(2)
Truyền tham số cho thread
12
CƠ BẢN VỀ THREAD TRONG C#(2)
Truyền tham số cho thread(lambda expression)
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.
14
CƠ BẢN VỀ THREAD TRONG C#(4)
Các phương thức thông dụng
15
Các phương thức thông dụng
16
Các thuộc tính thông dụng
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.
18
CƠ BẢN VỀ THREAD TRONG C#(5)
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).
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.
21
Thread Pooling
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.
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.
24
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.
26
DEMO Sử dụng multithread: