Python vẫn có GIL chứ?

: the dream of Python without the GIL. Continuing this venerable tradition, Sam Gross kicked off the 2022 Language Summit by giving the attendees an update on nogil , một dự án đã gây bão cộng đồng Python khi nó được công bố lần đầu tiên vào tháng 10 năm 2021

GIL, hay “Khóa phiên dịch toàn cầu”, là tính năng chính của Python ngăn chặn sự tương tranh thực sự giữa các luồng. Đây là một cách khác để nói rằng nó gây khó khăn cho việc thực hiện đồng thời nhiều tác vụ trong khi chỉ chạy một quy trình Python duy nhất. Trước đây, người cổ vũ chính cho việc loại bỏ GIL là Larry Hastings, với dự án “Gilectomy” nổi tiếng của ông. Dự án Gilectomy cuối cùng đã bị bỏ rơi do thực tế là nó làm cho mã Python đơn luồng chậm hơn đáng kể. Nhưng sau khi xem fork bằng chứng khái niệm của Gross vào tháng 10, Hastings đã viết trong một email tới danh sách gửi thư của python-dev


Sam đã liên lạc riêng với tôi cách đây một thời gian để hỏi ý kiến ​​của tôi một chút. Nhưng thành thật mà nói, Sam không cần bất kỳ sự giúp đỡ nào anh ấy đã đưa dự án đi xa hơn tôi từng thực hiện Phẫu thuật cắt bỏ dây cung.


Trạng thái hiện tại của nogil

Kể từ khi phát hành fork bằng chứng khái niệm vào tháng 10 – dựa trên phiên bản alpha của Python 3. 9 – Gross nói rằng anh ấy đang làm việc để đảo ngược các thay đổi nogil thành 3. 9. 10.

3. 9 đã được chọn làm mục tiêu cho đến bây giờ, vì việc đạt được mức độ áp dụng sớm là rất quan trọng để đánh giá liệu toàn bộ dự án có khả thi hay không. Những người dùng đầu tiên sẽ không thể sử dụng dự án một cách hiệu quả nếu các gói của bên thứ ba không hoạt động khi sử dụng nogil . Vẫn còn nhiều hỗ trợ rộng rãi hơn cho Python 3. 9 trong số các gói của bên thứ ba so với Python 3. 10, và Python 3. Hiện tại 9 vẫn có ý nghĩa hơn với tư cách là một nhánh cơ sở thay vì 3. 10 hoặc ______4_______ .

Cập nhật khác của Gross là anh ấy đã thực hiện một thay đổi trong cách tiếp cận của mình liên quan đến sự an toàn của luồng. Để làm cho Python hoạt động hiệu quả mà không cần GIL, rất nhiều mã cần phải thêm các khóa mới để đảm bảo rằng nó vẫn an toàn cho luồng. Tuy nhiên, việc thêm các khóa mới vào mã hiện có có thể rất khó khăn vì có khả năng xảy ra sự chậm trễ lớn ở một số khu vực. Giải pháp của Gross là phát minh ra một loại khóa mới, một loại khóa “hơn Gilly”


Đề xuất

Gross đến Hội nghị thượng đỉnh với một đề xuất. để giới thiệu một cờ trình biên dịch mới trong Python 3. 12 sẽ vô hiệu hóa GIL

Đây là một thay đổi nhỏ đối với đề xuất ban đầu của Gross từ tháng 10, khi anh ấy đưa ra ý tưởng về cờ thời gian chạy. Tuy nhiên, cờ trình biên dịch làm giảm rủi ro vốn có trong đề xuất. “Bạn có nhiều cách để rút lui. ” Ngoài ra, việc sử dụng cờ trình biên dịch sẽ tránh được các vấn đề nhức nhối liên quan đến việc duy trì  tính ổn định. “Bạn không thể làm điều đó với cờ thời gian chạy,” Gross giải thích, “Nhưng đã có tiền lệ thay đổi ABI đằng sau cờ trình biên dịch”.


Thu nhận

Đề xuất của Gross đã được chào đón với sự phấn khích lẫn lộn và câu hỏi mạnh mẽ từ các nhà phát triển cốt lõi đã tập hợp

Carol Willing đã hỏi liệu việc nogil tiếp tục như một nhánh riêng của CPython có hợp lý hơn thay vì mục tiêu của Gross hay không . Tuy nhiên, Gross trả lời rằng đây “không phải là con đường dẫn đến thành công”. main branch of CPython itself. Gross, however, responded that this “was not a path to success”.

"Rất nhiều giá trị của Python là hệ sinh thái, không chỉ là ngôn ngữ.. CPython thực sự dẫn đầu về cộng đồng di chuyển như một khối

"Xóa GIL là một thực sự bước chuyển đổi. Hầu hết các chương trình Python hiện không sử dụng luồng nếu chúng muốn chạy trên nhiều lõi. Nếu ______0_______ thành công, toàn bộ cộng đồng phải mua nó. "

– Sam Gross

Samuel Colvin, người duy trì thư viện pydantic , bày tỏ sự thất vọng rằng đề xuất mới dành cho cờ trình biên dịch, thay vì cờ thời gian chạy. Colvin nhận xét: “Tôi không thể không nghĩ rằng mức độ chấp nhận sẽ cao hơn rất nhiều” nếu có thể thay đổi cài đặt từ bên trong Python.

Có một số bất đồng về con đường phía trước từ đây nên như thế nào. Có vẻ như Gross đang tìm kiếm một quyết định cấp cao về việc liệu nogil có phải là một hướng đi khả thi hay không. Tuy nhiên, các nhà phát triển cốt lõi tham dự đã miễn cưỡng đưa ra câu trả lời mà không biết chi phí cấp thấp. Pablo Galindo Salgado nhận xét: “Chúng ta cần vạch ra một kế hoạch cách thức để tiến hành.”. “Chỉ tạo một PR với 20.000 dòng mã thay đổi là không khả thi. ”

Barry Warsaw và Itamar Ostricher đều hỏi Gross về tác động nogil có thể có đối với thư viện bên thứ ba nếu họ muốn hỗ trợ thư viện mới . Gross trả lời rằng tác động đối với nhiều thư viện sẽ là tối thiểu – hoàn toàn không ảnh hưởng đến thư viện như . Gross trả lời rằng tác động đối với nhiều thư viện sẽ là tối thiểu – hoàn toàn không ảnh hưởng đến thư viện như . Gross trả lời rằng tác động đối với nhiều thư viện sẽ là tối thiểu – hoàn toàn không ảnh hưởng đến thư viện như . Gross trả lời rằng tác động đối với nhiều thư viện sẽ là tối thiểu – hoàn toàn không ảnh hưởng đến thư viện như . Gross trả lời rằng tác động đối với nhiều thư viện sẽ là tối thiểu – hoàn toàn không ảnh hưởng đến thư viện như . Gross trả lời rằng tác động đối với nhiều thư viện sẽ là tối thiểu – hoàn toàn không ảnh hưởng đến thư viện như . Gross trả lời rằng tác động đối với nhiều thư viện sẽ là tối thiểu – hoàn toàn không ảnh hưởng đến thư viện như . Gross trả lời rằng tác động đối với nhiều thư viện sẽ là tối thiểu – hoàn toàn không ảnh hưởng đến thư viện như  mode. Gross responded that the impact on many libraries would be minimal – no impact at all to a library like nogil1 và có lẽ chỉ có 15 dòng mã cho nogil2. Gross had received considerable interest from scientific libraries, he said, so was confident that the pressure to build separate C extensions to support nogil sẽ không quá nặng nề. Carol Willing khuyến khích Gross tham dự các hội nghị khoa học-máy tính để thu thập thêm phản hồi từ cộng đồng đó.

Những người tham dự cũng lo ngại rất nhiều về tác động của việc giới thiệu nogil đối với sự phát triển của CPython. Một số lo lắng rằng việc giới thiệu chế độ ______0_______ có thể đồng nghĩa với việc số lượng thử nghiệm chạy trong CI sẽ phải tăng gấp đôi. Những người khác lo lắng rằng gánh nặng bảo trì sẽ tăng lên đáng kể nếu hai phiên bản CPython riêng biệt được hỗ trợ đồng thời. một với GIL, và một không có.

Nhìn chung, những người tham dự vẫn còn rất hào hứng và tò mò về chế độ ____0_______ . Tuy nhiên, các câu hỏi quan trọng vẫn chưa được giải quyết liên quan đến các bước tiếp theo của dự án.

Chủ Đề