メインコンテンツへスキップ
  1. ノート/
  2. Linux/

マルチプロセスとマルチスレッド、並行と並列

·1611 文字·4 分· loading · loading · · ·
ICE345
著者
ICE345
CS Student | System | Linux | OCaml
この記事は中国語版をもとにした日本語版メモです。コマンド、コード、数式、画像リンクは原文の意味を壊さないように保持し、説明文と見出しを日本語向けに整理しています。

1. 多プロセス (Multiprocessing)
#

:假设你必要进行大量的ファイル处理任务,比如读取多个ファイル、处理内容并写入新ファイル。

  • 如何使用多プロセス
    • 你できます为每个ファイル作成一个独立的プロセス,每个プロセス处理一个ファイル。
    • 每个プロセス在操作システム层面上拥有独立的メモリ空间,互不干扰。
    • もし你有四核 CPU,操作システムできます将这些プロセス分配给不同的核心进行並列处理,提高效率。

实际应用:如图像处理、视频编码等计算密集型任务,它们できます通过多プロセス来分摊计算负载,每个プロセス执行不同的计算任务。

2. 多スレッド (Multithreading)
#

:你正在开发一个 web サーバー,サーバー必要同时处理多个用户的请求(比如访问不同的网页)。

  • 如何使用多スレッド
    • 每一个用户请求できます由一个スレッド来处理。所有スレッド共享サーバー的メモリ和资源,たとえば共享缓存数据。
    • スレッド间的通信和数据共享更容易(通过共享メモリ),但也必要注意同步,以避免並行問題。
    • もし是多核 CPU,多个スレッドできます同时在不同核心上执行,增强サーバー的响应能力。

实际应用:如ネットワーク服务、数据库连接池等场景,スレッド之间必要频繁的资源共享,适合使用多スレッド来处理高並行请求。

3. 並行 (Concurrency)
#

:你有一个任务是同时进行多个 I/O 操作(如ネットワーク请求、ファイル读写等),但システム只有一个 CPU 核心。

  • 如何使用並行
    • 虽然システム只有一个核心,但通过操作システム的调度,できます在短时间内交替执行多个任务。たとえば,任务 1 正在等待ネットワーク响应,操作システムできます切换到任务 2,继续执行ファイル操作。这样看起来像是同时进行,但实际上是任务间的切换。
    • 操作システム通过时间片轮转等机制,实现任务的“並行”,即在一个 CPU 上交替执行多个任务。

实际应用:如高並行的ネットワーク爬虫,爬虫必要同时发送多个请求,虽然只有一个 CPU 核心,但通过任务调度(並行)能有效地提高 I/O 操作的效率。

4. 並列 (Parallelism)
#

:假设你必要处理一个大规模的图像处理任务,比如对大量图片进行滤镜处理。

  • 如何使用並列
    • もし你的システム有多个 CPU 核心(たとえば四核),你できます将任务分成 4 个子任务,每个子任务分别在一个核心上处理不同的图片。
    • 这样所有图片的处理是同时进行的,充分利用了多核 CPU 的计算能力,显著提高处理速度。

实际应用:如深度学习模型训练、科学计算、视频渲染等场景,这些任务往往计算密集型,并且できます通过並列化加速处理过程。

並行和並列的区别つまり: 並列つまり多个任务同时进行;並行并不是多个任务同时进行,而是多个任务轮流进行,なぜなら调度得好,从而看上去是同步进行的. (==並行つまり多プロセス通过プロセス调度アルゴリズム调度从而实现的==)

まとめ:具体例子对比
#

任务类型举例:图片处理任务举例:Web サーバー举例:ネットワーク爬虫举例:科学计算
多プロセス每个プロセス处理一张图片(独立プロセス)每个用户请求一个プロセス处理(多个用户请求並列)不常见,プロセス间通信开销大每个プロセス处理一个计算任务(分布式计算)
多スレッド不适用(图片处理通常不必要共享资源)每个请求一个スレッド处理,スレッド共享数据合适,スレッド共享メモリ、频繁I/O适合计算任务的拆分(如大规模模拟)
並行不常见(计算任务通常不能並行)多个请求轮流处理(在一个核心上交替执行)多个ネットワーク请求交替执行适合 I/O 密集型任务(单核)
並列同时处理多个图片(多核 CPU)多个请求同时处理(多核 CPU)适合在多核机器上同时发起请求多个计算任务同时执行(多核 CPU)

每种方法都适用于不同的场景:多プロセス适合任务独立且计算密集型;多スレッド适合任务间必要频繁交互的场景;並行强调任务的调度和交替执行;而並列则适合计算任务的加速和负载分配。