Tải bản đầy đủ (.pdf) (20 trang)

Lập trình đa tuyến (MULTITHREADING)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.42 MB, 20 trang )

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 bản trực tuyến:
/>

MỤC LỤC
1. 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 bài học SV có thể:






Nêu được khái niệm Tuyến (Thread) và tiến trình (Process)
Phân tích được những ưu điểm của lập trình đa tuyến
Trình bày được các phương thức của lớp Threading
Vận dụng cơ chế đa tuyến, viết một số ứng dụng đơn giản.

Nội dung:
Một số khái niệm
Đa nhiệm
– Mutitasking : Là khả năng của hệ điều hành làm nhiều công việc (ví dụ chạy nhiều
ứng dụng) tại một thời điểm.
Tiến trình
– Process : Khi chạy một ứng dụng, hệ điều hành sẽ cấp phát riêng cho ứng dụng đó bộ
nhớ và các tài nguyên khác. Bộ nhớ và tài nguyên vật lý riêng biệt này được gọi là một
tiến trình. Các tài nguyên và bộ nhớ của một tiến trình thì chỉ tiến trình đó được phép
truy cập.
Lưu ý Một ứng dụng thường có một tiến trình nhưng cũng có thể có nhiều tiến trình !
Tiến trình ≠ Ứng dụng
Tuyến (đoạn) – Thread :
Trong hệ thống, một tiến trình có thể có một hoặc nhiều chuỗi thực hiện tách biệt nhau
và có thể chạy đồng thời. Mỗi chuỗi thực hiện này được gọi là một tuyến (Thread).
Trong một ứng dụng, Thread khởi tạo đầu tiên gọi là Thread sơ cấp hay Thread chính.
(Chính là phương thức Sub Main).

2/18


Một hình ảnh khác về mô hình đơn tuyến và đa tuyến:

Có 2 mô hình thread là Apartment Threading và Free Threading .


3/18


apartment-threading

Free - threading

Trong mô hình thứ hai, do các thread có thể cùng chia sẻ và truy cập dữ liệu chung, do
vậy có thể xảy ra xung đột (khiến kết quả không như mong muốn).
Ví dụ:

4/18


Kết quả không thể xác định được (không nhất quán) khi nhiều thread cùng truy cập
Ưu điểm và hạn chế của cơ chế đa tuyến
Ưu điểm:
Trong một ứng dụng có thể cho nhiều "công việc" (tuyến-thread) được thực thi đồng
thời. Các công việc này hoạt động độc lập với nhau và đóng vai trò như những chương
trình riêng biệt. Một thread có thể treo (Hang) mà không ảnh hưởng đến các thread khác.
Đa tuyến đặc biệt hữu ích trong việc xây dựng các ứng dụng Server – cái mà đáp ứng
nhiều yêu cầu từ các Client.
Hạn chế:
Việc cài đặt chương trình theo kiểu đa tuyến phức tạp hơn. Đồng thời phải giải quyết
vấn đề xung đột tài nguyên dùng chung. Việc cài đặt đa tuyến cũng sẽ tốn bộ nhớ hơn vì
hệ thống phải lưu lại những thông tin về mỗi thread. Hơn nữa Processor phải mất nhiều
thời gian hơn cho việc luân chuyển (switching) giữa các tuyến với nhau. Một vấn đề
khác nữa là tình huống khóa chết – deadlock !

5/18



Khóa chết – Deadlock

Đa tuyến trong .NET
MS.NET Framework cung cấp cho nhà phát triển cơ chế đa tuyến theo mô hình Free
Threading. Việc tạo và quản lý tuyến được thực hiện thông qua lớp Thread, thuộc
namespace là System.Threading.
Mô tả về 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 một Thread trong VB.NET
Cú pháp tạo một tuyến trong VB.NET

ở trên là một ví dụ về : Một tiến trình có một 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ị các thông báo khi chạy chương trình sau đây:

Ví dụ 2: Tạo nhiều thread trong một tiến trình
Trong một chương trình (tiến trình) có thể tạo nhiều Thread, ví dụ:


Câu hỏi: Cho biết thứ tự thông báo sau đây ?

8/18


Một ví dụ khác:

9/18


Phương thức Join()
Theo mặc định, khi gọi phương thức Start của một thread thì câu lệnh ngay sau nó sẽ
được thực thi mà không phụ thuộc vào việc thread đó đã kết thúc hay chưa. Như vậy,
trong trường hợp nếu câu lệnh ngay sau lời gọi phương thức Start mà phụ thuộc vào kết
quả thực thi của Thread (nói cách khác là ta muốn thread phải kết thúc trước khi làm câu
lệnh sau Start) thì sẽ dẫn đến kết quả sai.
Ví dụ: Hiển thị các số từ 1 đến 10. Sau khi hiển thị xong thì thông báo "Đã xong !".
→ Rõ ràng là thông báo "Đã xong" chỉ được thực hiện sau khi Thread kết thúc.

10/18


Lưu ý: Phương thức Join chỉ được gọi nếu Thread đang ở trạng thái Running (Trước đó
phải Start rồi). Có thể kiểm tra trạng thái của thread thông qua ThreadState.
Vấn đề xung đột trong cơ chế đa tuyến.
Trong ứng dụng windows Form, khi có nhiều Thread của ứng dụng truy cập ghi (write)
đến điều khiển (Control) trên Form (tổng quát là truy cập đến Control toàn cục) thì .NET
luôn cảnh báo với lỗi : "Cross-thread operation not valid…."
→ Giải quyết vấn đề này:

+ Nếu bạn thấy rằng việc truy cập đồng thời không gây ra những lỗi tiềm ẩn hay kết quả
có thể xác định được thì bạn cứ dịch ra file Exe và 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 2 thread, một thread TinhTong và một Thread TinhHieu của 2 số, kết quả hiển thị
trên 2 Label tương ứng.

→ Rõ ràng hai thread này chỉ đọc giá trị trong textbox và ghi kết quả ra 2 label riêng
biệt nên không có lỗi tiềm ẩn nào → ta không cần quan tâm đến cảnh báo của VS.NET.

Ý nghĩa : Tại một thời điểm chỉ cho phép một thread chạy đoạn lệnh (*) mà thôi. Điều
này giúp ta tránh được các kết quả không theo ý muốn.

11/18


Ví dụ 2:
Viết 2 Thread, mỗi thread đều hiển thị kết quả trên cùng một textbox.

.

12/18


Kết quả khi 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 <= n.
Đầu ra : chia tệp thành k hoặc k + 1 tệp, sử dụng cơ chế đa luồng.

16/18


Tham gia đóng góp
Tài liệu: Lập trình đa tuyến (MULTITHREADING)
Biên tập bởi: Khoa CNTT ĐHSP KT Hưng Yên
URL: />Giấy phép: />Module: Lập trình đa tuyến (MULTITHREADING)
Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên
URL: />Giấy phép: />
17/18


Chương trình Thư viện Học liệu Mở Việt Nam
Chương trình Thư viện Học liệu Mở Việt Nam (Vietnam Open Educational Resources
– VOER) được hỗ trợ bởi Quỹ Việt Nam. Mục tiêu của chương trình là xây dựng kho
Tài nguyên giáo dục Mở miễn phí của người Việt và cho người Việt, có nội dung phong

phú. Các nội dung đểu tuân thủ Giấy phép Creative Commons Attribution (CC-by) 4.0
do đó các nội dung đều có thể được sử dụng, tái sử dụng và truy nhập miễn phí trước
hết trong trong môi trường giảng dạy, học tập và nghiên cứu sau đó cho toàn xã hội.
Với sự hỗ trợ của Quỹ Việt Nam, Thư viện Học liệu Mở Việt Nam (VOER) đã trở thành
một cổng thông tin chính cho các sinh viên và giảng viên trong và ngoài Việt Nam. Mỗi
ngày có hàng chục nghìn lượt truy cập VOER (www.voer.edu.vn) để nghiên cứu, học
tập và tải tài liệu giảng dạy về. Với hàng chục nghìn module kiến thức từ hàng nghìn
tác giả khác nhau đóng góp, Thư Viện Học liệu Mở Việt Nam là một kho tàng tài liệu
khổng lồ, nội dung phong phú phục vụ cho tất cả các nhu cầu học tập, nghiên cứu của
độc giả.
Nguồn tài liệu mở phong phú có trên VOER có được là do sự chia sẻ tự nguyện của các
tác giả trong và ngoài nước. Quá trình chia sẻ tài liệu trên VOER trở lên dễ dàng như
đếm 1, 2, 3 nhờ vào sức mạnh của nền tảng Hanoi Spring.
Hanoi Spring là một nền tảng công nghệ tiên tiến được thiết kế cho phép công chúng dễ
dàng chia sẻ tài liệu giảng dạy, học tập cũng như chủ động phát triển chương trình giảng
dạy dựa trên khái niệm về học liệu mở (OCW) và tài nguyên giáo dục mở (OER) . Khái
niệm chia sẻ tri thức có tính cách mạng đã được khởi xướng và phát triển tiên phong
bởi Đại học MIT và Đại học Rice Hoa Kỳ trong vòng một thập kỷ qua. Kể từ đó, phong
trào Tài nguyên Giáo dục Mở đã phát triển nhanh chóng, được UNESCO hỗ trợ và được
chấp nhận như một chương trình chính thức ở nhiều nước trên thế giới.

18/18



×