Trong bài viết này, chúng ta sẽ tìm hiểu về Khóa thông dịch viên toàn cầu Python (GIL) là gì.
Đây là một khóa hoặc trở ngại ngăn cản sự sẵn có của trình thông dịch Python cho nhiều luồng đồng thời. GIL được xác định là một lỗi / sự cố trong Python 3.x. Hoặc sớm hơn vì nó không cho phép đa luồng trong kiến trúc đa luồng.
Tại sao nó được giới thiệu?
Python hỗ trợ khái niệm thu gom rác tự động. Ngay sau khi số lượng tham chiếu của một đối tượng đạt đến 0, bộ nhớ sẽ được dọn sạch và miễn phí để sử dụng.
>>> import sys >>> var = {} >>> print(sys.getrefcount(ar)) >>> 2 >>> v=var >>> print(sys.getrefcount(v)) >>> 3
Trong trường hợp này, nếu số lượng tham chiếu bắt đầu giảm và tăng đồng thời, bộ thu tự động sẽ không thể hoạt động bình thường và do đó nguy cơ rò rỉ bộ nhớ tăng lên.
Để giảm nguy cơ này, GIL đã được đưa vào python. Bằng cách thêm khóa toàn cục được coi là tốt hơn so với việc thêm khóa vào từng biến sẽ dẫn đến một loạt khóa dẫn đến khóa chết.
Tại sao GIL vẫn tồn tại trong Python
GIL cần được cải thiện để chúng tôi có thể xử lý nó theo cách tốt hơn. Vì vậy, thay vì loại bỏ GIL, chúng tôi đang làm việc để cải thiện khái niệm GIL. vì python hoàn toàn được liên kết với cơ sở của c và cpython nên chúng tôi không thể trực tiếp xóa Gil. Mặc dù có nhiều phương pháp khác nhau để xử lý các vấn đề mà GIL giải quyết được khó thực hiện và làm giảm thời gian xử lý và chạy của hệ thống.
Ví dụ:
Giả sử quá trình P1 đang diễn ra có luồng t1 và t2. Các chủ đề Python là bản chất, được lập lịch bởi hệ điều hành bên dưới.
t1 đang chạy (giai đoạn chạy) (nhận GIL) → t1 chờ I / O (vào / ra) (giải phóng GIL) → t2 đang chạy (giai đoạn chạy) (có được GIL, tại thời điểm này t1 cũng đã sẵn sàng để chạy nhưng GIL đã được nhận bởi t2)
Do đó, ở đây GIL trở thành hạn chế lớn. VẬY, nếu chúng ta muốn viết một ứng dụng / mô-đun python đa luồng thực hiện các hoạt động ràng buộc CPU nặng nề, thì sẽ không thể nhận được kết quả mong muốn.
Bởi vì, trong Python, đa luồng thực là không thể, vì hiệu quả quá trình sẽ chỉ sử dụng một CPU tại một thời điểm ngay cả khi có sẵn CPU đa lõi.
Tuy nhiên, trong hầu hết các ứng dụng Python (ứng dụng web, máy chủ dựa trên Django, v.v.), điều này không còn là vấn đề vì các ứng dụng này tự nhiên là I / O bị ràng buộc.
Là một lập trình viên Python, chúng tôi không bao giờ phải đối phó với việc mua và phát hành GIL cho đến khi chúng tôi viết các mô-đun / tập lệnh C / C ++ có thể thực thi trong python
Kết luận
Trong bài viết này, chúng ta đã tìm hiểu về khóa thông dịch Python Global, tầm quan trọng của nó và tại sao không thể xóa trực tiếp khỏi python.