PythonのDay34

UDPプロトコル:

 ユーザデータグラムプロトコルは、OSI参照モデルにおけるトランスポート層のプロトコルが属しています。信頼性のない提供し、順序は、必要とされていない少量のデータ、高速な伝送サービス。

信頼できない:何の確認情報が送信されていない、とすぐにキャッシュ内のデータを削除します。

配列が必要とされない:データが大きい場合には、送信する複数のデータパケットに分割され、注文データを知ることができない他の当事者、

かつ完全です。

少量のデータ:データより大きな可能性が高いパケット損失ので、少量のデータを送信しようとするが、1472上で推奨されていません

スピード:それはTCP送達確認情報に関して必要とされていませんが確立できない、または受信しないかどうかさえ、ちょうど髪なので、伝送効率必要が。

コミュニケーションプロセス:

TCPのメタファーの携帯電話のプロセスの場合、UDPはトランシーバーとして見ることができます

1. UDPソケットを作成するために、マシンを買います

2.チャネルは、固定IPアドレスとポートをバインド

3.送受信データのrecvfromのsendtoを

 

受信:

1. UDPソケットを作成するために、マシンを買います

2.送受信データのrecvfromのはsendto

注:データを受信する最初のを収集することはできません、あなたはポート番号をクリアする必要があり、ポート番号は、ネットワークサービスを使用することは不可能ではありません。

 

TCPとUDPは、他の違いです。

1.パッケージをつかない、各送信は独立したデータグラムであります

2.接続を確立することなく、

TCP:高いデータ整合性を必要とする:オンライン決済、テキストメッセージを

UDP:データの整合性を行い、より高速:ビデオ、音声、ゲーム

DNS:

ドメインネームサーバ

ドメイン名の束はIPをバインドするために使用される法律の文字列があるが、目的は、メモリを容易にすることです。

DNSサーバは、アドレスをIPドメイン名を変換するために、あなたを助けるためにある自然の中での大規模なデータベースシステムで、ドメイン名とIPとの間の対応があります

マシンのパフォーマンスが制限さ:

分かれて:

  ルートネームサーバストア情報のみトップレベルドメインサーバ

  トップレベルドメインのサーバーのみを格納セカンダリドメインネームサーバ

  唯一の3つの二次ドメインネームサーバ、ドメインネームサーバストレージ

  サードレベルドメインは、通常、特定のIP情報に直接格納されます

 

  DNSは、ローカル加速を解決するために使用されます

 

DNSでの自分の役割をビルドします。

  1.CDNコンテンツ配信ネットワークサービスは、あなたの周りの複数のミラーを確立することです

  2.クラスタ

オペレーティングシステム:

ソフトウェアであり、コードの膨大な量で保護されたコードを変更することはできません、カーネルは500万人以上を持っています

長寿、一度変更されません一般的に完了しました。

オペレーティングシステムの開発の歴史

無処理とコンピュータパンチカードと真空管1の第一のオペレーティングシステムではありません

2.第二世代コンピュータトランジスタ70941401バッチ・システム

入力および出力デバイスが遅いとシリアル実行のグループの開発グループの処理効率に関わる人々のコンピューティング・ニーズを相互に接続することはできません

3.第三世代コンピュータ技術の集積回路およびマルチチャンネル

スプーリングマルチ端末回線の両方の科学技術計算や汎用コンピュータのために、同じマシンは、文字処理を行います

シリアルに起因する非効率性を解決するためのマルチチャネル技術

マルチユーザ端末は、同時に自分自身に複数のユーザーに1台のコンピュータを各ユーザーの思考にサービスを提供することができます

第4世代のPC

集積回路の大規模使用は、すべてのほとんどは、GUIインタフェースを提供します

マルチチャネル技術:

背景:すべてのシリアル手続き、資源の浪費になります。目的は、複数のプログラムを同時に実行する複数のタスクを同時に処理できるようにすることです。

キーテクノロジー:

空間多重化は:同時にメモリにロードされた別のプログラムの複数のデータを指します。各プロセス間の記憶領域は、各物理レベルから単離されます。

時間多重化:スイッチプラス保存

スイッチング条件:1.プロセスの実装が別のプロセスにIO操作、スイッチに遭遇しました

2.実行している時間が長すぎる、オペレーティングシステムが強制的に強制力を奪われます

単純に切り替えるあなたが応答して実行するために切り替える前に、現在の状態を保存する必要があり、十分ではありません。

プロセス:

このプログラムは、呼び出されたプロセスで実行するプログラムの実施プロセス、オペレーティングシステムから抽象化プロセスであり、されています

マルチプロセス:

プロセスおよび手順の間の差:

たくさんのファイルを識別することができ、コンピュータプログラムは、このプログラムは、ハードディスク上のバイナリデータを横たわっているの束を実行していません

ランデータがメモリ、CPUにハードディスクから読み込まれた場合、データがメモリから読み出された命令を実行されます。

プログラムは、プロセスが存在します起動すると、プログラムが複数回実行が、プロセスの独立したプロセス間であることができます。

我々は右PYファイルを実行すると、実際には、通訳の引数としてPythonインタプリタ、あなたが実際にPYファイルを開始しました。

並列同時非ブロッキングは、ブロッキング:

妨害:プログラムは、IO操作が検出され、非ブロックプログラムは、IO操作を経験していません。並行性:複数の同時作業が、ちょうど速い、基本的にハンドオーバの実行を行わないながら。

パラレル:マルチコアCPUを持っている必要があり、それは平行であってもよい、真同時に複数のタスクを実行します。

同時に、並列処理が道にタスクを言うことです。

プログラマ永遠のトピック:

効率を改善する、基本的なアプローチは、実行中のプログラムを作ることです。

CPU時間を短縮することができるIOマルチ占有は、バッファは、IO操作を低減するために使用されます。

PIDおよびPPID:

PID:

通常のオペレーティングシステムでは、プロセスを区別するためにどのように、複数のアプリケーション、つまり、複数のプロセスを実行するのだろうか?

各プロセスを与えるシステムは、人々は区別するためにIDカード番号が必要として、PIDでプロセス番号が割り当てられます。

検証:

すべてのプロセスの情報を表示するためのタスクリスト。

taskkill / F / PID / PIDこのコマンドは、指定されたプロセスを終了するために使用することができます。

PythonでOSモジュールは、PIDを取得するために使用することができます

輸入OS

印刷(os.getpid())

PPID:

プロセスが別のプロセスB、Bと呼ばれる親プロセスを開くと、Bは、子プロセスと呼ばれ、親プロセスはpythonでPID osモジュールによって取得することができます。

輸入OS

印刷( "自己"、os.getppid()) 

あなたはpycharmのPYファイルで実行している場合は、親プロセスはそのpycharmはもちろん、このpython.exeで、あなたのことができCMDから

Pyは、ファイルを実行するために、cmdが今回その親プロセスのpython.exeです。

並行性と並列性、ブロックおよびノンブロッキング:

同時実行が複数のイベントを指し、同時に発生しました:

洗濯や料理は、とも呼ばれる擬似平行に、例えば、同時に発生しますが、印象が起こっている間、基本的に2つのタスクを切り替えます。

同時に並列手段複数のものを持ちます:

例えば、人は、コードや本を執筆中に他の人を書き、同時にこれら二つのことは、私たちは、人は仕事の真の並列実行は、コンピュータではできない、本当にシングルコアCPU平行ではないことに注意してくださいシングルコアCPUが実際の同時実行で、QQとマイクロ手紙を実行することができる理由。

ブロッキングと非ブロッキングは、プログラムの状態を指し

プロセスは、3つの状態があります。

準備完了状態、状態を実行またはブロッキング


プロセスの実行時間が長すぎるまたはIOに遭遇したとき、マルチチャネル技術は、自動的に別のプロセスに切り替わり、IO操作は、プロセスは、右を奪われることを意味し、プロセスを実行するCPUを継続することができない原因になります。

プロセスの理論:

しかし、すべてのハードウェアは、オペレーティングシステムは、オペレーティングシステムの概念限り、管理するために持っている必要があり、工程があり、あなたがプロセスを作成する方法を持っている必要があり、そのような電子レンジのコントローラとして一つだけのアプリケーション用に設計されたいくつかのオペレーティングシステムは、一度起動します電子レンジは、プロセスがあります。

(多くのアプリケーションを実行している)一般的なシステムとして、あなたは主に4つの形式に分け、システム動作中のプロセスを作成したり、失効させる能力を持っている必要があり、新しいプロセスを作成します

  1. システムの初期化(psコマンドをLinuxでプロセスを見るには、タスクマネージャを使用してWindows、フォアグラウンドプロセスは、ユーザとの対話を担当して、ユーザーに関連するバックグラウンドで実行中のプロセスは、バックグラウンドで実行され、ウェイクアッププロセスを必要なときにだけ、デーモンと呼ばれます電子メール、Webページ、ニュース、プリント)として

  2. プロセスは、(例えば、マルチプロセス、os.fork、subprocess.Popen等nginxのオープンなど)動作中に子プロセスをオープン

  3. インタラクティブなユーザーの要求は、新しいプロセスを作成(ユーザーダブルSTORMなど)

  4. バッチの初期化動作(のみメインフレーム・バッチ・システム上のアプリケーション)

どちらにしても、新しいプロセスを作成して実施され、既存のプロセスによって呼び出されたシステムを作成するためのプロセスを作成するために、

  1. UNIXのシステムコールは次のとおりです。フォーク、フォークは、両方のコマンドを実行し、シェルインタプリタ処理(ファイルを開くには、同じメモリ・マップ、同じ環境と同じ文字列を持って、親プロセスの正確なコピーを作成します子プロセスを作成します)

  2. CreateProcessを、両方のプロセスのCreateProcessを作成するプロセスは、また新しいプロセスに正しいプログラムを担当しています。Windowsでのシステムコールがあります。

約子プロセスを作成、UNIXおよびWindows

  1.同じである:プロセスは親プロセスと子プロセスは異なるアドレス空間(持って、作成されたマルチチャネルプロセスのメモリとの間の分離を達成するための物理的なレベルのための技術要件を)、プロセスがそのアドレス空間のいずれかを変更することになるではありません他のプロセスに影響を与えます。

  2.違いがある:子と親プロセスが読み取り専用にしていることができ、共有メモリ領域を:UNIXで、子プロセスの初期アドレス空間があることを示唆し、親プロセスのコピーです。しかし、Windowsシステムのために、それはコードをリロードします。

破壊のプロセス:

  1. 正常終了(自発的、ユーザーがクリックはのExitProcessを使用してウィンドウで、出口Linuxで、正常終了のシステムコールを開始するために終了したインタラクティブページを横切る、またはプロシージャを呼び出す場合)

  2. エラー終了(a.pyで自発的、Pythonのa.pyが存在しません)

  3. 深刻なエラー(非自発的、など存在しないメモリへの参照、1/0、など違法な命令を実行するために、あなたがしようと、例外をキャッチすることができます... ...を除きます)

  4. (例えば殺すように、不随意-9)別のプロセスによって殺さ

階層プロセス

ことを除いて唯一の親プロセスかどうか、UNIXやWindows、、:

  1. UNIXでは、すべてのプロセスが初期化プロセスに基づいてツリー構造の組成、根です。信号がキーボードから送信された場合、信号は、キーボードの現在のプロセスに関連付けられているグループのすべてのメンバーに送信されるように、親と子供が一緒になって、プロセスグループを形成します。

  2. Windowsでは、プロセス階層の概念がない、すべてのプロセスは、唯一の同様のプロセス階層が示すように同じ状態ですあなたは(特別なトークンを取得するために、親プロセスを作成するときにあるハンドルと呼ばれるが)、ハンドルをすることができそれは子供を制御するために使用されるが、親がいないのレベルのように、他のサブプロセスへのハンドルを渡しする権利を有します。

Pythonはマルチプロセスを実現します

そこにアプリケーションに必要なタスクの複数の同時実行することが、Caozuoxitong条件のために、プロセスがタスクであることと、CPUは上Caozuoxitong、コードはIO操作に遭遇したとき、ダウンターンからコードを実行することができますので、現在のアプリケーションのために、他のアプリケーションにCPUの実行を奪うことの効率を低下させることなく、タスクを完了するために、プログラムの両方を作成する方法、効率が低下?答えは、現在のアプリケーションが他のタスクを実行し続けることができますので、時間のかかる子プロセスへの操作が完了するまでに、現在のプログラムをさせることです

子プロセスを開くには2つの方法でのPython

モード1:

Processクラスのインスタンス化

マルチプロセッシングインポートプロセスからの
インポート時

タスクDEF(名):
印刷(名% '%Sのランニングは、IS')
time.sleep(3)
印刷(名%を'%Sが行われている')
__name__ == '__main__' IF:
Windowsシステム上で#、オープン子の動作は、その下に配置する必要があり
ます。#プロセス(目標=タスク、kwargsから= {「エゴン」「名称」})
P =プロセス(目標=タスク、引数=(「ジャック」))
p.start( )#の初期状態として、子プロセスの親にコピーに、子プロセスをデータをメモリ空間のために、オペレーティングシステムにオペレーティングシステムを要求を送信し、
印刷(「======マスター」)

 

オプション2:

継承Processクラスとrunメソッドをオーバーライドします

マルチプロセッシングインポートプロセスからの
インポート時

クラスMyProcess(プロセス):
デフ__init __(自己、名):
スーパー(MyProcess、自己).__のinit __()
self.name =名前

デフ(自己)を実行します。
プリント( '%sの実行されている' %のself.name)を
time.sleep(3)
印刷(%のself.nameを'%sが行われている')
の場合__name__ == '__main__':
P = MyProcess( 'ジャック')
p.start()
印刷( '主')

機能に参加

関数呼び出しは、エンドは、アプリケーションとは何の関係もないとき、プロセス、実装のプロセスを開始するときになど、オペレーティングシステムによってプレイ上で動作を開始するので、現在のプロセスがダウンしていきます後、関数は親プロセスになる可能性が参加継続して子プロセスを待った後、

 

インポートプロセスマルチプロセッシングから
DEFタスク(N):
印刷( '%sはruningてれる' %のN)
time.sleep(N)

__name__ == IF '__main__':
START_TIME = time.time()
P1 =プロセス(目標=タスク、引数=(1)、名前= 'タスク1')
p1.start()#ブートプロセス
プリント(p1.pid )#プロセスpidを取得
印刷(p1.name)#は、プロセス名の取得
p1.terminate()#は、プロセスの終了
の優先順位上げるp1.join()#を
)#の状態の生存のプロセスを取得(p1.is_alive(印刷)
「(主印刷を「)

孤立とゾンビプロセス(理解します)

何孤立しています

プロセスを開いた後、孤児子プロセスを指し、親プロセス子が死ぬ前に、それは孤立した子プロセスと呼ばれています

例:QQ誰かがあなたに、クリックされたときに、ブラウザを開いて、それが親プロセスのQQのブラウザでリンクを送信、チャット、その後、QQを終了し、この時点では、ブラウザは孤児プロセスとなっています

孤児プロセスは、オペレーティングシステムになります子プロセスが引き継ぎ、親プロセスの終わりに、その存在のために必要がある、無害です。

 

ゾンビプロセスとは何ですか

ゾンビプロセスは、最初の親の端部よりも子プロセス、親が子供を回復していないとき、子プロセスは、リソースが占有解放するために、子がゾンビプロセスになることを意味します。親プロセスが最初に終了した場合、子供は、オペレーティング・システムを引き継ぐためにある子プロセスがそのリソースを占有出た後、オペレーティングシステムが回復します!

ゾンビの危険:

実行と子プロセスの親の終わりは非同期プロセスなので、つまり、親プロセスは、いつ最後に、子プロセスの終了を予測ことはありません。親、子、あまりにも多忙を待つには遅すぎではないだろうか、子供は何時知らなかったので終わり、そして子プロセス情報の終わりの状態は、それを失っている?ありません。UNⅨは、状態情報があれば、親プロセスが子プロセスの終了は、それは必然的に取得する際に知りたいとすることを確保するためのメカニズムを提供するので。このメカニズムは、次のとおりですので、上の開いているファイル、占有メモリとを含むプロセスの各プロセスが終了し、カーネルのリリースがすべてのリソース、。それでも特定の情報のために予約(プロセスIDのプロセスIDを含む、プロセスの終了ステータスの終了ステータス、実行時間などのプロセスによって撮影されたCPU時間の量)。プロセスは/ waitpidのを待って呼び出していない場合は、親プロセスが待ち/ waitpidを介して取得するときのリリースまで。しかし、これは問題につながっている、その情報の保持期間は、そのプロセスIDが占有されていたであろう、解放されませんが、農産物の大量の場合に使用することができ、プロセスIDシステムは、制限されている[ゾンビプロセス]システムにつながったプロセスは新しいプロセスを生成することはできませんので、番号は利用できません。これは、ゾンビプロセスの危険であり、避けるべきです。

 

おすすめ

転載: www.cnblogs.com/xinfan1/p/10957087.html