关于python的多线程(GIL)只适合用于处理IO操作的困惑?
天蓬老师
天蓬老师 2017-04-18 10:03:03
0
2
504

问题一

看了一些关于python中全局锁的文章,大概意思是说python中所有的多线程都会受GIL这把大锁的控制,python实际上只能在一个cpu下面执行,多线程只是内部调度带来的错觉。

但是对于处理IO操作而非计算操作的线程,python的多线程还是非常有用的。

对于上面这句话,请问意思是说在执行相关的文件读写(IO操作)的这个线程,在执行文件读写操作的这个线程会暂时释放手中的GIL,把CPU的控制权交给其他的线程吗?

问题二

看到书上说对于web程序的瓶颈很多时候是由于IO操作导致的,请问这句话有该怎么理解?web应用(django/flask等)中的一次请求和IO操作有啥关系,不是只有一次socket的建立吗?或者这里说的IO操作是对于数据库的查询,数据库的查询会拖累整个程序的速度?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全員に返信(2)
Peter_Zhu

質問 1: マルチスレッドは IO 集約型のアプリケーションには依然として役立ちます。結局のところ、IO 操作は、ネットワーク IO であってもディスク IO であっても、この時点でデータが返されるのを待機していることがよくあります。この時点では、他のスレッドは実行を続けることができます。コンピューティング集約型のアプリケーションの場合は、マルチプロセスに基づいて、各プロセスが独立した GIL を持つマルチプロセッシングの使用を検討できます。リソースを奪い合う必要はありません。

質問 2 ここでの IO はネットワーク IO を指します。これは、サーバーのパフォーマンス、ネットワーク遅延、帯域幅に関係します。例えば、ギガビットネットワークと100Mネットワークでは伝送速度が明らかに異なります。

いいねを押す +0
Ty80

Python インタープリターについてある程度理解する必要があります。I/O 集中型の操作の場合、I/O 操作があまり多くないコードの場合、インタープリターは I/O 操作の待機中にブロックされるたびに GIL を解放します。 O 操作。スレッドが全期間を通じて常にプロセッサと GIL を占有する可能性が高くなります。これは、I/O 集約型の Python プログラムの方が、計算集約型のプログラムよりもマルチスレッドを有効に活用できることを意味します (Python コア プログラミング)第 3 版の文)。

マルチプロセスでは複数のプロセスが使用され、各プロセスには独自の独立した GIL があるため、マルチスレッドの代わりに上階でマルチプロセッシングを使用できます。ただし、これを導入すると、プログラム実装中のスレッド間のデータ通信と同期が難しくなります。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!