xxleyi / learning_list

聚集自己的学习笔记
11 stars 3 forks source link

Asynchronous programming in Python3.5+ #23

Open xxleyi opened 5 years ago

xxleyi commented 5 years ago

Asynchronous programming in Python has become more and more popular lately.

Asynchronous programming. Python3.5+

xxleyi commented 5 years ago

Quick Recap:

xxleyi commented 5 years ago

Python code can now be mainly executed in one of two worlds, synchronous or asynchronous. You should think of them as separate worlds with different libraries and styles of calls, but sharing variables and syntax.

xxleyi commented 5 years ago

Threads

image

A thread is the smallest unit of processing that can be performed in an OS.

Threads of a process can share the memory of global variables. If a global variable is changed in one thread, this change is valid for all threads.

In simple words, a thread is a sequence of such operations within a program that can be executed independently of other code.

Threads executing concurrently but can be executing in parallel — it depends on the system on which they are running.

Global Interpreter Lock (GIL)

First of all, GIL is a lock that must be taken before any access to Python (and this is not only the execution of Python code but also calls to the Python C API). In essence, GIL is a global semaphore that does not allow more than one thread to work simultaneously within an interpreter.

In fact, GIL in python makes the idea of ​​using threads for parallelism in computational problems(CPU-bound operations) useless.

On CPU-bound tasks, the program will not accelerate, but only slow down, because now the threads will have to halve the processor time. At the same time, the GIL I/O operation will not slow down, since before the system call the thread releases the GIL.

On this sad note, you can come to the conclusion that threads will be enough for parallelizing tasks that are tied to I/O. But computing tasks should be run in separate processes.

xxleyi commented 5 years ago

Processes

Like threads, processes are always executed concurrently, but they can also be executed in parallel, depending on the presence of the hardware component.

The calculation operation executed faster than threaded implementation because now we are not stuck in capturing GIL, but the I/O bound function took slightly more time because processes are more heavyweight than threads.

xxleyi commented 5 years ago

Asynchronous world

image

TODO

xxleyi commented 5 years ago

Making the Right Choice

xxleyi commented 5 years ago

Thread Synchronization Mechanisms in Python