序文
マルチタスクプログラミングの基本的な概念として、プロセスとスレッドの概念はとにかく避けられません。多くの企業は、面接時に2つの違いを尋ねます。インターネットでランダムに検索すると、プロセスやスレッドに関する記事が見つかりますが、読んだ後は、理解している人はうなずき、理解していない人はまだ理解していないと思います。したがって、この記事では別の方法で説明します。
コンテンツ
1.コンピュータータスクの実行
-
CPU :中央処理装置(中央処理装置、CPUと呼ばれる)はタスク実行操作に使用されます。主流のアーキテクチャにはIntelのx86とARMが含まれ、ARMは主にモバイル端末に使用されます。
-
オペレーティングシステムはCPUを呼び出してタスクを実行します
- CPUポーリング:CPUは、切り替え速度が微妙なレベルであるため、複数のタスク間で実行をすばやく切り替えます。これは、同時に複数のタスクを実行しているように見えます。
- CPUコアは、一度に1つのタスクしか実行できません。
- マルチコアCPUは、複数のシングルコアCPUの集合として理解できます。
- 並行性と並列性
- 同時実行性:同時に実行を切り替えるために複数のタスクがCPUコアに割り当てられます。この状況は同時実行性ですが、実際には複数のタスクが同時に実行されるわけではありません。
- 並列処理:複数のタスクが異なるCPUコアに割り当てられて同時に実行されます。この状況は並列処理であり、並列処理は複数のタスクの実際の同時実行です。
2.マルチタスクプログラミングとは
-
マルチタスクプログラミング:プログラムに複数のタスクを記述し、プログラムの実行中に複数のタスクを同時に実行できるようにします。
-
実装方法:マルチプロセスプログラミング、マルチスレッドプログラミング
-
マルチタスクプログラミングのメリット
- プログラムタスク間の調整を改善する
- コンピュータリソースを最大限に活用し、プログラムタスクの実行効率を向上させます
。
3.プロセスプロセス
- プログラムは、ディスクに静的に保存される実行可能ファイルです。
- プロセスは、コンピューターの操作リソースを占有し、独自のライフサイクルを持つ動的なプロセス記述です。
。
トライステートを処理する
- 準備完了:プロセスには実行条件があり、システムスケジューリングがリソースを割り当てるのを待機しています
- 実行中:プロセスはCPUを占有して実行します
- 待機中:プロセスはブロックして待機し、CPUリソースを放棄します
メインクラスと関数の使用法
**プロセス:**プロセスオブジェクトを作成します
** target:**バインディング実行のターゲット関数
** args(タプル):**パラメーターをターゲット関数の位置に渡します
** kwargs(辞書):**パラメーターをターゲット関数のキー値に渡します
** start():**プロセスを開始します
使用プロセス
モジュール:マルチプロセッシング
ステップの作成
1.新しいプロセスの実行を必要とするイベントを関数にカプセル化します
2.モジュールのProcessクラスを介してプロセスオブジェクトと関連関数を作成します
3.プロセスオブジェクトを介してプロセス情報と属性を設定します
4.プロセスオブジェクトでstartを呼び出してプロセスを開始します
5.プロセスオブジェクトでjoinを呼び出して、リソースをリサイクルします
#导入模块 multiprocessing
import multiprocessing
from time import sleep
#创建进程执行函数
def fun():
print('子进程函数开始执行...')
sleep(2)
print('子进程函数执行完成...')
#windows系统必须把子进程相关代码放入if下,linux则不用
if __name__=='__main__':
#创建进程对象
p = multiprocessing.Process(target=fun)
#启动子进程,进程被诞生并执行fun函数内容
p.start()
#主线程执行任务模拟
print('主进程函数开始执行...')
sleep(3)
print('主进程函数执行完成...')
#等待回收
p.join()
4.スレッド
4.1.1スレッドの概要
スレッドとは何
- スレッドは軽量プロセスとも呼ばれ、マルチタスクプログラミングの方法でもあります。
- また、コンピューターのマルチCPUリソースを利用することもできます
- スレッドは、プロセスで再度開かれるブランチタスクとして理解できます。
スレッドの特性
- プロセスには複数のスレッドを含めることができます
- スレッドは、コンピューターリソースを消費する実行動作でもあります
- プロセス内のすべてのスレッドは、プロセスのリソースを共有します
- 複数のスレッドの操作は相互に影響しません
- スレッドはプロセスよりもはるかに少ないリソースを消費します
。
スレッドのプロパティ
- スレッド名を設定しますsetName()
- スレッド名を取得しますgetName()
- スレッドの存続期間がis_alive()であるかどうかを確認します
- デーモンプロパティを設定しますsetDaemeon()
- aemonプロパティの表示isDaemon()
- deamonがTrueの場合、メインスレッドはブランチスレッドを終了し、また終了します。これは開始前に設定され、結合と同時に使用されません。
import threading
from time import sleep
#线程函数
def write():
for i in range(3):
sleep(3)
print('正在写作!')
#创建线程对象
t = threading.Thread(target=write)
#启动线程
t.start()
#回收线程
t.join()