Skip to content

Bảng tra độ phức tạp

Tham chiếu nhanh độ phức tạp thời gian và không gian cho các thao tác chính của mỗi pattern. Dùng nó để so sánh đánh đổi trước khi chọn pattern.

Cách đọc bảng

  • n = số phần tử / item
  • k = độ dài key (cho cấu trúc đánh key bằng chuỗi)
  • m = số hàm hash (Bloom filter)
  • L = số tầng (skip list, LSM tree)
  • Chi phí phân bổ trung bình ghi (phân bổ)

Cấu trúc dữ liệu

PatternThêmTraXoáBộ nhớGhi chú
BitmaskO(1)O(1)O(1)O(1)Kích thước cố định; giới hạn theo độ rộng word (32/64 flag)
Ring BufferO(1)O(1)O(1)O(n)Sức chứa cố định; ghi đè lên cái cũ nhất khi đầy
Tagged UnionO(1)O(variant lớn nhất)Dispatch theo tag; không cấp phát động
Min HeapO(log n)O(1) peekO(log n)O(n)Truy cập min O(1); dùng cho hàng đợi ưu tiên
TrieO(k)O(k)O(k)O(n × k)Không phụ thuộc tổng số entry; truy vấn prefix O(k + kết quả)
Bloom FilterO(m)O(m)O(n)Theo xác suất; có thể có dương tính giả, không có âm tính giả
LRU CacheO(1)O(1)O(1)O(n)Hash map + linked list hai chiều
Skip ListO(log n) trung bìnhO(log n) trung bìnhO(log n) trung bìnhO(n)Cân bằng theo xác suất; hỗ trợ truy vấn khoảng
B+ TreeO(log n)O(log n)O(log n)O(n)Tối ưu cho đĩa; fanout cao giảm thiểu I/O
Merkle TreeO(log n)O(log n)O(log n)O(n)Bằng chứng xác minh O(log n)
Merge IteratorO(log k) nextO(k)k = số luồng; gộp dựa trên heap

Concurrency

PatternThao tác chínhChi phíBộ nhớGhi chú
Semaphoreacquire / releaseO(1)O(1)Dùng bộ đếm; có thể chặn khi tranh chấp
Double BufferingswapO(1)O(2n)Đổi con trỏ; không copy
Event Loopenqueue / dequeueO(1)O(queue)Đơn luồng; ghép kênh I/O
Backpressuresignal / checkO(1)O(1)Kiểm soát luồng; thường ghép vào channel có sẵn
Copy-on-WriteđọcO(1)O(n) mỗi snapshotGhi kích hoạt clone O(n); đọc không bao giờ chặn
Cooperative SchedulingyieldO(1)O(số task)Cần điểm yield tự nguyện
MVCCđọc / ghiO(1) + GCO(n × phiên bản)Đọc không bao giờ chặn; chi phí GC phân bổ
Work Stealingpush / stealO(1) phân bổO(số task)Deque lock-free; theo dõi cache-line
Actor Modelgửi thông điệpO(1)O(số actor × mailbox)Trạng thái cô lập; không bộ nhớ chung
Logical Clocktick / mergeO(1) Lamport, O(n) VectorO(1) / O(n)Vector clock tăng theo số node

Hệ thống

PatternThao tác chínhChi phíBộ nhớGhi chú
State Machinechuyển trạng tháiO(1)O(số trạng thái)Dispatch thời gian hằng; trạng thái rõ ràng
Circuit Breakercall / checkO(1)O(1)Bộ đếm + timer; 3 trạng thái
Rate Limiterallow?O(1)O(1) mỗi limiterToken bucket hoặc cửa sổ trượt
Retry with BackoffretryO(số lần thử) tổngO(1)Delay theo cấp số nhân + jitter
Batch ProcessingflushO(batch)O(batch)Phân bổ chi phí trên mỗi item
Middleware ChainexecuteO(số middleware)O(số middleware)Pipeline tuyến tính; mỗi handler O(1)
Registryregister / lookupO(1) hashO(n)Service locator đánh key bằng chuỗi
Dirty Flagcheck / markO(1)O(1)Cờ boolean; bỏ qua nếu không đổi
Dependency Graphsắp xếp topoO(V + E)O(V + E)DAG; phát hiện chu trình
Consistent Hashingtra nodeO(log n)O(n × vnode)Tìm nhị phân trên vòng; xáo trộn tối thiểu
Write-Ahead LogappendO(1) phân bổO(log size)Ghi tuần tự; fsync để bền vững
CheckpointingsnapshotO(kích thước state)O(kích thước state)Định kỳ; cắt bớt WAL
LSM Treewrite / readO(1) write, O(L) readO(n)Tối ưu cho ghi; compaction ở background

Bộ nhớ

PatternCấp phátGiải phóngTraBộ nhớGhi chú
Object PoolO(1)O(1)O(kích thước pool)Cấp phát trước; tránh áp lực GC
FlyweightO(1)O(số instance duy nhất)Chia sẻ các instance giống nhau
Arena AllocatorO(1) bumpO(1) hàng loạtO(kích thước arena)Bump pointer; giải phóng tất cả một lần
Free ListO(1)O(1)O(n)Linked list của các slot đã giải phóng
Copy-on-WriteO(1) chia sẻO(n) khi ghiO(1)O(n) mỗi snapshotHoãn copy
Reference CountingO(1) cloneO(1) dropO(1) mỗi refXác định; không tự xử lý chu trình
TombstoneO(1) đánh dấuO(1)O(n + đã xoá)Xoá mềm; dồn nén sau
InterningO(k) lần đầu, O(1) các lần sauO(1)O(số duy nhất × k)Khử trùng lặp dựa trên hash; so sánh bằng con trỏ

Hành vi

PatternThao tác chínhChi phíBộ nhớGhi chú
ObservernotifyO(số subscriber)O(số subscriber)Fan-out; thứ tự có thể khác
IteratornextO(1) mỗi bướcO(1)Đánh giá lười; kiểu pull
Diff / PatchdiffO(n × m) MyersO(n + m)Khoảng cách chỉnh sửa tối thiểu
VtabledispatchO(1)O(số method)Gián tiếp qua con trỏ; phân giải tĩnh
VisitorvisitO(số node)O(độ sâu cây)Double dispatch; duyệt + thao tác

Tóm tắt đánh đổi chính

Nếu bạn cần...ChọnĐánh đổi
Tra O(1) + loại bỏ O(1)LRU CacheThêm bộ nhớ cho linked list hai chiều
Ghi O(1) ở quy mô lớnLSM TreeRead amplification (nhiều tầng)
Kiểm tra thành viên O(1)Bloom FilterDương tính giả (không âm tính giả)
Cấp phát O(1)Arena hoặc Free ListKhông giải phóng từng phần (arena) hoặc phân mảnh (free list)
Truy cập sắp xếp O(log n)Skip List hoặc B+ TreeSkip list đơn giản hơn, B+ tree tối ưu cho đĩa
Đọc không copyCopy-on-Write hoặc MVCCWrite amplification khi sửa đổi
Rehash tối thiểu khi mở rộngConsistent HashingVirtual node thêm chi phí bộ nhớ

Released under the MIT License.