Python GIL là gì, tại sao Python lại tồn tại GIL

Dành cho bạn nào muốn tìm hiểu Python GIL là gì:
http://doanguyen.github.io/python-gil

OOP và GIL không liên quan tới nhau nhé.
GIL là do cách implement ngôn ngữ của Python và một số ngôn ngữ thôi.

3 Likes

Hi bạn,

GIL là một trong những implementation để tránh việc xuất hiện deadlock, mà deadlock là đặc thù của OOP nên không thể nói nó không liên quan được.

Edit #1: deadlock là đặc thù của multi-thread(process) programming.

Deadlock là đặc thù của lập trình song song (concurrent hoặc parallel). Process, file handle, device chờ nhau cũng có thể gọi là deadlock. OOP chỉ là programming paradigm, tức là chỉ là _ khuôn mẫu _ lập trình thôi, code flow không nằm trong phạm vi của OOP và trách nhiệm đó phải là của lập trình viên

2 Likes

@anon5203072 mình đang nói đến programming paradigm, purely functional code is thread-safe by default vì function không có side effect. Parallelism là một chủ đề hoàn toàn khác trong câu nói đó của mình.

deadlock thì liên quan gì tới OOP đâu :V C ko có OOP vậy C ko có deadlock à? Hay mình nói deadlock là đặc thù của lập trình hướng thủ tục procedural programming được ko? OOP làm gì nhúng chân sang multithread hay multiprocess???

7 Likes

:man_facepalming:

Hi,

Có thể mình chưa nói rõ ý.

Từ đặc trưng không có nghĩa là duy nhất, mà chỉ có nghĩa là nó xuất hiện nhiều nhất (Google for it!). Sở dĩ có chuyện đó vì OOP dealing with mutable objects, và bởi vì mutable objects gắn liền với deadlock nên mình có liên hệ như vậy.

PS: Điều đó không có nghĩa là procedure programming chỉ có immutable objects.

Xin lỗi bạn cái. Mutable object không gắn liền với deadlock.
Deadlock gắn liền với multi threading, và bạn code kém thì bạn gây deadlock thôi chứ chả liên quan gì đến OOP cả. Bạn code OOP mà single thread như cái ngày các bạn học winform thì cả đời không hiểu deadlock nó như thế nào.

Bạn code procedure thì không có mutable object chắc? Hai hàm cùng lock một struct thì có chết không?
Bài viết được share thì cũng ok đấy, cơ mà cả bài mình cũng chưa tìm được chữ OOP nào. Nội dung một đằng tiêu đề một nẻo, đặc trưng của OOP là deadlock bởi vì nó xuất hiện nhiều, ôi chết cười :joy:

Hey,

Mình không nghĩ nó đáng buồn cười! Nếu chỉ là trao đổi kiến thức thì không cần bullying người khác bằng những ngôn ngữ trẻ con vậy đâu. Còn nếu bạn phản biện thì hãy dùng bài viết của mình để phản biện.

Trong PS mình cũng nói rõ, procedure programming không chỉ có immutable objects, và OOP là chỉ về mutable objects.

Hơn nữa mutable objects gắn liền với deadlock! Một số functional programming language giúp minimize deadlocks ví dụ như Haskell, Erlang.

1 Like

tại sao OOP lại tồn tại khái niệm GIL

Java cũng là ngôn ngữ có đầy đủ đặc tính OOP, nhưng đây là lần đầu tiên mình nghe đến GIL đấy :laughing:


Wikipedia cũng chả nói đến GIL liên quan gì đến OOP cả

MUTABLE OBJECTS KHÔNG GẮN LIỀN VỚI DEADLOCK!!!

Mình xin nói lại một lần nữa:

  1. Không phải cứ OOP là phải dùng đến multi-threading. Multi-threading là một phương pháp giải quyết vấn đề, và deadlock chỉ xuất hiện khi có multi-threading.
  2. Người ta có thể sử dụng multi-threading với nhiều phương pháp giải quyết vấn đề cơ bản, không phải chỉ khi sử sụng OOP. Sự tồn tại của OOP và Multi-threading là độc lập, và có thể cùng xuất hiện trong một dự án.
  3. OOP không có nghĩa là chỉ làm việc với mutable object. Người ta sinh ra từ khoá final, get/setter, auto-generated properties… không phải để vứt đi.
  4. Deadlock xảy ra không phải chỉ xảy ra do mutable objects mà xảy ra với bất kỳ data nào bị khoá. Việc deadlock có thể xảy ra ở cả 2 chiều: get và set. Thậm chí nếu một immutable object bị khoá chiều get bởi cả 2 thread thì sao?

Tôi khẳng định lại cho bạn một lần nữa: GIL là một khái niệm/phương pháp của riêng ngôn ngữ Python để giải quyết vấn đề synchronize của multi-threading, không phải là một khái niệm của OOP. Còn bạn vì thấy nó synchronize các object mà bảo nó là khái niệm của OOP, chả khác gì bạn bảo lập trình hướng đối tượng là một khái niệm của lập trình hướng thủ tục vì 2 cái đều là lập trình. Mức độ liên quan của nó cũng vậy thôi.

À, bạn không thấy buồn cười nhưng tôi thấy buồn cười. Nếu như chính bạn là người viết ra cả cái bài báo kia, tại sao tôi không tìm được một chữ OOP, mà nếu có thì cũng chẳng quan trọng?

3 Likes

Part of the title is misleading and has been changed.

Feel free to continue the discussion.

I’m not saying multi-threading is must have in any OOP code.

You don’t say?

Agreed! But again, I’m not saying OOP languages have only mutable objects, even Python has MO, but it’s what OOP paradigm’s about!

You mean an object is locked by whatever reason is a deadlock condition? Or can you elaborate more?

And AGAIN!

  1. GIL is not a Python-only problem.
  2. Stop telling me that GIL is OOP specific problem. It’s what YOU think what I’m thinking of.

Hell yes! It’s all about mutating things.

That’s why Functional Programming has A LOT OF attention nowadays.

PS: even at the end of the day, you still need to mutate data, disk IO for instance, but immutability helps a lot to handle concurrency.

mình hơi nghi ngờ câu này, vd hàm:

int add(int a, int b){ return a + b; }

không hoạt động khi truyền tham số lớn hơn 2,147,483,647 hoặc nhỏ hơn -2,147,483,647. Vậy nó có side effect hay không?
ví dụ khác: 0.1+0.2 == 0.3??

Function trong context đó là function trong functional programming paradigm. Side effect ở đây là liên quan đến states, ví dụ bạn đưa ra không có gì liên quan đến câu của mình cả.

Deadlock là do cơ chế implement multi-thread. Mà ngôn ngữ OOP hay Functional programing đều hỗ trợ multi-thread vậy thì đâu thể nói deadlock là đặc thù của OOP.
Mà do kiến trúc của ngôn ngữ implement multi-thread theo mô hình nào.

1 Like

Mình đã nói rất rõ ở trên rồi và không muốn nhắc lại thêm lần nào nữa.

  1. Mình hoàn toàn đồng ý Deadlock xuất hiện là do multi-thread(process). M chưa bao giờ phủ nhận cả. (do vội vàng khi reply nên mình đã sửa từ vài ngày trước rồi)
  2. OOP paradigm là dạng thức để mutating states, hoàn khác với functional paradigm (FP) làm việc với immutable states, function trong FP idealy không xuất hiện side effects, và vì không tồn tại side effects, FP được mặc định là thread-safe (lần nữa, dĩ nhiên nó (FP) không thể chống lại sự ngu ngốc của con người được).
1 Like

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?