25/05/2018, 10:12

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

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ế ...

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.

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).

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 ThreadingFree Threading .

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ụ:

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 !

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:

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:

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 ?

Một ví dụ

0