Căn bản về mô hình luồng

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Nghiên cứu một số mô hình và giao thức thư viện điện tử (Trang 41 - 42)

Chƣơng 3 : CHƢƠNG TRÌNH THỬ NGHIỆM

3.2 Thiết kế chƣơng trình

3.2.2.2 Căn bản về mô hình luồng

Single Thread - Đơn luồng có nghĩa là chỉ có một luồng trong một tiến trình và

nó đang làm tất cả các công việc cho tiến trình này. Tiến trình phải chờ đợi thực thi hiện tại của luồng hoàn thành trƣớc khi nó có thể thực hiện một hành động khác.

Kết quả đơn luồng ở thời gian nhàn rỗi của hệ thống và sự thất vọng của ngƣời dùng. Ví dụ, giả sử chúng ta đang lƣu một tệp tin vào một mạng từ xa bằng cách sử dụng một ứng dụng đơn luồng. Vì chỉ có một luồng duy nhất trong ứng dụng, ứng dụng sẽ không thể làm bất cứ điều gì khác trong khi tệp tin đang đƣợc lƣu giữ vào vị trí từ xa. Vì vậy ngƣời dùng chờ đợi và bắt đầu tự hỏi, liệu ứng dụng bao giờ sẽ tiếp tục.

Apartment Threading (Single Threaded Apartment – căn hộ đơn luồng)

Apartment threaded - Căn hộ luồng có nghĩa là có nhiều luồng trong ứng dụng. Trong căn hộ luồng đơn (single thread apartment - STA) mỗi luồng bị cô lập trong một căn hộ riêng biệt bên dƣới tiến trình. Tiến trình qui định khi nào và trong bao lâu luồng trong mỗi căn hộ có thể thi hành. Mọi yêu cầu đƣợc xếp hàng thông qua hàng đợi thông điệp của Windows, nhƣ vậy chỉ có một căn hộ luồng duy nhất đƣợc truy cập tại một thời điểm và do đó chỉ có một luồng đơn sẽ đƣợc thực hiện tại một thời điểm. STA là mô hình luồng mà hầu hết các nhà phát triển Visual Basic quen thuộc vì đây là mô hình luồng có sẵn cho các ứng dụng VB trƣớc khi có VB.NET. Bạn có thể nghĩ nó nhƣ một hàng các căn hộ một phòng mà có thể truy cập tới một tại một thời điểm thông qua một hành

lang duy nhất. Ƣu điểm của nó so với đơn luồng là nhiều lệnh có thể đƣợc ban hành cùng một lúc thay vì chỉ một lệnh duy nhất, nhƣng các lệnh vẫn tuần tự thực hiện.

Free Threading (Multi Threaded Apartment – căn hộ đa luồng)

Các ứng dụng luồng tự do giới hạn trong các ngôn ngữ nhƣ C++ cho tới khi Microsoft.NET ra đời. Mô hình Luồng tự do/Multi Threaded Apartment (MTA) có duy nhất một căn hộ đơn đƣợc tạo gia bên dƣới tiến trình chứ không phải nhiều căn hộ. Một căn hộ đơn chứa đựng nhiều luồng hơn là chỉ một luồng. Không cần hàng đợi thông điệp bởi vì tất cả các luồng là một phân của cùng một căn hộ và có thể chia sẻ dữ liệu mà không cần proxy. Bạn có thể nghĩ nó nhƣ là một công trình với nhiều phòng mà đều có thể vào đƣợc một khi bạn đã ở bên trong. Các ứng dụng này thƣờng thực hiện nhanh hơn so với đơn luồng và STA vì có ít hệ thống hơn và có thể đƣợc tối ƣu hóa để loại bỏ thời gian nhàn rỗi của hệ thống.

Các loại ứng dụng này là phức tạp hơn khi lập trình. Ngƣời phát triển phải cung cấp sự đồng bộ hóa giữa các luồng nhƣ một phần của mã lệnh để chắc chắn các luồng không đồng thời truy cập tới cùng các nguồn tài nguyên. Một điều kiện đƣợc biết đến nhƣ trƣờng hợp tranh đua có thể xuất hiện khi luồng truy cập tới tài nguyên chia sẻ và thay đổi tài nguyên tới một trạng thái không hợp lệ và khi luồng khác truy cập tới tài nguyên và sử dụng nó trong điều kiện không hợp lệ trƣớc khi một luồng khác trả tài nguyên về trạng thái hợp lệ. Vì vậy việc cần thiết đặt một khóa vào tài nguyên để ngăn chặn các luồng khác truy cập cho tới khi khóa đƣợc bỏ đi. Tuy nhiên, điều này có thể dẫn đến tình huống bế tắc nơi hai luồng cạnh tranh về tài nguyên mà không cái nào xử lý đƣợc. Ví dụ, luồng #1 có một tài nguyên bị khóa và đang chờ tài nguyên khác đang khóa bởi luồng #2. Luồng #2 lại xuất hiện tình trạng đang chờ đợi tài nguyên bị khóa bởi luồng #1. Nhƣ vậy, cả hai luồng đều đang chờ đợi lẫn nhau và không luồng nào sẽ đƣợc cho phép xử lý. Chỉ có một con đƣờng để tránh tình trạng trên là thông qua thiết kế và kiểm thử tốt.

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Nghiên cứu một số mô hình và giao thức thư viện điện tử (Trang 41 - 42)

Tải bản đầy đủ (PDF)

(63 trang)