検索

プロセスとは何ですか?

Jul 24, 2017 pm 04:58 PM
pythonノート

基本:

プロセスとは何ですか?

各プログラムのメモリは独立しています。例: 世界は QQ にアクセスできません。

プロセス: QQ は、さまざまなリソース (メモリ管理、ネットワーク インターフェイス呼び出しなど) への呼び出しを含む、オペレーティング システム管理全体に公開されます。 QQ の開始はプロセスの開始を意味します。

スレッドとは何ですか?

スレッドとは、オペレーティング システムが計算のスケジューリングを実行できる最小単位です。 スレッドプロセスに含まれており、プロセス内の実際の操作単位です。

プロセスには少なくとも1つのスレッドがあります。

スレッドとは、プロセス内の単一の連続した制御フローを指します。

CAS のプロセスは複数のスレッドを同時に実行し、各スレッドは異なるタスクを並行して実行し、スレッドは互いに独立しています。

スレッドとプロセスの違い:

プロセス: さまざまなリソース管理の集合

スレッド: 一連の命令であるオペレーティングシステムの最小スケジューリング単位

関係:

最初のスレッドが実行されるときプロセス メインスレッド、メインスレッドは他のスレッドを作成し、他のスレッドもスレッドを作成でき、スレッドは同等です

プロセスには親プロセス、子プロセス、独立したメモリ空間、一意のプロセス識別子、pidがあります。 ;

コンテキストスイッチとは何ですか?

コンテキストスイッチングは、プロセススイッチングまたはタスクスイッチングとも呼ばれ、CPU があるプロセスまたはスレッドから別のプロセスまたはスレッドに切り替わることを指します。たとえば、次のようになります:

a. QQ と WeChat を開き、最初に QQ でチャットし、次に WeChat に切り替えてから QQ に切り替えます。この操作はコンテキスト切り替えと呼ばれます。

b. コンピューターの CPU 構成は 4 コアであり、CPU が高速に処理するため、CPU がタスクを切り替えているという感覚はありません。時間間の切り替え時に遅延はありません。

単一スレッド:

import timeimport requestsdef get_res():
    urls = ['','','','']
    start = time.time()for url in urls:print(url)
        resp = requests.get(url)print(resp)
    end = time.time()print('单线程运行时间:', end - start)

説明:

a CPU が応答を取得しない限り。 url、それ以外の場合は、次の URL は要求されません

c. ネットワーク要求には時間がかかるため、CPU はネットワーク要求の戻りを待っている間アイドル状態になります

マルチスレッド:

http://www.baidu.com<response>https://www.taobao.com/
<response>https://www.jd.com/
<response>http://www.meilishuo.com/
<response>单线程运行时间: 1.0470597743988037</response></response></response></response>

実行結果:

import timeimport threadingdef run(count):#每次执行该方法,需要休息2stime.sleep(2)print(count)#开始创建多线程start = time.time()for i in range(5):#创建线程,指定运行哪个函数,也就是指定哪个函数运行需要创建多线程#target=要运行的函数名# args=函数运行传入的参数,run方法需要传入count,把创建th = threading.Thread(target=run, args=(i, ))#启动线程    th.start()#多线程创建完毕且运行结束end = time.time()print('运行时间:', end - start)

説明:

a. 実行前に 2 秒待つ必要があるため、出力される実行時間統計はマルチスレッドの実行時間ではありません。少なくとも 2 秒、
その後、印刷結果は次のようになります。

Python ファイルを実行するときにマルチスレッドが開始されていない場合、少なくとも 1 つのスレッドが実行されているため、出力される実行時間はメインスレッドの実行時間です

スレッドは最初は互いに独立しています実行しているのはメインスレッドです。 threading.Thread に実行すると、スレッドが作成され、メインスレッドは他の処理を実行します

。終了前に終了

b . マルチスレッドで run メソッドが実行されると、最初のリクエストが完了した後に次のリクエストが作成されず、代わりにスレッドが作成されて run メソッドが実行されるため、出力されるカウント データは順序付けされていません。 、そして別のスレッドが作成されます。スレッドが実行された後、結果が表示されます c. 合計 5 つのスレッドが作成されました

マルチスレッドの合計実行時間をカウントしたい場合は、は、スレッドの作成の開始からスレッドの終了までの時間 (スレッドの実行方法を考慮する必要はありません)、操作は次のとおりです:

join() wait (スレッドが終了するのを待ちます)

运行时间: 0.0
104
2
3

実行結果:

import timeimport threadingdef run(count):#每次执行该方法,需要休息2stime.sleep(2)print(count)#开始创建多线程start = time.time()#存放创建的所有线程threads_list = []for i in range(5):#创建线程,指定运行哪个函数,也就是指定哪个函数运行需要创建多线程#target=要运行的函数名# args=函数运行传入的参数,run方法需要传入count,把创建th = threading.Thread(target=run, args=(i, ))#启动线程    th.start()#把启动的每一个线程添加到线程组内    threads_list.append(th)for t in threads_list:#主线程循环等待每个子线程运行完毕, t代表每个子线程t.join()  #等待线程结束#多线程创建完毕且运行结束end = time.time()print('运行时间:', end - start)

デーモンスレッド

デーモンスレッド: メインスレッドの実行が終了すると、デーモンの実行が終了するかどうかに関係なく、スレッドの実行が終了します。 例:

たとえば、皇帝。皇帝が亡くなると、非常に多くの召使が一緒に埋葬されます。

デーモンスレッドが終了するかどうかに関係なく、非デーモンスレッドが終了する限りプログラムは終了します

01
2
4
3运行时间: 2.0011146068573

GIL 全局解释器锁

例如 4核机器上 
Python创建4线程,四个线程均匀分到多核上,但是同时只能一核在处理数据。 
python调用操作系统、C语音的原生接口,在出口做了设置。全局解释器锁,保证数据统一 
所以有人说python的线程是假线程。 
在修改数据的时候,为了防止数据改乱了,所以多线程就变成串行处理,但是以为是python在处理,实际上是调用了操作系统的C语音的线程接口,所以中间的过程,python控制不了了,只知道结果。在这种情况下,设置的方式是出口控制,虽然四个线程,但是同一时间只有一个线程在工作。 
  
所以这算是python的一个缺陷,但是也不能说是python的缺陷,是Cpython的缺陷。因为Cpython是C语音写的,以后python的未来是PYPY。 

线程锁

线程锁,又叫互斥锁

线程之间沟通:保证同一时间只有一个线程修改数据

python2.x 中需要加锁,Python3.x中加不加锁都一样,因为解释器做了优化

import threadingfrom threading import Lock#创建lock对象num = 0
lock = Lock()   #申请一把锁,创建锁的对象def run2():global num
    lock.acquire()      #修改数据前 加锁num += 1lock.release()      #修改后释放解锁lis = []for i in range(5):#创建线程t = threading.Thread(target=run2)#启动线程    t.start()#将启动的线程添加到线程组内    lis.append(t)for t in lis:#等待线程运行结束    t.join()#num的值为5,执行多次后,会出现不一样的值print('over', num)

RLock 递归锁

大锁中还有小锁、递归锁,解锁时就混了,所以用递归锁,Rlock()

import threading,timedef run1():print("grab the first part data")
    lock.acquire()global num
    num +=1lock.release()return numdef run2():print("grab the second part data")
    lock.acquire()global  num2
    num2+=1lock.release()return num2def run3():
    lock.acquire()
    res = run1()print('--------between run1 and run2-----')
    res2 = run2()
    lock.release()print(res,res2)if __name__ == '__main__':

    num,num2 = 0,0
    lock = threading.RLock()  # 声明递归锁# lock = threading.Lock() # 用互斥锁,会锁死了,弄混锁情况,可以试一下for i in range(10):
        t = threading.Thread(target=run3)
        t.start()while threading.active_count() != 1:print(threading.active_count())else:print('----all threads done---')print(num,num2)

 多线程的另一种写法:

import threadingimport timeclass MyThread(threading.Thread):def __init__(self, num):
        threading.Thread.__init__(self)
        self.num = numdef run(self):  # 定义每个线程要运行的函数print("running on number:%s" % self.num)
        time.sleep(3)if __name__ == '__main__':
    t1 = MyThread(1)
    t2 = MyThread(2)
    t1.start()
    t2.start()

多进程(了解即可):

python里面的多线程,是不能利用多核cpu的,如果想利用多核cpu的话,就得使用多进程

多进程适用CPU密集型任务

多线程适用io密集型任务

from multiprocessing import Processdef f(name):
    time.sleep(2)print('hello', name)if __name__ == '__main__':for i in range(10):
        p = Process(target=f, args=('niu',))
        p.start()

以上がプロセスとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Pythonと時間:勉強時間を最大限に活用するPythonと時間:勉強時間を最大限に活用するApr 14, 2025 am 12:02 AM

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

Python:ゲーム、GUIなどPython:ゲーム、GUIなどApr 13, 2025 am 12:14 AM

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

Python vs. C:比較されたアプリケーションとユースケースPython vs. C:比較されたアプリケーションとユースケースApr 12, 2025 am 12:01 AM

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間のPython計画:現実的なアプローチ2時間のPython計画:現実的なアプローチApr 11, 2025 am 12:04 AM

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Python:主要なアプリケーションの調査Python:主要なアプリケーションの調査Apr 10, 2025 am 09:41 AM

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間でどのくらいのPythonを学ぶことができますか?2時間でどのくらいのPythonを学ぶことができますか?Apr 09, 2025 pm 04:33 PM

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター