Danh mục

Tiểu trình, tiến trình , và sự đồng bộ phần 1

Số trang: 7      Loại file: pdf      Dung lượng: 183.04 KB      Lượt xem: 12      Lượt tải: 0    
10.10.2023

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Tiểu trình, tiến trình , và sự đồng bộ Mộ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).
Nội dung trích xuất từ tài liệu:
Tiểu trình, tiến trình , và sự đồng bộ phần 1Chương 4 : Tiểu trình, tiến trình , và sự đồng bộMột trong những điểm mạnh của hệ điều hành Microsoft Windows là cho phép nhiềuchươ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ệnnhiề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áchkiể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ựchiện các vấn đề sau: 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 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ượnglớ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ậnhà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ểutrì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 quymô 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ứcQueueUserWorkItem cho phép bạn thực thi một phương thức bằng một tiểu trình trongthread-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ìnhtrong 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ệcnà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ểmsau: • 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átthô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; this.message = message; } // Các thuộc tính dùng để lấy các thiết lập cấu hình. public int Iterations { get { return iterations; } } public string Message { get { return message; } }}public class ThreadPoolExample { // Hiển thị thông tin ra cửa sổ Console. public static void DisplayMessage(object state) { // Ép đối số state sang MessageInfo. MessageInfo config = state as MessageInfo; // Nếu đối số config là null, không có đối số nào được // tru ...

Tài liệu được xem nhiều: