比較実験
データによると、マルチスレッドプロセスが CPU を集中的に使用する場合、マルチスレッドは効率をあまり向上させません。逆に、スレッドの頻繁な切り替えにより効率が低下する可能性があります。マルチスレッドを使用する; IO 集中型の場合、マルチスレッド プロセスは IO ブロックを待機している間のアイドル時間を利用して他のスレッドを実行し、効率を向上させることができます。そこで、実験に基づいてさまざまなシナリオの効率を比較します
(1) 必要なモジュールを導入します
import requests import time from threading import Thread from multiprocessing import Process
(2) CPU 集中型のコンピューティング関数を定義します
def count(x, y): # 使程序完成150万计算 c = 0 while c < 500000: c += 1 x += x y += y
(3) IO 集中型のファイル読み取りおよび書き込み関数を定義します
def write(): f = open("test.txt", "w") for x in range(5000000): f.write("testwrite\n") f.close() def read(): f = open("test.txt", "r") lines = f.readlines() f.close()
(4) ネットワークリクエスト関数を定義します
_head = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'} url = "http://www.tieba.com" def http_request(): try: webPage = requests.get(url, headers=_head) html = webPage.text return {"context": html} except Exception as e: return {"error": e}
(5) IO集中型の操作、CPU集中型の操作の線形実行に必要な時間、およびネットワークリクエスト集中型の操作に必要な時間をテストします
# CPU密集操作 t = time.time() for x in range(10): count(1, 1) print("Line cpu", time.time() - t) # IO密集操作 t = time.time() for x in range(10): write() read() print("Line IO", time.time() - t) # 网络请求密集型操作 t = time.time() for x in range(10): http_request() print("Line Http Request", time.time() - t)
出力
CPU 集中型: 95.6059999466、91.57099986076355 92.52800011634827、99.96799993515015
IO 集中型: 24.25、21.76699995994568、 80926514、22.060999870300293
ネットワークリクエスト集中: 4.519999980926514、8.563999891281128、4.371000051498413、4.522000074386597、 71000003814697
(6) マルチにかかる時間をテストする-CPU 集中型の操作のスレッド同時実行
counts = [] t = time.time() for x in range(10): thread = Thread(target=count, args=(1,1)) counts.append(thread) thread.start() e = counts.__len__() while True: for th in counts: if not th.is_alive(): e -= 1 if e <= 0: break print(time.time() - t)
出力: 99.9240000248、101.26400017738342、102.32200002670288
(7) IO 集中型の操作のマルチスレッド同時実行に必要な時間をテストします
def io(): write() read() t = time.time() ios = [] t = time.time() for x in range(10): thread = Thread(target=count, args=(1,1)) ios.append(thread) thread.start() e = ios.__len__() while True: for th in ios: if not th.is_alive(): e -= 1 if e <= 0: break print(time.time() - t)
出力: 25.69700002670288、24.024000167846 68
(8) ネットワーク集中型の操作のマルチスレッド同時実行に必要な時間をテストします
t = time.time() ios = [] t = time.time() for x in range(10): thread = Thread(target=http_request) ios.append(thread) thread.start() e = ios.__len__() while True: for th in ios: if not th.is_alive(): e -= 1 if e <= 0: break print("Thread Http Request", time.time() - t)
出力: 0.7419998645782471、0.3839998245239258、0.3900001049041748
(9) 複数のプロセスが CPU 集中型の操作を同時に実行するのに必要な時間をテストします
りー出力: 54.342000007629395、53.437999 963760376
(10) 複数のプロセスによる IO 集中型の操作の同時実行をテストします
counts = [] t = time.time() for x in range(10): process = Process(target=count, args=(1,1)) counts.append(process) process.start() e = counts.__len__() while True: for th in counts: if not th.is_alive(): e -= 1 if e <= 0: break print("Multiprocess cpu", time.time() - t)
出力: 12.509000062942505、13.059000015258789
(11) Http リクエスト集約型操作のマルチプロセス同時実行をテストする
t = time.time() ios = [] t = time.time() for x in range(10): process = Process(target=io) ios.append(process) process.start() e = ios.__len__() while True: for th in ios: if not th.is_alive(): e -= 1 if e <= 0: break print("Multiprocess IO", time.time() - t)
出力: 0.5329999923706055、0.4760000705718994
実験結果
上記の結果から、次のことがわかります:
複数のスレッドは IO を集中的に使用する 操作のタイプでは大きな利点はないようです (おそらく利点IO操作タスクが重い場合は反映されます) CPUを集中的に使用する操作では、シングルスレッドの線形実行よりも明らかにパフォーマンスが低下しますが、ネットワークリクエスト、ビジー待機などのスレッドをブロックする操作では、利点が得られます。マルチスレッドは非常に明白です
CPU 集中型、IO 集中型、またはネットワーク要求集中型の操作 (スレッド ブロッキング操作がよく発生します) のいずれの場合でも、複数のプロセスはパフォーマンス上の利点を発揮できます。ただし、ネットワークリクエストが集中する操作の場合、マルチスレッドとほぼ同じですが、より多くの CPU やその他のリソースを消費するため、この場合はマルチスレッドを選択して実行できます

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ホットトピック



