Lập trình windows đa luồng

73 439 2
Lập trình windows   đa luồng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Multithread Lập trình Windows Thread – Tiểu trình  Một process - tiến trình có nhiều thread  Trên máy có xử lí, hệ điều hành chuyển đổi nhanh thread tạo ảo giác thực thi đồng thời Ngữ cảnh sử dụng  Tương tác với giao diện tác vụ ngầm chạy  Lướt web Chrome đồng bookmark  Thiết lập độ ưu tiên  Hoạt động tiêu tốn nhiều thời gian không dừng toàn ứng dụng  Copy file bự!  Import file vào CSDL System.Threading  Cung cấp lớp giao diện cho lập trình đa luồng  Class chính: Thread       CurrentThread IsAlive IsBackground Name Priority ThreadState Bắt đầu thread Thread thread = new Thread(new ThreadStart (MyFunc)); thread.Start();  MyFunc hàm xử lí thread chạy Quan trọng!  Không có đảm bảo thread chạy trước! Độ ưu tiên  Theo thứ tự giảm dần      ThreadPriority.Highest ThreadPriority.AboveNormal ThreadPriority.Normal ThreadPriority.BelowNormal ThreadPriority.Lowest Ngưng tiếp tục  Thread.Suspend  Thread.Resume  Sleep: thread tự suspend Hủy bỏ  Thread.Abort()  Tạo ngoại lệ ThreadAbortException  Bảo vệ thân khỏi bị hủy từ thread khác: try { … } catch (ThreadAbortException) { Thread.ResetAbort() } Thread.Join()  Đợi thread bị ngắt kết thúc tiếp tục 10 Làm xong  Xử lí kiện RunWorkerCompleted 59 Bài tập vận dụng  Viết chương trình giả lập task tốn nhiều thời gian 60 Task.Factory.StartNew  Đối tượng Task Parallel Library Task  Task.Factory.StartNew(() => DoSomething()); 61 Ví dụ tạo task Không gán value = i sao? 62 Async & await  Cơ chế có từ C# 5.0 63 CSharp verions Managed Generics LINQ Dynamic Async please wait for the next slide clicking won’t make it come any faster C# 1.0 Trích từ slide Paulo Morgado C# 2.0 C# 3.0 C# 4.0 C# 5.0 64 Luồng xử lí cũ void Button_Click( ) { LoadImage(); UpdateView(); } Trích từ slide Paulo Morgado void LoadImage() { // LoadLocalData( ); // } 65 Luồng xử lí void Button_Click( ) { LoadImage(); UpdateView(); } Trích từ slide Paulo Morgado void LoadImage() { // DownloadRemoteData( ); // } 66 Các từ khóa async void Button_Click( ) { await LoadImageAsync(); UpdateView(); } async Task LoadImageAsync() { // await DownloadRemoteDataAsync( ); // } Trích từ slide Paulo Morgado 67 Async function  • • • Kiểu liệu trả void Task Task(Of TResult) 68 Số lần xuất await  Một nhiều lần  Nếu lần, thực thi hàm đồng 69 Cần tính đến  try-catch block Hold until download completed! Ví dụ từ blog jaliya 70 Biến hàm thành bất đồng bộ! Ví dụ từ blog jaliya 71 Ngăn cản gọi nhiều lần [MehthodImpl] (MethodImplOptions.Synchronized)] byte[] TransformData(byte[] buffer) { …… } Tại thời điểm có thread gọi hàm 72 Multithread với Form Control  Chỉ gọi phương thức control bên thread tạo  Ví dụ: Không cập nhật progress label bên thread khác thực task  Nếu phải gọi từ thread khác, sử dụng Invoke  Không dùng lock threads thao tác với form control form control gọi ngược lại hàm callback, dẫn tới deadlock 73 [...]... thực thi dù có exception } 17 Cài đặt với Monitor 18 Rút gọn bằng lock 19 Deadlock  Thread 1 đợi Thread 2 thả B để lock, thread 2 đợi thread 1 thả A để lock 20 21 Cách chống deadlock?  KHÔNG CÓ  Lập trình viên phải chịu trách nhiệm thiết kế! 22 Mutex (Mutual exclusive) Tại một thời điểm chỉ có 1 thread được vào! 23 Semaphore Tại một thời điểm nhiều thread có thể vào! 24 Đọc thêm: http://msdn.microsoft.com/en-us/library/System.Threading.Semaphore(v=vs.110).aspx... http://msdn.microsoft.com/en-us/library/System.Threading.Semaphore(v=vs.110).aspx Vài lưu ý với Semaphore  Count  Giảm mỗi khi có thread vào, tăng khi release  Khi = 0, các request sẽ bị block  Việc thread release bao nhiêu lần là trách nhiệm kiểm soát của lập trình viên! 25 Giọt cà phê cuối 26 Câu hỏi  Phân biệt lock vs monitor vs mutex vs semaphore? 27 lock  Dùng cho khối lệnh cần bảo vệ  Được khuyên dùng cho thao tác private member của lớp  Cài đặt... nguyên 31 Monitor vs Mutex  Monitor bị giới hạn trong Application Domain (có không gian địa chỉ ảo riêng, tách biệt các ứng dụng với nhau), chạy nhẹ hơn  Mutex có thể được đặt tên, chia sẻ ra nhiều tiến trình 32 Mutex vs Semaphore  Mutex là dạng semaphore đơn giản nhất, chỉ có một thread truy cập đến tài nguyên  Chỉ dùng khi cần lock giữa nhiều process vì khá nặng nề, phải chuyển đổi ngữ cảnh qua kernel ...  Thiết lập độ ưu tiên  Hoạt động tiêu tốn nhiều thời gian không dừng toàn ứng dụng  Copy file bự!  Import file vào CSDL System.Threading  Cung cấp lớp giao diện cho lập trình đa luồng ... liệu chuỗi Java, C#, Python  Mở đường cho lập trình song song tính toán phân tán! 49 Các luyện tập Multithread 50 Một số tập  Quick Sort đệ quy  Giả lập súc sắc: phút bạn gieo vòng?  Web page... Thread thả B để lock, thread đợi thread thả A để lock 20 21 Cách chống deadlock?  KHÔNG CÓ  Lập trình viên phải chịu trách nhiệm thiết kế! 22 Mutex (Mutual exclusive) Tại thời điểm có thread

Ngày đăng: 22/01/2016, 18:19

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan