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
33 trang |
Chia sẻ: huongthu9 | Lượt xem: 506 | Lượt tải: 0
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:
- bai_giang_ngon_ngu_lap_trinh_nang_cao_bai_5_da_luong_nguyen.pdf