---
# System prepended metadata

title: '000: Tìm hiểu về LMAX Disruptor để thay thế BlockingQueue trong Java'
tags: [LMAX Disruptor]

---

---
tags: LMAX Disruptor
---

# 000: Tìm hiểu về LMAX Disruptor để thay thế BlockingQueue trong Java

Các Java Engineer chắc hẳn không xa lạ gì với BlockingQueue, một dạng internal pub-sub trong chương trình. Đặc biệt với multi-thread programming, thread gửi/nhận message tới thread khác thông qua queue để xử lý các bài toán bất đồng bộ hoặc một số lượng cực lớn các task. Threadpool mà chúng ta hay dùng cũng implement BlockingQueue phía dưới nhằm điều phối các task đến các thread để được thực thi.

Tuy nhiên như chúng ta biết, bản chất của BlockingQueue là **block**, là **lock**, là **synchronize**. Điều đó khiến [**context switch**](https://hackmd.io/@datbv/rk3pA6XK_#2-Context-switch) xảy ra, tăng latency và trực tiếp làm giảm performance của hệ thống.

Các kỹ sư của LMAX đã tạo ra **Disruptor** để xử lý bài toán này. Không chỉ bài toán này mà rất nhiều bài toán khác liên quan đến internal pub-sub trong một ứng dụng. Chúng ta cùng đi tìm hiểu cụ thể hơn LMAX Disruptor là gì và vì sao nó có thể thay thế BlockingQueue trong Java qua series lần này với các chủ đề:
- 001: Hiểu về Queue và BlockingQueue trong Java
- 002: LMAX Disruptor là gì?
- 003: LMAX Disruptor và BlockingQueue
- 004: Sức mạnh của LMAX Disruptor nằm ở đâu?
- 005: LMAX Disruptor nên được áp dụng thế nào?

### Reference
- [LMAX Disruptor](https://lmax-exchange.github.io/disruptor)
- [The LMAX Architecture](https://martinfowler.com/articles/lmax.html)
- [Github LMAX Disruptor Wiki](https://github.com/LMAX-Exchange/disruptor/wiki)

© [Dat Bui](https://www.linkedin.com/in/datbv/)