Đồng bộ và bất đồng bộ trong Javascript

Spread the love

Hôm nay, mình sẽ nói chuyện về chủ đề khá là khó trong Javascript. Cụ thể, là vấn đề đồng bộ và bất đồng bộ trong Javascript.

Đồng bộ và bất đồng bộ trong Javascript là gì?

Cụm từ này sẽ xuất hiện trong tất cả ngôn ngữ lập trình, không chỉ trong javascript. Bạn hoàn toàn, có thể bắt gặp cụm từ này trong ngôn ngữ khác như C#, Python, Golang.

Đồng bộ (Synchronous)

Để minh họa cho việc đồng bộ trong lập trình, mình lấy ví dụ như này. Có một quán coffee tên là Cherry. Với 3 bàn làm việc và chỉ 1 ông phục vụ tên là Tít. Hàng ngày, ông ý phải tiếp đón rất nhiều khách vào quán. Và mỗi khi quán có 1, 2, hoặc 3 bàn có khách. Thì ông phục vụ Tít này bắt đầu phục vụ. Cách làm việc của ông ý rất đơn giản như này: Đầu tiên là Tít chào khách, sau là Tít đưa menu cho khách, khách chọn chọn rồi Tít ghi ghi rồi cầm vào cho bếp trưởng kêu: Ê! Làm cho khách đi nhanh không sếp cắt lương giờ.

Đợi được một lúc thì đĩa đồ ăn ra, và Tít bế đồ ăn lên cho khách đồng thời không quên cho kèo lời tí nhớ boa cho Tít nhé. Ok!!! Vậy là xong ông khách đầu tiên, tiếp đến Tít phi sang ông khách thứ 2 cũng bài menu, lấy đơn rồi đưa bếp trưởng và đưa đồ cho khách. Y hệt ông khách thứ nhất không khác gì cả, vẫn nhớ thêm câu tí nhớ boa cho Tít. Tiếp tục, cũng là ông khách cuối cùng ở bàn thứ 3, Tít cũng làm y hệt như vậy.

Thực sự, Tít rất chuyên nghiệp làm đâu ra đó. Từ A đến B đến C đến D rồi Z, không thiếu một bước nào cả. Người ta gọi đây là xử lý đồng bộ. Tức là mọi việc đều được xử lý theo thứ tự từng bước, chỉ khi nào xong bước thứ nhất thì mới đến bước thứ 2.

Trong trường hợp này, Tít chỉ có thể phục vụ từng ông khách một lúc. Do đó, là ông khách thứ 2 đợi ông khách thứ nhất phục vụ xong mới đến lượt. Mà ông thứ 3 thì phải đợi ông thứ 2 và ông thứ nhất phục vụ xong mới đến lượt. Nói chung, là làm kiểu này thì Cherry chắc sẽ phá sản sớm. Vì khách đợi lâu quá mà đi quán khác mất.

Ưu điểm

  • Lịch trình của nhân viên trong quán rất chi là cố định, đảm bảo mọi thứ trơn tru. Nhỡ Tít léng phéng ở bước nào mà quản lý nó biết là nó tóm và xử lý gọn gàng, ngăn lắp nó luôn.
  • Dễ quản lý, đang ở bước lên đơn mà bị đau bụng đi WC thì thằng khác vào thay biết là dừng ở bước 1 và đi tiếp bước đưa đơn, đưa đồ cho khách.

Khuyết điểm

  • Do công việc chạy theo trình tự nên sẽ sinh ra trạng thái chờ. Nếu chờ quá lâu thì lãng phí thời gian của khách và điều tất yếu đến là khách sẽ nghỉ chơi với quán hết.
  • Khi nói về mặt quản lý, thì chủ quán chưa “bóc lột” được hết sức mạnh của nhân viên. Trong khi nhân viên hổ báo lắm 3 đầu sáu tay, vừa làm vừa chơi game, vừa quay tiktok được nhưng lại bảo nhân viên chỉ được làm 1 việc một thôi, tuần tự đúng quy trình. Cái gì xong trước xử lý trước.

Bất đồng bộ (Asynchronous)

Cũng với bài toán như trên quán cafe Cherry và 3 bàn khách thì trong trường hợp bất độ này. Anh nhân viên đã thể hiện được sự 3 đầu sáu tay của mình bằng cách bằng cách là khi có khách vào thì anh sẽ lấy đơn của các bàn rồi sau đó đưa cho bếp trưởng. Sau đó, bếp trưởng đưa đĩa nào lại cho anh thì anh sẽ lấy đĩa đồ ăn đó và đưa cho khách. Tiếp đó, nhận tiền boa rồi lại quay lại chỗ bếp trưởng đợi đồ ăn và đưa cho khách rồi nhận tiền boa. Cứ thế, cứ thế cho các khách hàng đến quán. Hoặc cũng có khi anh ý sẽ nhận tiền boa trước rồi mới làm việc. Anh Tít bồi bàn cực kì lươn lẹo.

Ưu điểm

  • Xử lý nhiều công việc cùng lúc và không phải chờ đợi theo thứ tự nào cả.
  • Tối ưu thời gian chạy và xử lý chương trình.
  • Tối ưu sức mạnh của tài nguyên.

Nhược điểm

  • Do làm việc với đam mê lớn quá nên rất khó kiểm soát được kết quả công việc.
  • Nếu có lỗi xảy ra giữa chừng thì rất khó kiểm soát.

Như vậy, qua ví dụ về anh bồi bàn Tít, chúng ta có thể nắm được phần nào về việc đồng bộ và bất đồng bộ trong javascript là gì. Ở phần tiếp theo, mình sẽ tiếp tục giải thích về chúng hoạt động như thế nào trong Javascript.

Đồng bộ trong Javascript

JavaScript mặc định là ngôn ngữ lập trình đồng bộ, blocking và single-thread (đơn luồng), có nghĩa là một thao tác sẽ được tiến hành tại một thời điểm, trên một luồng chính duy nhất và mọi thứ khác bị chặn cho đến khi thao tác đó hoàn thành.

Ngoài ra, bạn cũng có thể tham khảo thêm một số bài viết khác của mình như:

Leave a Comment