+4

Lập Trình Bất Đồng Bộ Trong Java Và Javascript

Asynchronous Programming

Bạn đã từng nghe qua Lập Trình Bất Đồng Bộ - Bất Đồng Bộ ( Asynchronous Programming - Asynchronous ) chưa ?

Theo trang Techtargetcom,

In computer programming, asynchronous operation means that a process operates independently of other processes,
whereas synchronous operation means that the process runs only as a result of some other process being completed or handed off.


Tạm dịch

Trong lập trình máy tính, Bất Đồng Bộ là hoạt động của các quá trình chạy độc lập với các quá trình khác,
Ngược lại của nó, Đồng Bộ là hoạt động đó chỉ chạy do một số quá trình khác được hoàn thành hoặc chuyển giao.


Thật trừu tượng khó hiểu đúng không nào 😅 mình cũng vậy.

Trong bài viết này, chúng ta cùng nhau tìm hiểu về Lập Trình Bất Đồng Bộ thông qua Javascript và Java nhé

Ví dụ

Chúng ta cùng xem qua đoạn code sau đây để dễ hình dung 😙

Bạn đoán xem kết quả chương trình trên sẽ ra gì nào ?

image.png

Thực tế chương trình chạy ra kết quả như này

ủa rõ ràng mình ghi hàm huyGioiThieu() chạy trước.  
Nhưng mà nó chưa chạy xong mà hàm haiGioiThieu() đã chạy đến rồi 🤪  
quái quái thiệt :))

Bất Đồng Bộ

Trong lĩnh vực Dữ Liệu Data,
Bất Đồng Bộ có nghĩa là dữ liệu không được cập nhật ở các biến thể.

Ví dụ ứng dụng X nào đó. Khi mình nhắn tin cho bạn Thủy 'thủy à em ăn cơm chưa?' bằng điện thoại với ứng dụng X. Sáng hôm sau mình mở máy tính ra xem em Thủy đã rep lại hay chưa. Và Ohh thật kỳ lạ là trong máy tính của mình không hiện ra đoạn tin nhắn ‘thủy à em ăn cơm chưa?’ đó. Nhưng mở điện thoại ra thì có. Đây gọi là trường hợp Dữ Liệu Bất Đồng Bộ

Trong lập trình, Bất Đồng Bộ có nghĩa là

  • Chạy các hàm không theo thứ tự - không tuần tự - không tuyến tính
  • hoặc Chạy nhiều hàm song song độc lập - không đợi


Giải thích

👉️ Javascript dùng đơn luồng, nó thực thi từng statement(trong hàm).
Thứ tự thực thi các statement bị thay đổi theo một quy tắc gì đó (ở đây dùng setTimeout). Khi hàm này chưa thực hiện xong, nó lập tức nhảy sang hàm khác để thực hiện, tí nữa nó trở về hàm cũ thực hiện lại tiếp công việc.

Bạn hãy tưởng tượng như chuyện đi học, thầy cô giao bài tập HTML và CSS. Hạn nộp bài là ngày hôm sau, cách nộp là cứ làm được bài nào là nộp đó lên form online cho cô. Tối về, bạn làm Bài tập 1 – HTML. Làm xong bài bạn thấy chán HTML quá, bạn nhảy sang Bài tập 1-CSS. Làm xong, bạn lại thấy CSS chán quá, thôi làm HTML, làm Bài tập 2 HTML. Bạn nhảy qua nhảy lại như vậy cho đến khi hoàn thành tất cả bài tập ở cả 2

shutterstock_547410013.jpg

👉️ Java dùng đa luồng, Các statement cùng được thực hiện bởi các luồng, nên sinh ra bất đồng bộ

…. thầy cô giao bài tập HTML và CSS. Chiều chiều, bạn dẫn thằng bạn cùng phòng đi uống trà sữa. Bạn khều nó: “ê t rành HTML nhưng vụ CSS ta không rành, tối m làm dùm t mấy cái bài tập CSS ôtôkế? - Ôkế bờ rô” . Tối về hai thằng ăn cơm xong là cùng nhau tập thể dục ...ý nhầm, làm bài tập. Thằng thì làm tất cả bài tập HTML, thằng thì làm tất cả bài tập CSS

Capture.JPG


Tóm tắt cho cái ví dụ khùm đin của mình 😃) :
Có 2 bài tập: HTML và CSS, mỗi bài có các bài tập con

  • Trường hợp bạn A: làm bài tập CSS và HTML, làm được bài tập con nào là nộp bài tập con đó, làm qua lại giữa HTML và CSS liên tục
  • Trường hợp bạn B1 và bạn B2 : bạn B1 làm bài tập HTML, bạn B2 làm bài tập CSS, làm được bài tập con nào là nộp bài đó

Về phía thầy cô, họ không biết bạn A và bạn B đã làm gì để xong 2 bài tập. Chỉ biết khi nộp bài trên bảng báo cáo theo dõi, cả 2 bạn đều nộp bài tập HTML CSS với các bài thứ tự rời rạc. Tức là cứ làm được câu nào là nộp câu đó. Cho nên thầy cô hiểu “à 2 đứa này như nhau”. Về bản chất 2 đứa có cách làm khác nhau, đứa thì một mình mình làm, đứa thì chia ra 2 người làm. Bạn A là đại diện Javascript, bạn B đại diện cho Java🤪 Tại một thời điểm, bạn A chỉ làm được một việc, bạn B thì làm được nhiều việc cùng lúc (nó nhờ đồng đội)🤪


Túm váy lại:

  • Javascript không thể thực hiện nhiều tác vụ cùng lúc, nó chỉ di chuyển qua lại giữa các tác vụ, làm cho chúng ta tưởng như nó đang cùng lúc thực hiện nhiều tác vụ
  • Java có thể thực hiện được nhiều tác vụ cùng lúc
  • Kết quả của 2 ý trên là như nhau, là bất đồng bộ

Nếu có ai đó đố bạn Javascipt làm được nhiều tác vụ cùng lúc được không ? bạn cứ mạnh dạn "KHÔNG" nhé, vì nó đơn luồng


Đối với người dùng, họ không thấy cái gì chạy đằng sau. Họ không biết đa luồng hay không đa luồng. Họ chỉ thấy các tác vụ được chuyển tiếp qua lại cho nên họ hiểu 'à đang đa luồng nè, nhiều tác vụ cùng làm nè'.

Nếu bạn có tìm hiểu qua kiến trúc máy tính rồi, thì bạn có nhớ cách mà 1CPU 1 nhân 1 luồng vẫn cho thể vừa phát nhạc vừa chơi game được đúng không ^ đa luồng phake đó 😁


Học Làm Web Fullstack Java-Javascript miễn phí trên Youtube


Bài viết đến đây là hết rồi, nếu các bạn muốn đóng góp ý kiến cho bài viết thì hãy để lại ý bình luận để bài viết được tốt hơn nhé 😋


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.