CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 117

117

Chương 4: Tiểu trình, tiến trình, và sự đồng bộ

ột trong những điểm mạnh của hệ điều hành Microsoft Windows là cho phép
nhiều chương trình (tiến trình—process) chạy đồng thời và cho phép mỗi tiến
trình thực hiện nhiều tác vụ đồng thời (bằng nhiều tiểu trình—thread). Chương

này sẽ trình bày cách kiểm soát các tiến trình và các tiểu trình trong các ứng dụng dựa vào các
tính năng do thư viện lớp .NET Framework cung cấp. Các mục trong chương này sẽ trình bày
cách thực hiện các vấn đề sau:

M

Sử dụng các kỹ thuật và các tính năng khác nhau của .NET Framework để tạo các tiểu
trình mới (mục 4.1 đến 4.5).

Kiểm soát quá trình thực thi của một tiểu trình để biết được khi nào nó kết thúc (mục
4.6 và 4.7).

Đồng bộ hóa quá trình thực thi của nhiều tiểu trình (mục 4.8 và 4.9).

Chạy và dừng các tiến trình mới (mục 4.10 và 4.11).

Bảo đảm rằng tại một thời điểm chỉ có thể chạy một thể hiện của ứng dụng (mục 4.12).

1.

1.

Th c thi ph

ng th c v i thread-pool

ươ

ứ ớ

Th c thi ph

ng th c v i thread-pool

ươ

ứ ớ

Bạn cần thực thi một phương thức bằng một tiểu trình trong thread-pool của bộ
thực thi.

Khai báo một phương thức chứa mã lệnh cần thực thi; phương thức này phải trả
về

void

và chỉ nhận một đối số. Sau đó, tạo một thể hiện của ủy nhiệm

System.Threading.WaitCallback

tham chiếu đến phương thức này. Tiếp tục, gọi

phương thức tĩnh

QueueUserWorkItem

của lớp

System.Threading.ThreadPool

, và

truyền thể hiện ủy nhiệm đã tạo làm đối số. Bộ thực thi sẽ xếp thể hiện ủy nhiệm
này vào hàng đợi và thực thi nó khi một tiểu trình trong thread-pool sẵn sàng.

Nếu ứng dụng sử dụng nhiều tiểu trình có thời gian sống ngắn hay duy trì một số lượng lớn
các tiểu trình đồng thời thì hiệu năng có thể giảm sút bởi các chi phí cho việc tạo, vận hành và
hủy các tiểu trình. Ngoài ra, trong một hệ thống hỗ-trợ-đa-tiểu-trình, các tiểu trình thường ở
trạng thái rỗi suốt một khoảng thời gian dài để chờ điều kiện thực thi phù hợp. Việc sử dụng
thread-pool sẽ cung cấp một giải pháp chung nhằm cải thiện tính quy mô và hiệu năng của các
hệ thống hỗ-trợ-đa-tiểu-trình.
.NET Framework cung cấp một hiện thực đơn giản cho thread-pool mà chúng ta có thể truy
xuất thông qua các thành viên tĩnh của lớp

ThreadPool

. Phương thức

QueueUserWorkItem

cho

phép bạn thực thi một phương thức bằng một tiểu trình trong thread-pool (đặt công việc vào
hàng đợi). Mỗi công việc được mô tả bởi một thể hiện của ủy nhiệm

WaitCallback

(tham

chiếu đến phương thức cần thực thi). Khi một tiểu trình trong thread-pool sẵn sàng, nó nhận
công việc kế tiếp từ hàng đợi và thực thi công việc này. Khi đã hoàn tất công việc, thay vì kết
thúc, tiểu trình này quay về thread-pool và nhận công việc kế tiếp từ hàng đợi.
Việc sử dụng thread-pool của bộ thực thi giúp đơn giản hóa việc lập trình hỗ-trợ-đa-tiểu-trình.
Tuy nhiên, cần lưu ý đây là thread-pool được hiện thực đơn giản, chỉ nhằm mục đích sử dụng
chung. Trước khi quyết định sử dụng thread-pool này, cần xem xét các điểm sau:

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.