ディレクトリ
1.UDP契約
- と呼ばれる:パケットプロトコル
特長:
1.リンクを確立する必要性
それを受信したかどうかを知る2.必要
3.データ安全ではありません
4.伝送速度
同時サポートすることができ5.
6.パッケージがくっつきません
利点:
- 伝送速度
- 同時サポートすることができます
- パッケージがくっつきません
短所:
- 簡単に失われたデータの安全でありません、
シナリオ:
初期のQQのチャットルーム:
次の例では、サーバーまたはクライアントが可能であり、開くことができます
这个是server的服务端
import socket
# socket.SOCK_DGRAM ---->UPD协议
server = socket.socket(type = socket.SOCK_DGRAM)
#服务端需要绑定一个地址,让别人知道你在哪里
server.bind(
('127.0.0.1',9002)
)
while True:
data,addr = server.recvfrom(1024)
print(addr)
print(data.decode('utf-8'))
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
这个是client 客户端
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
address = ('127.0.0.1', 9002)
while True:
msg = input('client---->server:').encode('utf-8')
client.sendto(msg, address)
--tcpプロトコル(以下:ストリーミングプロトコル)
利点:
- データセキュリティ
短所:
- 伝送速度が遅いです
- スティックパッケージ
2.並行プログラミング
オペレーティング・システムの2.1歴史
1.パンチカード
- 非常に遅いデータを読み込みます
低利用率-CPU
- 単一ユーザ(コード)を使用し
2.バッチ
- 非常に低いデータ速度を読んで
低利用率-CPU
- ライン(複数のコード)を使用し
- 効率はまだ低いです
3.オフラインバッチ(最新のオペレーティングシステムの設計原則)
- 高速でデータを読み取ります
高い使用率-CPU
2.2以上のチャネル技術(単球の背景に基づいて処理)
-シングルチャンネル: -----「シリアルへの一方通行
- 例えば:、待ってまで使用されているCPUを使用する必要性、最初に使用し、B B、Bを使用することができます
長所:高効率化プログラム
短所:CPUの効率が低いです
- マルチチャンネル:
- 例えば:Bの必要性のCPU、最初の使用、待機B、「IOまたは実行時間が長すぎる」に入るまで、(状態切替保存+)になり、その後、Bが実行ケースBまで、CPUを使用することができます「IOや実行時間が長すぎる」と、二つのプログラムの終了時までに、次にCPU権。
マルチチャンネル二つの特徴:
- スペースに多重化:
CPUを複数使用しています
- 時間に多重化します。
保存状態の切り替え+
実行はIO、オペレーティングシステムが権限のCPUの剥奪を実行します。1.遭遇
長所:CPUの高効率
2.プログラムの実行時間を実行すると長すぎると、オペレーティングシステムは、権限のCPUの剥奪を実行します。
短所:低効率化プログラム
2.3並列並行
- シリアル:
- 同時:
シングルコア(CPU)では、2 A、Bプログラム、最初の実装、顔IOは、bが実行権限を、CPUを競う、aとbの実行をさせるようになったとき、彼らは次のようになり、実行時に同時に実行。
- パラレル:
マルチコア(複数のCPU)と、2つの手順を実行するとき、aおよびbは同時に実行された場合に、それらは、真の意味で同時に実行されています。
インタビューの質問:シングルコアの並列処理の場合には達成することができますか?ない仕事
2.4プロセス
1.プロセスとは何ですか?
プロセスは、リソースユニットです。
2.プロセスおよび手順
- 手順:コードファイルの束
- プロセス:コードを実行するプロセス、プロセスと呼ばれます
-3。スケジューリング処理
スケジューリングアルゴリズム1.まず最初に務め、来
- たとえば:最初のサーブ、-来る最初はLETの場合はサービスが終了するまで、B、A、Bは再びサーブ
- 短所:低効率
2.短い動作優先度スケジューリングアルゴリズム:
- 短い実行時間、優先度スケジューリング
- 短所:
長い時間のためのプログラムの実行につながる、あなたはそれが実行でき、プログラムが終了した後の時間のすべての短い期間を待つ必要があります。
3.ラウンドロビン方式
- 例えば:、オペレーティングシステムは10秒のためにあなたを与えるだろうし、時間は10〜10のプログラムに等分し、10秒ホイール方法になります10のニーズがプログラムを実行する一方で、時間は、1秒以上のいくつかのプログラム場合に必要私たちは、実行を割り当てるためのタイムホイール方法によれば、同時にプログラムの次のバッチと整列していきます。
4.マルチレベルフィードバックキュー:
レベル1キュー:キューにあるプログラムの実施を最優先。
レベル2のキュー:優先順位そう
.....
タイムホイール多段フィードバックキュー方式+:現代のオペレーティングシステムでは、スケジューリング方法を処理します
2.5同期および非同期
同期および非同期の手段「の提出タスク」
-同期(シリアル)
2つの手順a、bおよびプログラムを実行するには、提出した場合に実行に提出しなければならない、bがタスクを送信するためには、完成を待たなければなりません。
-シングルチャネルに似て、同等のタスクの同期を提出します
-非同期(同時)
2つの手順a、bおよびプログラムを実行するがあれば提出し、実行するために、提出しなければならない、Bの完成を待たずに、あなたは直接ジョブを送信することができます。
非同期タスク(同時に実行のように見える)を提出する同等の、マルチチャンネルと同様に
-パラレル
マルチコアの場合には、複数のタスクを同時に(本当の意味での実行)を実行します
2.6ブロッキングとノンブロッキング
- ブロック(待機中)
- IOが発生した人々は、ブロックします。
変速機入力()、出力()、time.sleep()、ファイル・データの読み書き:IO
- ノンブロッキング(待ち時間なしません)
すべての非ブロッキングIOに加えて、(例えば1 + 1から1000000からのような)
2.7プロセス三つの状態
- 準備完了状態
- 同期および非同期
-実行状態:プログラムの実行時間は------->長すぎるレディ状態に戻ります
- ノンブロッキング
- 状態を遮断します:
- IOの出会い
インタビューの質問:遮断すると同期があなたと同じですか?そして、非同期の非ブロッキングは同じですか?----->は同じではありません
提出タスク:同期および非同期 -
- ブロックと非ブロック:プロセスの状態
-非同期の非ブロッキング:------> CPU使用率が最大化され 、プログラムの効率を向上させる最大化
2つの方法で2.8作成プロセス
直接呼び出しプロセスの一種
from multiprocessing import Process
import time
#方式一:直接调用Process
def task():
print(f'start...{1}')
time.sleep(1)
print(f'end...{1}')
if __name__ == '__main__':
obj = Process(target = task)#target 是一个任务》》创建子进程
obj.start()###告诉操作系统去创建一个子进程
print('正在执行当前的进程')###print 这个是主进程,但是有了process
个模块,新开辟一个名称空间,放置def task函数的子进程,等主进程节水了,才可以执行子进程
>>>>>>>>>>>>>>>>>>>>>>>>>>>
正在执行当前的进程
start...1
end...1
子プロセスが終了された後、メイン処理を終了するのを待つ)(ジョイン
from multiprocessing import Process
import time
#方式一:直接调用Process
def task():
print(f'start...{1}')
time.sleep(1)
print(f'end...{1}')
if __name__ == '__main__':
obj = Process(target = task)
obj.start()
obj.join()##告诉主进程等待子进程结束后,在结束
print('正在执行当前的进程')
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start...1
end...1
正在执行当前的进程
#方式一:直接调用Process
def task(name):
print(f'start...{name}')
time.sleep(1)
print(f'end...{name}')
if __name__ == '__main__':
obj1 = Process(target = task,args =('abc',))
obj2 = Process(target = task,args =('def',))
obj3 = Process(target = task,args =('ghk',))
obj1.start()
obj2.start()
obj3.start()
#obj.join()##告诉主进程等待子进程结束后,在结束
print('正在执行当前的进程')
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>####下面这个是异步操作
正在执行当前的进程
start...def
start...ghk
start...abc
end...ghk
end...def
end...abc
プラス提出非同期参加
from multiprocessing import Process
import time
#方式一:直接调用Process
def task(name):
print(f'start...{name}')
time.sleep(1)
print(f'end...{name}')
if __name__ == '__main__':
obj1 = Process(target = task,args =('abc',))
obj2 = Process(target = task,args =('def',))
obj3 = Process(target = task,args =('ghk',))
obj1.start()
obj2.start()
obj3.start()
obj1.join()##告诉主进程等待子进程结束后,在结束
obj2.join()##告诉主进程等待子进程结束后,在结束
obj3.join()##告诉主进程等待子进程结束后,在结束
print('正在执行当前的进程')
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start...abc
start...ghk
start...def
end...abc
end...ghk
end...def
正在执行当前的进程
非同期を行うには循環のための
from multiprocessing import Process
import time
#方式一:直接调用Process
def task(name):
print(f'start...{name}')
time.sleep(1)
print(f'end...{name}')
if __name__ == '__main__':
list1 = []
for line in range(10):
obj = Process(target=task, args=('abc',))
obj.start()
list1.append(obj)
for obj in list1:
obj.join()
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start...abc
start...abc
start...abc
start...abc
start...abc
start...abc
start...abc
start...abc
start...abc
start...abc
end...abc
end...abc
end...abc
end...abc
end...abc
end...abc
end...abc
end...abc
end...abc
end...abc
主进程
第二の方法
from multiprocessing import Process
import time
class Myprocess(Process):
def run(self):####这个是run是重写Process内部的方法,只有这样操作 ,才能执行这个进程
print(f'start...{self.name}的子进程')
time.sleep(2)
print(f'end...{self.name}的子进程')
if __name__ == '__main__':
list1 =[]
for line in range(5):
obj = Myprocess()
obj.start()
list1.append(obj)
for obj in list1:
obj.join()
print('主进程...')
>>>>>>>>>>>>>>>>>>>>>>>>>>>
start...Myprocess-3的子进程
start...Myprocess-4的子进程
start...Myprocess-1的子进程
start...Myprocess-2的子进程
start...Myprocess-5的子进程
end...Myprocess-3的子进程
end...Myprocess-1的子进程
end...Myprocess-2的子进程
end...Myprocess-4的子进程
end...Myprocess-5的子进程
主进程...
主进程...
主进程...
主进程...
主进程...