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

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

Bộ thực thi quy định số tiểu trình tối đa được cấp cho thread-pool; bạn không thể thay
đổi số tối đa này bằng các tham số cấu hình hay từ bên trong mã được-quản-lý. Giới
hạn mặc định là 25 tiểu trình cho mỗi CPU trong hệ thống. Số tiểu trình tối đa trong
thread-pool không giới hạn số các công việc đang chờ trong hàng đợi.

Cũng như việc cho phép bạn sử dụng thread-pool để thực thi mã lệnh một cách trực
tiếp, bộ thực thi còn sử dụng thread-pool cho nhiều mục đích bên trong, bao gồm việc
thực thi phương thức một cách bất đồng bộ (xem mục 4.2) và thực thi các sự kiện định
thời (xem mục 4.3). Tất cả các công việc này có thể dẫn đến sự tranh chấp giữa các tiểu
trình trong thread-pool; nghĩa là hàng đợi có thể trở nên rất dài. Mặc dù độ dài tối đa
của hàng đợi chỉ bị giới hạn bởi số lượng bộ nhớ còn lại cho tiến trình của bộ thực thi,
nhưng hàng đợi quá dài sẽ làm kéo dài quá trình thực thi của các công việc trong hàng
đợi.

Bạn không nên sử dụng thread-pool để thực thi các tiến trình chạy trong một thời gian
dài. Vì số tiểu trình trong thread-pool là có giới hạn, nên chỉ một số ít tiểu trình thuộc
các tiến trình loại này cũng sẽ ảnh hưởng đáng kể đến toàn bộ hiệu năng của thread-
pool. Đặc biệt, bạn nên tránh đặt các tiểu trình trong thread-pool vào trạng thái đợi
trong một thời gian quá dài.

Bạn không thể điều khiển lịch trình của các tiểu trình trong thread-pool, cũng như
không thể thay đổi độ ưu tiên của các công việc. Thread-pool xử lý các công việc theo
thứ tự như khi bạn thêm chúng vào hàng đợi.

Một khi công việc đã được đặt vào hàng đợi thì bạn không thể hủy hay dừng nó.

Ví dụ dưới đây trình bày cách sử dụng lớp

ThreadPool

để thực thi một phương thức có tên là

DisplayMessage

. Ví dụ này sẽ truyền

DisplayMessage

đến thread-pool hai lần, lần đầu không

có đối số, lần sau có đối số là đối tượng

MessageInfo

(cho phép kiểm soát thông tin mà tiểu

trình sẽ hiển thị).

using System;

using System.Threading;

// Lớp dùng để truyền dữ liệu cho phương thức DisplayMessage

// khi nó được thực thi bằng thread-pool.

public class MessageInfo {

private int iterations;

private string message;

// Phương thức khởi dựng nhận các thiết lập cấu hình cho tiểu trình.

public MessageInfo(int iterations, string message) {

this.iterations = iterations;

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.