Khóa thông dịch toàn cục (Global Interpreter Lock - GIL) là gì và tại sao nó lại là một vấn đề?

{{FormatNumbertoThousand(model.total_like)}} lượt thích
147 lượt xem
Python master

Vấn đề:

Rất nhiều ồn ào đã được tạo ra xung quanh việc xóa GIL khỏi Python và tại sao điều đó lại quan trọng như vậy.

Giải pháp:

Có một số cách triển khai Python, ví dụ: CPython, IronPython, RPython, v.v.

Trong CPython, Global Interpreter Lock, hoặc GIL, là một mutex ngăn nhiều native threads thực thi mã byte Python cùng một lúc. Khóa này là cần thiết chủ yếu vì quản lý bộ nhớ của Cpython không phải là thread-safe.

  • GIL gây tranh cãi vì nó ngăn cản các chương trình CPython đa luồng (multi-thread) tận dụng hết các hệ thống đa xử lý trong một số tình huống nhất định. Lưu ý rằng các hoạt động có khả năng bị chặn hoặc hoạt động kéo dài, chẳng hạn như I / O, xử lý hình ảnh và bẻ khóa số NumPy, xảy ra bên ngoài GIL. Do đó, chỉ khi ở trong các chương trình đa luồng dành nhiều thời gian bên trong GIL, diễn giải mã bytecode CPython, GIL trở thành một nút cổ chai.
  • GIL là một vấn đề nếu và chỉ khi, bạn đang làm công việc đòi hỏi nhiều CPU bằng pure Python. Tại đây, bạn có thể có được thiết kế rõ ràng hơn bằng cách sử dụng các quy trình và truyền tin nhắn (ví dụ: mpi4py).
{{login.error}}