Python FAQ

1. TCPとUDPの違い

2. Pythonのガベージコレクションメカニズム

参照カウント原則:オブジェクトの参照が作成またはコピーされると、オブジェクトの参照カウントは1ずつ増加します。オブジェクトの参照が破棄されると、オブジェクトの参照カウントは1ずつ減少し、オブジェクトの参照カウントは0に減少します。これは、オブジェクトが使用されなくなり、そのメモリを解放できることを意味します。

利点:参照カウントには大きな利点があります。つまり、リアルタイムの任意のメモリです。参照がなくなるとすぐに再利用され、無効なメモリを回復するには、他のガベージコレクション手法を特定の特別な条件下で行う必要があります。 。

短所:ただし、短所もあります。参照カウントメカニズムによってもたらされる参照カウントを維持する追加の操作は、Pythonの実行中のメモリ割り当てと解放、および参照割り当ての数に正比例します。これは、他のガベージコレクション手法よりも明らかに優れています。もたらされる追加の操作は、再利用されるメモリの量に関連する効率が低いだけです。同時に、参照テクノロジーにはもう1つの大きな問題があります。循環参照です。オブジェクトは相互に参照するため、各オブジェクトの参照は0にならず、これらのオブジェクトが占有していたメモリが解放されることはありません。

**Mark-clear ** Mark-clearは、循環参照を引き起こす可能性のあるオブジェクトにのみ焦点を当てています。明らかに、PyIntObjectやPyStringObjectなどの不変オブジェクトは、他のオブジェクトへの参照を保持できないため、循環参照を生成することはできません。 Pythonでの循環参照は、コンテナオブジェクト間、つまり、list、dict、classなどの他のオブジェクトを内部的に保持できるオブジェクト間で常に発生します。

原則:1。ガベージ検出の開始点としてルートオブジェクトのコレクションを探します。ルートオブジェクトは、いくつかのグローバル参照および関数スタック内の参照です。これらの参照が指すオブジェクトは削除できません。2。ルートからオブジェクトコレクションから開始し、ルートオブジェクトコレクション内の各参照に続いて、オブジェクトに到達できる場合、それはオブジェクトが到達可能であり、削除されないことを意味します。このプロセスはゴミ検出段階です。3。検出段階の場合終了後、すべてのオブジェクトが到達可能部分と到達不能部分に分割され、到達可能オブジェクトがすべて予約され、他の到達不能オブジェクトが占有していたメモリが再利用されます。これがゴミ収集段階です。 (最下層はリンクされたリストを使用して、これらのコレクションのオブジェクトを接続します)

短所:マーキングと除去のプロセスは効率的ではありません。

世代別コレクション原則:システム内のすべてのメモリブロックは、存続時間に応じて異なるコレクションに分割されます。各コレクションは「世代」になります。Pythonはデフォルトで3世代のオブジェクトコレクションを定義します。ガベージコレクションの頻度は「世代」とともに増加します。 「生存期間は増減します。つまり、オブジェクトが長いほど、ゴミになる可能性が低くなり、ゴミ収集の頻度を減らす必要があります。したがって、この生存時間を測定する方法:通常、いくつかのゴミ収集アクションによって測定されます。オブジェクトがより多くのゴミ収集された場合、オブジェクトの生存時間は長いと結論付けることができます。

3. プロセス/スレッド/ coroutineの違い

プロセスは、データセットに対するプログラムの動的実行プロセスです。このプロセスは、プログラム、データセット、およびプロセス制御ブロックの3つの部分で構成されています。プログラムは、プロセスのどの機能とその完了方法を説明するために使用されます。データセットは、プログラムの実行に使用されるリソースです。プロセス制御ブロックは、プログラムの状態を保存するために使用されます。

プロセスには複数のスレッドが存在する可能性がありますが、スレッドの代わりにプロセスが必要なのはなぜですか?プログラムでは、スレッドがデータのセットを共有するため、スレッドがすべてプロセスになり、各プロセスがメモリの一部を所有する場合、このデータのセットを各プログラムにコピーする必要があります。不合理であるため、スレッドがあります。

プロセススレッド間の関係(1)スレッドは1つのプロセスにのみ属することができ、プロセスは複数のスレッドを持つことができますが、少なくとも1つのスレッドがプロセスに割り当てられます。プロセスはプログラムの本体です。同じプロセス内のすべてのスレッドがこれを共有します。プロセスのすべてのリソース(3)CPUはスレッド、つまりCPU上で実際に実行されるスレッドに割り当てられます(4)スレッドは実行の最小単位であり、プロセスはリソース管理の最小単位です

マイクロスレッド、ファイバーとしても知られるCoroutine。コルーチンはサブルーチンのように見えますが、実行の過程で、サブルーチン内で中断され、他のサブルーチンを実行するように切り替え、必要に応じて実行を継続するために戻ることができます。

**4. POST / GET ** ##の違い

5. クッキー/セッションの違い

Recommended Posts

Python FAQ
Pythonマルチスレッド
Python CookBook
Python3辞書
Python3モジュール
python(you-get)
Python文字列
Pythonの基本
Python記述子
Pythonの基本2
Python exec
Pythonノート
Python3タプル
CentOS + Python3.6 +
Python Advanced(1)
Pythonデコレータ
Python IO
Pythonマルチスレッド
Pythonツールチェーン
Python3リスト
Pythonマルチタスク-日常
Pythonの概要
pythonの紹介
Pythonアナリティック
Pythonの基本
07.Python3関数
Pythonの基本3
Pythonマルチタスクスレッド
Python関数
python sys.stdout
python演算子
Pythonエントリ-3
Centos 7.5 python3.6
Python文字列
pythonキューキュー
Pythonの基本4
Pythonの基本5
Centos6はPython2.7.13をインストールします
Pythonは質問に答えます
Pythonの基本構文(1)
Pythonはloopメソッドを終了します
Ubuntu16アップグレードPython3
Centos7はPython3.6をインストールします。
ubuntu18.04インストールpython2
Pythonの古典的なアルゴリズム
ubuntuを再学習します--python3
Python2.7 [インストールチュートリアル]
Python文字列操作
Python 3.9が登場!
Python研究ノート(1)
python学習ルート
CentOS7アップグレードpython3
Python3の基本構文
Pythonレビュー1
linux + ubuntuはpythonを解決します
pythonの関数
Python学習変数タイプ
CentOSはPython3.6をインストールします
Python3.9の7つの機能
Pythonファイル操作
ubuntu12.04インストールpython3