Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
1,42 MB
Nội dung
Lập trình đa tuyến (MULTITHREADING) Biên tập bởi: Khoa CNTT ĐHSP KT Hưng Yên Lập trình đa tuyến (MULTITHREADING) Biên tập bởi: Khoa CNTT ĐHSP KT Hưng Yên Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên Phiên trực tuyến: http://voer.edu.vn/c/bc908932 MỤC LỤC Lập trình đa tuyến (MULTITHREADING) Tham gia đóng góp 1/18 Lập trình đa tuyến (MULTITHREADING) Mục tiêu : Kết thúc học SV có thể: • • • • Nêu khái niệm Tuyến (Thread) tiến trình (Process) Phân tích ưu điểm lập trình đa tuyến Trình bày phương thức lớp Threading Vận dụng chế đa tuyến, viết số ứng dụng đơn giản Nội dung: Một số khái niệm Đa nhiệm – Mutitasking : Là khả hệ điều hành làm nhiều công việc (ví dụ chạy nhiều ứng dụng) thời điểm Tiến trình – Process : Khi chạy ứng dụng, hệ điều hành cấp phát riêng cho ứng dụng nhớ tài nguyên khác Bộ nhớ tài nguyên vật lý riêng biệt gọi tiến trình Các tài nguyên nhớ tiến trình tiến trình phép truy cập Lưu ý Một ứng dụng thường có tiến trình có nhiều tiến trình ! Tiến trình ≠ Ứng dụng Tuyến (đoạn) – Thread : Trong hệ thống, tiến trình có nhiều chuỗi thực tách biệt chạy đồng thời Mỗi chuỗi thực gọi tuyến (Thread) Trong ứng dụng, Thread khởi tạo gọi Thread sơ cấp hay Thread (Chính phương thức Sub Main) 2/18 Một hình ảnh khác mô hình đơn tuyến đa tuyến: Có mô hình thread Apartment Threading Free Threading 3/18 apartment-threading Free - threading Trong mô hình thứ hai, thread chia sẻ truy cập liệu chung, xảy xung đột (khiến kết không mong muốn) Ví dụ: 4/18 Kết xác định (không quán) nhiều thread truy cập Ưu điểm hạn chế chế đa tuyến Ưu điểm: Trong ứng dụng cho nhiều "công việc" (tuyến-thread) thực thi đồng thời Các công việc hoạt động độc lập với đóng vai trò chương trình riêng biệt Một thread treo (Hang) mà không ảnh hưởng đến thread khác Đa tuyến đặc biệt hữu ích việc xây dựng ứng dụng Server – mà đáp ứng nhiều yêu cầu từ Client Hạn chế: Việc cài đặt chương trình theo kiểu đa tuyến phức tạp Đồng thời phải giải vấn đề xung đột tài nguyên dùng chung Việc cài đặt đa tuyến tốn nhớ hệ thống phải lưu lại thông tin thread Hơn Processor phải nhiều thời gian cho việc luân chuyển (switching) tuyến với Một vấn đề khác tình khóa chết – deadlock ! 5/18 Khóa chết – Deadlock Đa tuyến NET MS.NET Framework cung cấp cho nhà phát triển chế đa tuyến theo mô hình Free Threading Việc tạo quản lý tuyến thực thông qua lớp Thread, thuộc namespace System.Threading Mô tả lớp Thread: Một số phương thức thường dùng Một số thuộc tính public thường dùng: 6/18 Tạo Thread VB.NET Cú pháp tạo tuyến VB.NET ví dụ : Một tiến trình có Thread - Phân tích ví dụ trên: - Một số câu hỏi: 7/18 Cho biết trình tự hiển thị thông báo chạy chương trình sau đây: Ví dụ 2: Tạo nhiều thread tiến trình Trong chương trình (tiến trình) tạo nhiều Thread, ví dụ: Câu hỏi: Cho biết thứ tự thông báo sau ? 8/18 Một ví dụ khác: 9/18 Phương thức Join() Theo mặc định, gọi phương thức Start thread câu lệnh sau thực thi mà không phụ thuộc vào việc thread kết thúc hay chưa Như vậy, trường hợp câu lệnh sau lời gọi phương thức Start mà phụ thuộc vào kết thực thi Thread (nói cách khác ta muốn thread phải kết thúc trước làm câu lệnh sau Start) dẫn đến kết sai Ví dụ: Hiển thị số từ đến 10 Sau hiển thị xong thông báo "Đã xong !" → Rõ ràng thông báo "Đã xong" thực sau Thread kết thúc 10/18 Lưu ý: Phương thức Join gọi Thread trạng thái Running (Trước phải Start rồi) Có thể kiểm tra trạng thái thread thông qua ThreadState Vấn đề xung đột chế đa tuyến Trong ứng dụng windows Form, có nhiều Thread ứng dụng truy cập ghi (write) đến điều khiển (Control) Form (tổng quát truy cập đến Control toàn cục) NET cảnh báo với lỗi : "Cross-thread operation not valid…." → Giải vấn đề này: + Nếu bạn thấy việc truy cập đồng thời không gây lỗi tiềm ẩn hay kết xác định bạn dịch file Exe chạy bình thường Hoặc: + System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False + Hoặc không Nhấn F5 (chế độ chạy có Debug) mà nhấn Ctrl-F5 (Không debug) Ví dụ: Tạo thread, thread TinhTong Thread TinhHieu số, kết hiển thị Label tương ứng → Rõ ràng hai thread đọc giá trị textbox ghi kết label riêng biệt nên lỗi tiềm ẩn → ta không cần quan tâm đến cảnh báo VS.NET Ý nghĩa : Tại thời điểm cho phép thread chạy đoạn lệnh (*) mà Điều giúp ta tránh kết không theo ý muốn 11/18 Ví dụ 2: Viết Thread, thread hiển thị kết textbox 12/18 Kết có SyncLock Một số ví dụ Viết chương trình thể tiến trình 13/18 Viết chương trình mô đồng hồ điện tử 14/18 15/18 Viết chương trình Copy file lớn file Đầu vào: Tệp có kích thước n Tên file FileName số k [...]... có SyncLock Một số ví dụ Viết chương trình thể hiện 2 thanh tiến trình 13/18 Viết chương trình mô phỏng đồng hồ điện tử 14/18 15/18 Viết chương trình Copy file lớn ra các file con Đầu vào: Tệp có kích thước n Tên file là FileName và một số k