Critical Section Là Gì – Miền Găng Critical Section

Chào các cậu ! 😀 Bây giờ chỉ có thời gian để viết một bài mới. Vẫn với mục đích cũ là chia sẻ kiến ​​thức cũng như củng cố kiến ​​thức, hôm nay mình sẽ tiếp tục series “Tự viết bài”. Nếu bạn chưa đọc qua bài viết trước của tôi, bạn có thể xem lại tại đây – Quản lý bộ nhớ trong iOS.

Đang xem: Phần quan trọng là gì

Chủ đề hôm nay mình muốn nói đến cũng là một trong những vấn đề muôn thuở trong lập trình — “Concurrent Programming”, lập trình đồng thời (nghe hơi chuối…) hay còn được gọi với cái tên khác là “Concurrent Programming”. Lập trình đa luồng”.

Lập trình đồng thời là gì?

Từ xa xưa, quan niệm về Lập trình đồng thời đã được hình thành, đây là hành động nói về các nhiệm vụ đang được thực hiện cùng một lúc. Kể cả từ cái thời mà CPU của chúng ta chỉ có 1 nhân (CPU đơn nhân). Như chúng ta đã biết, một CPU có 1 nhân chỉ có thể thực thi một tác vụ duy nhất tại một thời điểm. Vậy làm thế nào để nó đồng thời ??? Thực ra việc lập trình đồng thời trên các thiết bị lõi đơn sẽ được thực hiện thông qua một cơ chế gọi là context switch (nếu mình nhớ không lầm thì khái niệm này ai cũng học trong Hệ điều hành ở Đại học) :v Chắc từ cái tên nó đã nói lên gần hết ý nghĩa. Có nghĩa là khi CPU chạy sẽ phân bổ thời gian thành các time-slice (nghe khá hay) và mỗi tác vụ được thực thi trong một time-slice đơn vị thời gian. đó (như cài đặt hẹn giờ). Khi hết thời gian, CPU sẽ chuyển sang thực thi tác vụ khác bằng cách chuyển ngữ cảnh, dữ liệu của tác vụ đang chạy sẽ được lưu trữ để gọi lại có thể tiếp tục chạy trong lần tiếp theo (tôi sẽ không đi quá chi tiết). nơi dữ liệu sẽ được lưu trữ, thanh ghi, PC, v.v., cũng như cách CPU hoạt động để gọi các tác vụ). Quá trình này diễn ra rất nhanh nên có cảm giác các tác vụ được thực hiện đồng thời. Đây cũng là cách để CPU chia sẻ tài nguyên phần cứng cho nhiều tác vụ khác nhau. Sau này, với sự phát triển của công nghệ, những chiếc CPU có nhiều nhân hơn đã ra đời. Điều này làm cho việc lập trình đồng thời trở nên dễ dàng hơn, cơ chế chuyển đổi ngữ cảnh vẫn được áp dụng, chỉ với CPU đa nhân, cùng lúc chúng ta có thể thực thi nhiều tác vụ khác cùng lúc. nhau (điều không thể làm được với lõi đơn).

Xem thêm bài viết hay:  Smile Dog Là Gì? Rùng Rợn Bức Ảnh Đáng Sợ Nhất Thế Giới

Về lý thuyết là có, nhưng lập trình đồng thời thực sự không đơn giản. Nói cách khác, thật khó 🙂

*
*

Câu chuyện có thật!!!

Quy trình so với Chủ đề

Trước hết mình sẽ đi vào phân tích các khái niệm cơ bản về lập trình đa luồng. Từ thời đại học, chắc hẳn ai cũng đã nghe đi nghe lại khái niệm process và thread. Vậy chúng là gì?

Process có thể hiểu đơn giản là một chương trình hay ứng dụng đang chạy, trong một process có thể có một hoặc nhiều luồng. Nếu tiến trình chỉ có một luồng thì luồng đó được gọi là luồng chính. Vì vậy, sự khác biệt giữa quá trình và chủ đề là gì:

Mỗi tiến trình có không gian bộ nhớ riêng (không gian địa chỉ, để lưu trữ mã, dữ liệu và tài nguyên), môi trường thực thi riêng biệt. Quá trình hoàn toàn được kiểm soát bởi hệ điều hành. Các chủ đề trong cùng một quy trình có thể chia sẻ không gian. xử lý bộ nhớ cho nhau (nói chuyện với nhau). Mỗi luồng có một ngăn xếp, bộ đếm chương trình (PC) và thanh ghi riêng biệt.

*
*

Mỗi luồng có ngăn xếp, PC và thanh ghi riêng.

Xem thêm: Cách Làm Đen Tóc Nhuộm, Cách Làm Đen Tóc Mới Nhuộm

Dựa vào các đặc điểm trên, dễ hiểu tại sao người ta lại chọn sử dụng đa luồng hơn đa xử lý. Sử dụng nhiều luồng sẽ tiết kiệm bộ nhớ cho HĐH thay vì nhiều tiến trình và quản lý các luồng, để các luồng giao tiếp với nhau cũng dễ dàng hơn nhiều so với các quy trình, tùy thuộc vào hệ điều hành, hạt nhân, v.v.

Xem thêm bài viết hay:  Sửa Lỗi Rivatuner Statistics Server Là Gì Và Cách Sử Dụng Nó

Các khái niệm/thuật ngữ quan trọng

Phần quan trọng: là một đoạn mã chỉ có thể được thực thi bởi một luồng nhất định tại một thời điểm. Nếu có nhiều luồng thực thi mã này, sẽ xảy ra lỗi. Ví dụ: nó có thể là mã truy cập các tài nguyên được chia sẻ như tệp, dữ liệu, biến toàn cục, v.v.

Điều kiện cuộc đua: là khi nhiều luồng truy cập một nguồn được chia sẻ mà không đảm bảo rằng một luồng hoàn thành việc thực thi trên dữ liệu trước khi luồng kia truy cập dữ liệu. Nghĩa là, các luồng đồng thời đọc và ghi trên cùng một dữ liệu. Có thể hiểu điều kiện đua là trường hợp sẽ xảy ra nếu phần quan trọng không được quản lý tốt. Ví dụ, có một biến số nguyên a = 10, đồng thời luồng 1 lấy a và tăng a lên 1 (a = 11), luồng 2 cũng lấy a và tăng a lên 2 (a = 12) => Dữ liệu không được đảm bảo là chính xác.

Bế tắc: là hiện tượng hai hay nhiều task phải chờ nhau hoàn thành. Ví dụ:

func doSomething () {doNothing ()} func doNothing () {doSomething ()} Trong ví dụ trên, nếu luồng 1 đang chạy hàm làm việc gì đó() và luồng 2 chạy chức năng không làm gì cả(), thì 2 luồng sẽ phụ thuộc vào nhau. Chủ đề 1 cần chủ đề 2 để chạy xong không làm gì cả() để kết thúc, trong khi luồng 2 cần luồng 1 để kết thúc làm việc gì đó().

chủ đề an toàn: một mã được gọi là mã an toàn luồng khi, trong môi trường đa luồng, nó được thực thi mà không có bất kỳ lỗi nào.

Xem thêm bài viết hay:  Bị Bóng Đè Trong Tiếng Anh Là Gì, Bóng Đè In English

Xem thêm: Tìm hiểu tiếng bíp nghĩa là gì? Beep nghĩa là gì trong Tiếng Việt?

nguyên tử: một nhiệm vụ hoặc một công việc cụ thể được cho là nguyên tử khi nó không thể bị gián đoạn. Có nghĩa là, nó được đảm bảo sẽ được hoàn thành, mà không trả lại trạng thái không hợp lệ (lỗi). Đây cũng là một ví dụ về an toàn chủ đề.

Thôi bài viết cũng đủ dài rồi :)) Phần sau mình sẽ nói về một số công nghệ dùng để lập trình đa luồng, cụ thể là cho iOS. Như trước, tôi xin cảm ơn các bạn đã dành thời gian đọc hết những dòng tôi viết. Hẹn gặp lại tất cả các bạn trong bài viết tiếp theo. Nếu bài viết có sai sót gì hãy để lại comment để mình biết và sửa nhé ❤

Bạn thấy bài viết Critical Section Là Gì – Miền Găng Critical Section có khắc phục đươc vấn đề bạn tìm hiểu ko?, nếu ko hãy comment góp ý thêm về Critical Section Là Gì – Miền Găng Critical Section bên dưới để duhoc-o-canada.com có thể thay đổi & cải thiện nội dung tốt hơn cho các bạn nhé! Cám ơn bạn đã ghé thăm Website: duhoc-o-canada.com của duhoc-o-canada.com

Nhớ để nguồn bài viết này: Critical Section Là Gì – Miền Găng Critical Section của website duhoc-o-canada.com

Chuyên mục: Là gì?

Viết một bình luận