Bài giảng Lập trình hướng đối tượng - Chương 9: Lập trình song song bằng C#

Chương 9  
Lập trình song song bằng C#  
9.0 Dẫn nhập  
9.1 Tổng quát về lập trình song song  
9.2 Lập trình multi-process bằng class Process  
9.3 Lập trình multi-thread bằng class Thread  
9.4 Demo tính hiệu quả của multi-thread  
9.5 Demo vấn ₫ề tương tranh giữa các thread ₫ồng thời  
9.6 Demo việc giải quyết tương tranh giữa các thread  
9.7 Kết chương  
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 1  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.0 Dẫn nhập  
Chương này giới thiệu các ₫ối tượng phục vụ ghi/₫ọc dữ liệu  
ra/vào file cùng các tác vụ ghi/₫ọc dữ liệu cổ ₫iển ra/vào file.  
Chương này cũng giới thiệu các ₫ối tượng phục vụ ghi/₫ọc hệ  
thống ₫ối tượng ra/vào file cùng các tác vụ ghi/₫ọc hệ thống ₫ối  
tượng có mối quan hệ tham khảo phức tạp ra/vào file.  
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 2  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.1 Tổng quát về lập trình song song  
Thường ₫ể giải quyết bài toán nào ₫ó, ta thường dùng giải thuật  
tuần tự nhờ tính dễ hiểu, dễ kiểm soát của nó. Chương trình dùng  
thuật giải tuần tự khi chạy trở thành process mono-thread hay  
process tuần tự.  
Process tuần tự hoạt ₫ộng không hiệu quả vì không lợi dụng triệt  
₫ể ₫ược các CPU xử lý trên máy tính vật lý. Lưu ý rằng hiện nay các  
máy PC, smartphone hay tablet ₫ều dùng CPU ₫a nhân. Thí dụ  
galaxy S4 ở thị trường Việt Nam có 8 nhân.  
Để máy giải quyết bài toán hiệu quả hơn, ta nên dùng thuật toán  
song song bằng cách nhận dạng các hoạt ₫ộng có thể thực hiện  
₫ồng thời rồi nhờ nhiều CPU thực hiện chúng ₫ồng thời.  
Một trong các phương pháp hiện thực thuật toán song song là lập  
trình multi-process và multi-thread.  
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 3  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.2 Lập trình multi-process bằng class Process  
Môi trường .Net cung cấp class tên là Process ₫ể giúp ta lập trình  
multi-process dễ dàng.  
Class Process thuộc namespace System.Diagnostics, nó chứa các  
thuộc tính và tác vụ giúp ta quản lý process dễ dàng, thuận lợi.  
Thí dụ thuộc tính StartInfo là 1 ₫ối tượng gồm nhiều thuộc tính xác  
₫ịnh thông tin ₫ể kích hoạt ứng dụng xác ₫ịnh :  
Process myProcess = new Process();  
myProcess.StartInfo.UseShellExecute = false;  
myProcess.StartInfo.FileName = txtPath.Text;  
myProcess.StartInfo.CreateNoWindow = true;  
….  
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 4  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.2 Lập trình multi-process bằng class Process  
Sau khi thiết lập ₫ầy ₫ủ các thông tin ₫ể khởi tạo process, ta có thể  
gọi tác vụ Start ₫ể kích hoạt nó chạy :  
myProcess.Start();  
Sau khi ₫ược kích hoạt, process sẽ chạy song hành và ₫ộc lập với  
process kích hoạt nó cho ₫ến khi kết thúc theo thuật giải của nó.  
Tuy nhiên, từ bên ngoài ta có thể giết process nhờ tác vụ Kill :  
myProcess.Kill();  
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 5  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.2 Lập trình multi-process bằng class Process  
Ta hãy thử viết 1 ứng dụng quản lý process ₫ơn giản có form giao  
diện như sau :  
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 6  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.3 Lập trình multi-threads bằng class Thread  
Môi trường .Net cung cấp class tên là Thread ₫ể giúp ta lập trình  
multi-thread dễ dàng.  
Class Thread thuộc namespace System.Threading, nó chứa các  
thuộc tính và tác vụ giúp ta quản lý thread dễ dàng, thuận lợi.  
Thường mỗi thread sẽ chạy ₫oạn code ₫ược miêu tả trong 1 hàm  
chức năng xác ₫ịnh. Thí dụ khi process ₫ược kích hoạt, HĐH sẽ tạo  
tường minh thread ban ₫ấu cho process ₫ó, thread chính này sẽ  
chạy ₫oạn code của hàm Main của class ứng dụng.  
Để tạo thread mới, ta có thể dùng lệnh :  
Thread t = new Thread  
(new ParameterizedThreadStart(tenhamcanchay));  
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 7  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.3 Lập trình multi-threads bằng class Thread  
Để kích hoạt chạy thread, ta có thể gọi tác vụ Start :  
t.Start (new Params(danhsachthamso));  
với Params là class ₫ối tượng chứa các thông số mà ta muốn  
truyền/nhận cho thread mới.  
Lưu ý tác vụ mà thread sẽ chạy phải ₫ược ₫ặc tả với tham số hình  
thức là kiểu object :  
void TinhTich (object obj) { //tác vụ mà thread sẽ chạy  
Params p = (Params)obj; //ép kiểu tham số về kiểu mong muốn  
...  
}
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 8  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.3 Lập trình multi-threads bằng class Thread  
Để tạm dừng thread, ta có thể gọi tác vụ Suspend :  
t.Suspend();  
Để chạy tiếp thread, ta có thể gọi tác vụ Resume :  
t.Resume();  
Để dừng và xóa thread, ta có thể gọi tác vụ Abort :  
t.Abort();  
Để thay ₫ổi quyền ưu tiên thread, ta thực hiện lệnh gán :  
t.Priority = ThreadPriority.Normal;  
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 9  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.3 Lập trình multi-threads bằng class Thread  
Trên Windows, mỗi process có thể ở 1 trong 6 cấp quyền ưu tiên  
sau ₫ây :  
IDLE_PRIORITY_CLASS  
BELOW_NORMAL_PRIORITY_CLASS  
NORMAL_PRIORITY_CLASS  
ABOVE_NORMAL_PRIORITY_CLASS  
HIGH_PRIORITY_CLASS  
REALTIME_PRIORITY_CLASS  
Cấp quyền ưu tiên của process sẽ quyết ₫ịnh các thread trong  
process ₫ó chạy theo quyền ưu tiên như thế nào.  
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 10  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.3 Lập trình multi-threads bằng class Thread  
Trên Windows, mỗi thread trong process có thể ở 1 trong 7 cấp  
quyền ưu tiên sau ₫ây :  
THREAD_PRIORITY_IDLE  
THREAD_PRIORITY_LOWEST  
THREAD_PRIORITY_BELOW_NORMAL  
THREAD_PRIORITY_NORMAL  
THREAD_PRIORITY_ABOVE_NORMAL  
THREAD_PRIORITY_HIGHEST  
THREAD_PRIORITY_TIME_CRITICAL  
Cấp quyền ưu tiên của process sẽ quyết ₫ịnh các thread với từng  
cấp quyền ưu tiên trên ₫ây sẽ ₫ược xử lý như thế nào.  
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 11  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.3 Lập trình multi-threads bằng class Thread  
Process priority class  
IDLE_PRIORITY_CLASS  
Thread priority level  
THREAD_PRIORITY_IDLE  
THREAD_PRIORITY_LOWEST  
Base priority  
1
2
THREAD_PRIORITY_BELOW_NORMAL 3  
THREAD_PRIORITY_NORMAL  
THREAD_PRIORITY_ABOVE_NORMAL 5  
THREAD_PRIORITY_HIGHEST  
THREAD_PRIORITY_TIME_CRITICAL 15  
4
6
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 12  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.3 Lập trình multi-threads bằng class Thread  
Process priority class  
Thread priority level  
Base priority  
BELOW_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_IDLE  
THREAD_PRIORITY_LOWEST  
1
4
THREAD_PRIORITY_BELOW_NORMAL 5  
THREAD_PRIORITY_NORMAL  
6
THREAD_PRIORITY_ABOVE_NORMAL 7  
THREAD_PRIORITY_HIGHEST  
THREAD_PRIORITY_TIME_CRITICAL 15  
8
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 13  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.3 Lập trình multi-threads bằng class Thread  
Process priority class  
Thread priority level  
Base priority  
NORMAL_PRIORITY_CLASS  
THREAD_PRIORITY_IDLE  
THREAD_PRIORITY_LOWEST  
1
6
THREAD_PRIORITY_BELOW_NORMAL 7  
THREAD_PRIORITY_NORMAL  
THREAD_PRIORITY_ABOVE_NORMAL 9  
8
THREAD_PRIORITY_HIGHEST  
10  
THREAD_PRIORITY_TIME_CRITICAL 15  
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 14  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.3 Lập trình multi-threads bằng class Thread  
Process priority class  
Thread priority level  
Base priority  
ABOVE_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_IDLE  
THREAD_PRIORITY_LOWEST  
1
8
THREAD_PRIORITY_BELOW_NORMAL 9  
THREAD_PRIORITY_NORMAL  
10  
THREAD_PRIORITY_ABOVE_NORMAL 11  
THREAD_PRIORITY_HIGHEST 12  
THREAD_PRIORITY_TIME_CRITICAL 15  
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 15  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.3 Lập trình multi-threads bằng class Thread  
Process priority class  
HIGH_PRIORITY_CLASS  
Thread priority level  
THREAD_PRIORITY_IDLE  
THREAD_PRIORITY_LOWEST  
Base priority  
1
11  
THREAD_PRIORITY_BELOW_NORMAL 12  
THREAD_PRIORITY_NORMAL 13  
THREAD_PRIORITY_ABOVE_NORMAL 14  
THREAD_PRIORITY_HIGHEST 15  
THREAD_PRIORITY_TIME_CRITICAL 15  
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 16  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.3 Lập trình multi-threads bằng class Thread  
Process priority class  
Thread priority level  
Base priority  
REALTIME_PRIORITY_CLASS  
THREAD_PRIORITY_IDLE  
THREAD_PRIORITY_LOWEST  
16  
22  
THREAD_PRIORITY_BELOW_NORMAL 23  
THREAD_PRIORITY_NORMAL 24  
THREAD_PRIORITY_ABOVE_NORMAL 25  
THREAD_PRIORITY_HIGHEST 26  
THREAD_PRIORITY_TIME_CRITICAL 31  
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 17  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.4 Demo tính hiệu quả của multi-thread  
Để demo tính hiệu quả của lập trình multi-thread trên các máy tính  
₫a nhân, ta hãy thử viết ứng dụng tính tích của 2 ma trận có kích  
thước lớn (thí dụ 2000*2000). Ta thiết kế form ứng dụng như sau :  
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 18  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.4 Demo tính hiệu quả của multi-thread  
Ứng dụng cho phép người dùng nhập số thread cần dùng (n), rồi  
chia ma trận tích thành N/n nhóm hàng rồi tạo thread con ₫ể tính  
dùm từng nhóm hàng. Sau khi tính ma trận tích xong, ứng dụng sẽ  
hiển thị cho người dùng thấy thời gian tính toán ₫ể người dùng  
₫ánh giá ₫ộ hiệu quả.  
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 19  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
9.4 Demo tính hiệu quả của multi-thread  
void TinhTich (object obj) {  
DateTime t1 = DateTime.Now; //ghi nhận thời ₫iểm bắt ₫ầu chạy  
Params p = (Params)obj;  
int h, c, k;  
for (h = p.sr; h < p.er; h++)  
for (c = 0; c < N; c++) {  
double s = 0;  
//ép kiểu tham số về ₫ối tượng cần dùng  
//lặp theo hàng  
//lặp theo cột  
for (k = 0; k < N; k++)  
s = s + A[h, k] * B[k, c];  
C[h, c] = s;  
}
stateLst[p.id] = 1;  
//ghi nhận trạng thái hoàn thành  
dateLst[p.id] = DateTime.Now.Subtract(t1);//tính thời gian chạy  
}
Môn : Lập trình hướng ₫ối tượng  
Chương 9 : Lập trình song song bằng VC#  
Slide 20  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Tải về để xem bản đầy đủ
pdf 28 trang myanh 27540 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình hướng đối tượng - Chương 9: Lập trình song song bằng C#", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_chuong_9_lap_trinh_song.pdf