Thông tin tài liệu:
Hầu hết các ngôn ngữ lập trình chỉ cho phép chạy một câu lệnh một lúc Việc chạy câu lệnh truyền thống cũng đồng thời được thực hiện dùng hệ điều hành gốc .NET Framework Class Library hỗ trợ cơ chế đa tiến trình Đa tiến trình (Multithreading) : chạy đồng thời các tiến trình Tiến trình (thread ): một phần của chương trình có thể chạy được
Nội dung trích xuất từ tài liệu:
Chương 12: Đa tiến trình - MultithreadingChương 12 – Đa tiến trình - Multithreading Outline 12.1 Giới thiệu 12.2 Các trạng thái của một tiến trình 12.3 Các mức ưu tiên của tiến trình 12.4 Đồng bộ tiến trình và lớp điều khiển 12.5 Tạo/ dùng tiến trình không đồng bộ hoá 12.6 Tạo/dùng tiến trình có đồng bộ hoá 12.7 Các thao tác với các tiến trình. Ví dụ12.1 Giới thiệu Hầu hết các ngôn ngữ lập trình chỉ cho phép chạy một câu lệnh một lúc Việc chạy câu lệnh truyền thống cũng đồng thời được thực hiện dùng hệ điều hành gốc .NET Framework Class Library hỗ trợ cơ chế đa tiến trình Đa tiến trình (Multithreading) : chạy đồng thời các tiến trình Tiến trình (thread ): một phần của chương trình có thể chạy được12.2 Các trạng thái của một tiến trình Một tiến trình có thể có nhiều trạng thái khác nhau trong chu kỳ sống của nó (từ lúc được tạo ra cho đến khi kết thúc và bị phá huỷ ) . Unstarted (chưa bắt đầu) Khi một tiến trình bắt đầu chu kỳ sống Tồn tại cho tới khi phương thức Start được gọi Started (bắt đầu): Tồn tại ở trạng thái này cho tới khi bộ xử lý bắt đầu chạy nó12.2 Các trạng thái của một tiến trình Running (đang chạy ): Tiến trình nào có mức ưu tiên cao nhất thì được chạy trước Bắt đầu chạy khi bộ xử lý được cấp phát cho tiến trình ThreadStart là uỷ quyền đặc biệt cho các hoạt động của tiến trình Stopped (ngừng): Khi kết thúc uỷ quyền Nếu chương trình gọi phương thức Abortcủa Thread Blocked : Blocked khi có yêu cầu vào/ra Kết thúc blocked khi hệ điều hành đã hoàn thành quá trình vào/ra12.2 Các trạng thái của một tiến trình WaitSleepJoin: Có 3 cách rơi vào trạng thái này: Tiến trình gọi phương thức Wait của Monitor vì nó bắt gặp code mà nó chưa thể thực hiện Kết thúc trạng thái khi một tiến trình khác gọi Pulse Gọi phương thức Sleep để tạm dừng trong một khoảng thời gian nhất định Hai tiến trình được hợp nhất nếu một không thể thực hiện cho tới khi tiến trình kia kết thúc Các tiến trình chờ hay tạm dừng có thể thoát khỏi các trạng thái này nếu gọi phương thức Interrupt Suspended (treo): Trạng thái này xảy ra khi gọi phương thức Suspend Trở về trạng thái Started khi gọi phương thức Resume12.2 Các trạng thái của một tiến trình Unstarted Start Started Interrupt quantum dispatch Pulse (assign a expiration I/O PulseAll processor) completion sleep interval expires Running issue I/O Suspend request Wait Sleep, Join complete WaitSleepJoin Suspended Stopped Blocked Resume Vòngđờicủamộttiếntrình12.3 Các mức ưu tiên của tiến trình Tất cả các tiến trình đều có mức độ ưu tiên riêng : Các mức: Lowest, BelowNormal, Normal, AboveNormal, và Highest Tất cả các tiến trình có mức ưu tiên mặc định là Normal (bình thường) Dùng thuộc tính Priority để điều chỉnh mức độ ưu tiên của các tiến trình Timeslicing(thời gian cắt ) : Mỗi tiến trình đều có một khoảng thời gian ngắn được chạy trước khi bộ xử lý được chuyển cho tiến trình khác Không có nó,các tiến trình sẽ được chạy xong hết trước khi một tiến trình khác bắt đầu12.3 Các mức ưu tiên của tiến trình Thread Scheduler (lập lịch trình cho các tiến trình) : Giữ cho các tiến trình có mức độ ưu tiên cao nhất luôn được chạy Nếu nhiều tiến trình có cùng mức ưu tiên : chạy lần lượt theo vòng tròn Đôi khi dẫn đến sự thiếu trầm trọng: Những tiến trình có độ ưu tiên thấp bị trì hoãn việc chạy12.3 Các mức ưu tiên của tiến trình Tiến trình đã sẵn sàng Priority Highest A B Priority AboveNormal C Priority Normal Priority BelowNormal D E F Priority Lowest G Lịchtrìnhtheomứcđộưutiêncủacáctiếntrình 12.4 Đồng bộ tiến trình và lớp điều khiển Các kết quả sai có thể xảy ra nếu hai tiến trình cố gắng cùng cập nh ...