Bài giảng Ngôn ngữ lập trình nâng cao - Bài 5: Đa luồng - Nguyễn Xuân Hùng

he information stored in the text format would be displayed on a screen as text. This means 'A' will be written as 'A' in the files. Similarly, the number –12345.678 will be written as the string "-12345.678". This means that you can directly display the contents of the file on the screen. Thread ưu tiên là thuộc tính chỉ ra độ ưu tiên của một thread so với độ ưu tiên của thread khác. Đồng bộ thread để chắc rằng nếu hai hoặc nhiều thread cần truy cập vào tài nguyen chia sẻ thì tài nguyên đó được sử dụng chỉ một thread tại một thời điểm. Lớp System.Monitor cho phép chúng ta truy cập tần tự vào các khối mã bằng khóa và tín hiệu. Kết nối giữa các tiến trình khi chạy trong cùng một máy tính hoặc thông qua mạng được gọi là kết nối liên tiến trình (interprocess communication). Phạm vi ứng dụng là tiến trình logic bên trong tiên trình vật lý. Mục đích chính của phạm vi ứng dụng là tách ứng dụng của chúng ta với các ứng dụng khác

pdf33 trang | Chia sẻ: huongthu9 | Lượt xem: 506 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Ngôn ngữ lập trình nâng cao - Bài 5: Đa luồng - Nguyễn Xuân Hùng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Slide 1 of 34Ver. 1.0 Object-Oriented Programming Using C# NGÔN NGỮ LẬP TRÌNH NÂNG CAO Slide 2 of 34Ver. 1.0 Object-Oriented Programming Using C# Trong mục này, chúng ta sẽ học: Xác định vòng đời của một thread Thực thi đa luồng (multiple threads) Xác định thread ưu tiên Sử dụng đồng bộ thread Xác định giao tiếp giữa các quá trình Mục tiêu Slide 3 of 34Ver. 1.0 Object-Oriented Programming Using C# Vòng đời của thread Vòng đời của thread bắt đầu khi một đối tượng của lớp System.Threading.Thread được tạo. Vòng đời của thread kết thúc với thực thi nhiệm vụ. Có đa dạng trạng thái trong vòng đời của thread. Các trạng thái đó là: Trạng thái chưa khởi động Trạng thái có thể chạy Trạng thái dừng Trạng thái chết Chúng ta cùng tìm hiểu chi tiết về vòng đời của thread. Slide 4 of 34Ver. 1.0 Object-Oriented Programming Using C# Start() Started Work Completed Stopped Vòng đời của thread (tiếp) Slide 5 of 34Ver. 1.0 Object-Oriented Programming Using C# Start() Started Suspend() Suspended Resume() Vòng đời của thread (tiếp) Slide 6 of 34Ver. 1.0 Object-Oriented Programming Using C# Start() Started Sleep() Wait/Join Sleep Interrupt() Time Expires Vòng đời của thread (tiếp) Slide 7 of 34Ver. 1.0 Object-Oriented Programming Using C# Start() Started Abort() Stop Request Thread Responds to Stop Request Stopped Vòng đời của thread (tiếp) Slide 8 of 34Ver. 1.0 Object-Oriented Programming Using C# Khi một thể hiện của lớp Thread được tạo, thread bắt đầu trạng thái chưa khởi động. Một thread mới là một đối tượng rỗng của lớp Thread, và không tốn tài nguyên hệ thống như là bộ nhớ khởi tạo nó. Trạng thái chưa khởi động Slide 9 of 34Ver. 1.0 Object-Oriented Programming Using C# Thread vẫn trong thái thái chưa khởi động đến khi chương trình gọi phương thức Start(), thread sẽ vào trạng thái có thể chạy và ngay lập tức trả về điều khiển lời gọi thread. Trạng thái này cũng được gọi là trạng thái sẵn sàng hoặc trạng thái đã bắt đầu. Thread mới bắt đầu và các thread khác trong chương trình cùng xử lý. Trạng thái có thể chạy Slide 10 of 34Ver. 1.0 Object-Oriented Programming Using C# Một thread ở trạng thái dừng nếu là: Ngủ - Sleeping Đợi - Waiting Khóa - Blocked Trạng thái dừng Slide 11 of 34Ver. 1.0 Object-Oriented Programming Using C# Trạng thái chết Một thread đang chạy vào trạng thái chết khi các câu lệnh trong phương thức thread được hoàn thành. Trạng thái này cũng được gọi là trạng thái kết thúc. Một chương trình có thể ép thread vào trạng thái chết bằng cách gọi phương thức Abort() của lớp Thread trên đối tượng thread thích hợp. Slide 12 of 34Ver. 1.0 Object-Oriented Programming Using C# Giới thiệu Multithreading Multithreading giúp thực thi nhiều hoạt động cùng một lúc và tiết kiệm thời gian cho người sử dụng. Multithreading cho phép chúng ta hoàn thành nhiều nhiệm vụ trong một chương trình. Đa nhiệm (Multitasking) là khả năng xử lý nhiều hơn một nhiệm vụ trong cùng thời điểm. Multitasking có thể chia ra các nhóm sau: Đa nhiệm dựa trên quá trình xử lý Đa nhiệm dựa trên Thread Chúng ta cùng tìm hiểu về multithreading. Slide 13 of 34Ver. 1.0 Object-Oriented Programming Using C# An đang làm việc trên máy vi tính. Giới thiệu về Multithreading (tiếp) Slide 14 of 34Ver. 1.0 Object-Oriented Programming Using C# Cô ấy đang ăn một trái táo, đọc một quyển sách và đang làm việc trên máy tính cùng một lúc. Giới thiệu Multithreading (tiếp) Slide 15 of 34Ver. 1.0 Object-Oriented Programming Using C# Ưu điểm của Multithreading Ưu điểm của multithreading là: Cải thiện hiệu năng Tối thiểu hóa sử dụng tài nguyên hệ thống Đồng thời truy cập nhiều ứng dụng Cấu trúc chương trình đơn giản Slide 16 of 34Ver. 1.0 Object-Oriented Programming Using C# Hạn chế của Multithreading Hạn chế multithreading là: Tình huống tương tranh(Race condition) Tình huống khóa chết (Deadlock condition) Bỏ khóa (Lock starvation) Slide 17 of 34Ver. 1.0 Object-Oriented Programming Using C# Tạo Multiple Threads Chúng ta có thể tạo (multiple threads) trong chương trình bằng cách mở rộng lớp Thread. Slide 18 of 34Ver. 1.0 Object-Oriented Programming Using C# Một trong các thuộc tính điều khiển hành vi của thread là thứ tự ưu tiên của nó. .NET Runtime Environment xử lý thread dựa trên độ ưu tiên của nó. Threads cố định lịch trình ưu tiên. Mỗi thread với độ ưu tiên của nó có độ ưu tiên trong queue của bộ xử lý. Xác định độ ưu tiên Thread Slide 19 of 34Ver. 1.0 Object-Oriented Programming Using C# Độ ưu tiên thread là thuộc tính chỉ ra độ ưu tiên của một thread cùng với độ ưu tiên của thread khác. Độ ưu tiên của thread có thể định nghĩa: Trên bình thường (Above normal) Dưới bình thường (Below normal) Cao nhất (Highest) Thấp nhất (Lowest) Bình thường (Normal) Thread với độ ưu tiên cao hơn chạy trước các thread khác có độ ưu tiên thấp hơn. Nếu C# gặp thread khác với độ ưu tiên cao hơn, thread hiện tại được chuyển về sau, và thread với độ ưu tiên cao hơn được xử lý. Xác định độ ưu tiên Thread (tiếp) Slide 20 of 34Ver. 1.0 Object-Oriented Programming Using C# Chúng ta có thể thiết lập độ ưu tiên sau khi nó được tạo sử dụng thuộc tính Priority của lớp Thread. Cú pháp sau minh họa cách thức thiết lập độ ưu tiên của thread: NewThread.Priority = ThreadPriority.Highest; Thiết lập độ ưu tiên của Thread Slide 21 of 34Ver. 1.0 Object-Oriented Programming Using C# Thiết lập độ ưu tiên của Thread (tiếp) NewThread.Priority = ThreadPriority.Highest; Thuộc tính ThreadPriority.Highest Chỉ ra thiết lập ưu tiên mới cho thread Slide 22 of 34Ver. 1.0 Object-Oriented Programming Using C# Nếu nhiều thread với độ ưu tiên giống nhau, chu kỳ lịch trình theo độ ưu tiên mà mỗi thread được cố định thời gian xử lý. Với thread có độ ưu thiên cao hơn đang chạy thì thread có độ ưu tiên thấp hơn không được xử lý. Khi không có thread nào được chạy ở độ ưu tiên đưa ra, lịch trình được chuyển xuống mức ưu tiên thấp hơn và lịch trình tại mức ưu tiên đó được xử lý. Thiết lập độ ưu tiên của Thread (tiếp) Slide 23 of 34Ver. 1.0 Object-Oriented Programming Using C# Trong nhiều ứng dụng multithreaded, khi thread cần chia sẻ dữ liệu với ứng dụng khác, ứng dụng cần chắc chắn rằng một thread không thay đổi dữ liệu đang được sử dụng bởi thread khác. C# cho phép chúng ta phối hợp hành động của multiple threads sử dụng phương thức đồng bộ hoặc câu lệnh đồng bộ. Sử dụng đồng bộ Threads Slide 24 of 34Ver. 1.0 Object-Oriented Programming Using C# Đồng bộ thread để chắc chắn rằng nếu hai hoặc nhiều thread cần truy cập tài nguyên chia sẻ thì tài nguyên đó được sử dụng chỉ bởi một thread tại một thời điểm. Chúng ta có thể đồng bộ mã của chúng ta bằng cách sử dụng từ khóa synchronized. Sự đồng bộ dựa trên khái niệm giám sát. Người giám sát (Monitor) là một đối tượng được sử dụng như một khóa dữ liệu thành viên và phương thức của lớp. Đồng bộ Threads Slide 25 of 34Ver. 1.0 Object-Oriented Programming Using C# Trong hình sau miêu tả cách thức đồng bộ thread Đồng bộ Threads (tiếp) Slide 26 of 34Ver. 1.0 Object-Oriented Programming Using C# Khóa sử dụng khóa giám sát Lớp System.Monitor cho phép chúng ta truy cập tuần tự vào khối mã bằng khóa và tín hiệu. Slide 27 of 34Ver. 1.0 Object-Oriented Programming Using C# Sử dụng khóa giám sát với câu lệnh khóa của C# Các thức khác để khóa mã sử dụng câu lệnh lock của C#. Mặc dù câu lệnh lock không hỗ trợ đầy đủ các tính năng trong lớp Monitor, nhưng nó cho phép chúng ta giành được và giải phóng khóa giám sát. Để sử dụng câu lệnh lock, chỉ cần xác định câu lệnh khóa với mã được đồng bộ trong dấu ngoặc {}. Cặp ngoặc chỉ ra điểm bắt đầu và kết thúc của đoạn mã được bảo vệ. Slide 28 of 34Ver. 1.0 Object-Oriented Programming Using C# Một tiến trình là một thể hiện của chương trình đang chạy. Kết nối của các tiến trình tại cùng thời điểm trong cùng máy tính hoặc thông qua mạng được gọi là giao tiếp kết nối liên tiến trình (IPC - interprocess communication) Để cho phép kết nối giữa nhiều tiến trình với một không gian địa chỉ duy nhất, nhân của hệ điều hành hành động như một kênh giao tiếp. Kết nối giữa các tiến trình (Processes) Slide 29 of 34Ver. 1.0 Object-Oriented Programming Using C# Trong .NET, threads xử lý trong phạm vi một ứng dụng. Một thread không thể gọi một phương thức trong một thread của tiến trình khác. Tuy nhiên, trong .NET, thread có thể vượt qua ranh giới phạm vi ứng dụng, và một phương thức bên ngoài một thread có thể gọi một phương thức trong phạm vi ứng dụng khác. Phạm vi ứng dụng là tiến trình logic bên trong tiến trình vật lý. Phạm vi ứng dụng Slide 30 of 34Ver. 1.0 Object-Oriented Programming Using C# Phạm vi ứng dụng (tiếp) Hình sau chỉ ra phạm vi ứng dụng tương tác với nhau. Slide 31 of 34Ver. 1.0 Object-Oriented Programming Using C# Mục đích chính của phạm vi ứng dụng là tách ứng dụng của chúng ta từ các ứng dụng khác. Phạm vi ứng dụng chạy trên một tiến trình riêng. Chúng ta sử dụng lớp System.AppDomain để quản lý phạm vi ứng dụng. Phạm vi ứng dụng (tiếp) Slide 32 of 34Ver. 1.0 Object-Oriented Programming Using C# Tổng kết All the information stored in the text format would be displayed on a screen as text. This means 'A' will be written as 'A' in the files. Similarly, the number –12345.678 will be written as the string "-12345.678". This means that you can directly display the contents of the file on the screen. Trong phần này, chúng ta đã học: Các kiểu của đa nhiệm là: Đa nhiện dựa trên tiến trình (process) Đa nhiệm dựa trên luồng (thread) Ưu điểm của đa luồng (multithreading) là: Cải thiện hiệu năng Sử dụng tối thiểu tài nguyên hệ thống Truy cập nhiều ứng dụng cùng một lúc Hạn chế của đa luồng (multithreading) là: Tình huống tương tranh (Race condition) Tình huống khóa chết (Deadlock condition) Khóa đói (Lock starvation) Slide 33 of 34Ver. 1.0 Object-Oriented Programming Using C# Tổng kết (tiếp) All the information stored in the text format would be displayed on a screen as text. This means 'A' will be written as 'A' in the files. Similarly, the number –12345.678 will be written as the string "-12345.678". This means that you can directly display the contents of the file on the screen. Thread ưu tiên là thuộc tí h chỉ ra độ ưu tiên của một thread so với độ ưu tiên của thread khác. Đồng bộ thread để chắc rằng nếu hai hoặc nhiều thread cần truy cập vào tài nguyen chia sẻ thì tài nguyên đó được sử dụng chỉ một thread tại một thời điểm. Lớp System.Monitor cho phép chúng ta truy cập tần tự vào các khối mã bằng khóa và tín hiệu. Kết nối giữa các tiến trình khi chạy trong cùng một máy tính hoặc thông qua mạng được gọi là kết nối liên tiến trình (interprocess communication). Phạm vi ứng dụng là tiến trình logic bên trong tiên trình vật lý. Mục đích chính của phạm vi ứng dụng là tách ứng dụng của chúng ta với các ứng dụng khác.

Các file đính kèm theo tài liệu này:

  • pdfbai_giang_ngon_ngu_lap_trinh_nang_cao_bai_5_da_luong_nguyen.pdf
Tài liệu liên quan