CONCURRENCY LÀ GÌ

     
1.5. Mô hình lập trình đồng thời và lập trình tuy vậy song

Thời gian đầu, CPU chỉ có một nhân duy nhất, các ngôn ngữ lúc đó sẽ theo mô hình lập trình tuần tự, điển hình là ngôn ngữ C. Ngày nay, với sự phát triển của công nghệ đa xử lý, để tận dụng tối đa sức mạnh của CPU, mô hình lập trình song song hay multi-threading) thường thấy trên các ngôn ngữ lập trình ra đời. Ngôn ngữ Go cũng phát triển mô hình lập trình đồng thời rất hiệu quả với khái niệm Goroutines.

Bạn đang xem: Concurrency là gì

Lập trình tuần tựLập trình tuy nhiên song
*
*

Ở phần này chúng ta sẽ đi tìm hiểu về mô hình lập trình đồng thời vào Golang như thế nào. Trước hết chúng ta cùng nhắc lại một số kiến thức liên quan đến xử lý đồng thời và xử lý tuy vậy song (parallelism).

1.5.1 Xử lý đồng thời là gì ?

Xử lý đồng thời là khả năng phân chia và điều phối nhiều tác vụ khác nhau vào cùng một khoảng thời gian và tại một thời điểm chỉ có thể xử lý một tác vụ. Khái niệm này trái ngược với xử lý tuần tự (sequential processing). Xử lý tuần tự là khả năng xử lý chỉ một tác vụ trong một khoảng thời gian, các tác vụ sẽ được thực thi theo thứ tự hết tác vụ này sẽ thực thi tiếp tác vụ khác.

Xem thêm: Sony Xperia M4 Aqua Dual Đánh Giá, Sony Xperia M4 Aqua Dual 2 Sim, Giá Cực Rẻ

Concurrency is about dealing with lots of things at once-Rob Pike

Ví dụ như chúng ta vừa muốn nghe nhạc vừa đọc Advanced Go book và vào lúc đọc bạn muốn tải bộ tài liệu về từ vincitysdaimo.com. Nếu như theo mô hình xử lý tuần tự thì trìng duyệt website sẽ phải thực hiện việc nghe nhạc xong, rồi tới việc mở Advanced Go book online để đọc và sau khi đọc dứt chúng ta mới có thể tải về được. Đối với mô hình xử lý đồng thời thì ta có thể làm 3 tác vụ trên vào cùng một khoảng thời gian. Chúng ta có thể vừa nghe nhạc vừa lướt đọc tài liệu mà vừa có thể tải bộ tài liệu này về máy. Vậy làm thế nào để có thể xử lý đồng thời như vậy ?

Tất cả các chương trình đang chạy trong máy tính chúng ta chạy đều vị hệ điều hành quản lý, với mỗi chương trình đang chạy như vậy được gọi là một process (tiến trình) và được cấp một process id (PID) để hệ điều hành dễ dàng quản lí. Các tác vụ của tiến trình sẽ được CPU bộ vi xử lý core (nhân CPU) của máy tính xử lý. Vậy làm sao 1 máy tính có CPU 1 nhân có thể làm được việc xử lý đồng thời nhiều tác vụ của các tiến trình cùng lúc. Bởi vì bản chất tại một thời điểm nhân CPU chỉ có thể xử lý một tác vụ.

Xem thêm: Opencore Hackintosh Là Gì ? Đây Là Những Điều Bạn Cần Biết Hackintosh Là Gì

Như câu nói của Rob Pike, ông đã sử dụng từ dealing (phân chia xử lý) để nói đến khái niệm concurrency. Thật như vậy, nhân CPU không bao giờ đợi xử lý dứt một tác vụ rồi mới xử lý tiếp tác vụ khác, mà nhân CPU đã chia các tác vụ lớn thành các tác vụ nhỏ hơn và sắp xếp xen kẽ lẫn nhau. Nhân CPU xẽ tận dụng thời gian rảnh của tác vụ này để đi làm tác vụ khác, một lúc thì làm tác vụ nhỏ này, một lúc khác thì làm tác vụ nhỏ khác. Như vậy chúng ta sẽ cảm thấy máy tính xử lý nhiều việc cùng lúc tại cùng thời điểm. Nhưng bản chất bên dưới nhân CPU thì nó chỉ có thể thực thi một tác vụ nhỏ trong tác vụ lớn tại thời điểm đó.