Kiến trúc mẫu thiết kế phần mềm là một khái niệm quan trọng trong lĩnh vực phát triển phần mềm. Nó giúp các nhà phát triển xây dựng nên các ứng dụng hiệu quả và dễ bảo trì. Trong bài viết này, chúng ta sẽ tìm hiểu về một số mẫu thiết kế phần mềm phổ biến.
Table of Contents
Active Object
Mẫu Active Object tách biệt việc thực thi phương thức và việc gọi phương thức trong các luồng điều khiển riêng. Mục tiêu của mẫu này là tạo ra tính đồng thời bằng cách sử dụng gọi phương thức bất đồng bộ và một bộ lập lịch để xử lý các yêu cầu.
Balking
Mẫu Balking chỉ thực thi một hành động trên đối tượng khi đối tượng đang ở trạng thái cụ thể.
Binding properties
Mẫu Binding properties kết hợp nhiều bộ quan sát để đồng bộ hoặc điều phối các thuộc tính trong các đối tượng khác nhau.
Compute kernel
Mẫu Compute kernel thực hiện một phép tính nhất định nhiều lần song song, khác nhau bởi các tham số nguyên được sử dụng với tính toán chỉ số con trỏ không rẽ nhánh vào các mảng chia sẻ, như phép nhân ma trận được tối ưu hóa trên GPU hoặc mạng nơ-ron tích chập.
Double-checked locking
Mẫu Double-checked locking giảm thiểu tải của việc có được khóa bằng cách kiểm tra điều kiện khóa (gợi ý khóa) một cách không an toàn trước khi tiến hành khóa thực tế. Điều này có thể không an toàn khi triển khai trên một số ngôn ngữ/phần cứng, do đó đôi khi có thể coi là một mô hình nghịch lý.
Event-based asynchronous
Mẫu Event-based asynchronous giải quyết các vấn đề với mẫu bất đồng bộ xảy ra trong các chương trình đa luồng.
Guarded suspension
Mẫu Guarded suspension quản lý các thao tác yêu cầu cả khóa và điều kiện tiên quyết trước khi thực hiện thao tác đó.
Join
Mẫu Join-pattern cung cấp một cách để viết các chương trình đồng thời, song song và phân tán bằng cách truyền thông qua tin nhắn. So với việc sử dụng các luồng và khóa, đây là mô hình lập trình cấp cao hơn.
Lock
Mẫu Lock cho phép một luồng khóa tài nguyên, ngăn chặn các luồng khác truy cập hoặc sửa đổi nó.
Messaging design pattern (MDP)
Mẫu Messaging Design Pattern (MDP) cho phép trao đổi thông tin (tin nhắn) giữa các thành phần và ứng dụng.
Monitor object
Mẫu Monitor object là một đối tượng có các phương thức bị loại trừ nhau, từ đó chống lại việc nhiều đối tượng cố gắng sử dụng nó cùng một lúc.
Reactor
Mẫu Reactor cung cấp một giao diện bất đồng bộ cho các nguồn tài nguyên phải được xử lý theo cách đồng thời.
Read-write lock
Mẫu Read-write lock cho phép truy cập đọc đồng thời vào một đối tượng, nhưng yêu cầu truy cập độc quyền cho các hoạt động ghi. Để thực hiện việc ghi, có thể sử dụng một nguồn tín hiệu dùng để ghi và có thể sử dụng cơ chế Copy-on-write hoặc không sử dụng cơ chế đó.
Scheduler
Mẫu Scheduler kiểm soát rõ ràng khi các luồng có thể thực thi mã đơn luồng.
Thread pool
Mẫu Thread pool tạo ra một số luồng để thực hiện một số nhiệm vụ, usually được tổ chức dưới dạng một hàng đợi. Thông thường, có nhiều nhiệm vụ hơn là luồng. Có thể coi là một trường hợp đặc biệt của mẫu object pool.
Thread-specific storage
Mẫu Thread-specific storage là bộ nhớ tĩnh hay “toàn cục” cục bộ cho một luồng.
Safe Concurrency with Exclusive Ownership
Mẫu Safe Concurrency with Exclusive Ownership giúp tránh việc sử dụng cơ chế đồng thời thời gian chạy, vì sở hữu độc quyền có thể được chứng minh. Điều này là một khả năng đáng chú ý của ngôn ngữ Rust, nhưng việc kiểm tra thời gian biên dịch không phải là phương pháp duy nhất, một lập trình viên thường sẽ thiết kế thủ công những mẫu này vào mã – bỏ qua việc sử dụng cơ chế khóa vì lập trình viên đánh giá rằng một biến cụ thể không bao giờ được truy cập cùng lúc bởi nhiều tiến trình.
CPU atomic operation
Kiến trúc CPU x86 và nhiều kiến trúc CPU khác hỗ trợ một loạt lệnh nguyên tử đảm bảo an toàn bộ nhớ để sửa đổi và truy cập các giá trị nguyên thủy (số nguyên). Ví dụ, hai luồng có thể tăng cường một bộ đếm an toàn. Những khả năng này cũng có thể được sử dụng để triển khai các cơ chế cho các mẫu đồng thời khác như đã đề cập ở trên. Ngôn ngữ C# sử dụng lớp Interlocked để thực hiện những khả năng này.
Để biết thêm thông tin về các mẫu thiết kế phần mềm khác, hãy truy cập Wiki Fin.