Global
interpreter lock (GIL) is a mechanism used by interpreters to serialize the
access to their internal code. Global interpreter lock imposes performance
restriction on threads. For example, in multi core systems, you can't utilize
all the cpus efficiently. CPython implements Global interpreter lock. Jython
and IronPython are not implemented GIL.
What are the reasons to implement GIL?
a.
Single
threaded environment works faster, since no need to acquire and release locks
b.
C
libraries can be easily integrated.
c.
You
can implement interpreters easily.
Drawbacks of using GIL
a.
Multi
threaded programs failed to take advantage of multi core systems. It is
because, suppose two threads are trying to execute same 100 lines of byte code,
thread1 gets lock and process the code and release the lock. Second thread will
be notified, get the lock, process the byte code and release the lock. Locking,
unlocking, notifying takes some time. So Two threads calling a function may
take more time as a single thread calling the function twice.
Python multiprocessing
library used to overcome the drawback of GIL. It supports spawning processes
using an API similar to the threading module. By using multiprocessing module, programmers
fully leverage multiple processors on a given machine.
No comments:
Post a Comment