5 ms·
> All Python has to do is put all interpreter state into a single struct to allow for completely independent interpreter instances. But that is not what thread
by smegel 11y ago
> All Python has to do is put all interpreter state into a single struct to allow for completely independent interpreter instances.
But that is not what threading means. If you want "completely independent interpreters" just fork. Threading means you share everything.
> Then the GIL can be discarded altogether
And then you start sharing variables between interpreters, and you gets lots of little baby GILs to contend with! How fun will that be? Not very.
- Frondo 11y agoThat's how Tcl does it. Each thread gets its own Tcl interpreter, and you communicate among them via message passing. It lets you avoid the context switch that way.
- frozenport 11y agoThere is a difference between threads and processes. What you outline is how the python multiprocessing library works.
- sitkack 11y agoThink of it like running multiple python processes inside the same memory space so that copying between interpreters is by reference, not value. Nothing has to be serialized.
- deleted 11y ago[deleted]
- onnoonno 11y agoHow do you avoid damaging the consistency of Python objects then? I think the only way to do that would be to have a reentrant lock for each object individually. Isn't that potentially a big performance issue? I think that is the main reason behind this quote from the article: > Several attempts have been made over the years and failed to do it without sacrificing single-threaded performance.