本套课在线学习视频(网盘地址,保存到网盘即可免费观看):

 https://pan.quark.cn/s/677661ea63b3

多线程是计算机科学中的一个重要概念,用于实现程序的并发执行。本文将详细介绍多线程的基本概念,区分并行和并发两种执行方式,并讨论在Python中如何处理CPU密集型和IO密集型任务。

00:00 - 多线程与并行、并发的区别及其应用

并行与并发的区别

  • 并行:在同一时刻多个程序或操作同时运行,需要多CPU支持。
  • 并发:在同一时间段内,多个程序或操作交替执行,但CPU需要频繁地在它们之间切换。

多线程的应用

多线程适用于并发执行,特别是在IO密集型任务中,可以显著提高效率。

02:28 - 理解Python中的并发与IO密集型任务

CPU密集型任务

CPU密集型任务需要持续占用CPU资源,不适合使用多线程。

IO密集型任务

IO密集型任务如网络请求,CPU大部分时间处于空闲状态,可借助多线程提高效率。

Python中的多线程

尽管Python的CPython解释器因GIL存在无法实现真正的并行计算,但对于IO密集型任务,通过多线程仍能显著提升效率。

多进程与多线程

在需要大量计算时,多线程可能不再适用,此时应转向多进程以发挥CPU多核优势。

代码示例

多线程示例:IO密集型任务

import threading
import time

def io_bound_task(task_id):
    print(f"Task {task_id} started")
    time.sleep(2)  # Simulate IO-bound task
    print(f"Task {task_id} completed")

threads = []
for i in range(5):
    thread = threading.Thread(target=io_bound_task, args=(i,))
    threads.append(thread)
    thread.start()

for thread in threads:
    thread.join()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

多进程示例:CPU密集型任务

import multiprocessing
import time

def cpu_bound_task(task_id):
    print(f"Task {task_id} started")
    result = 0
    for i in range(10**7):
        result += i
    print(f"Task {task_id} completed")

processes = []
for i in range(5):
    process = multiprocessing.Process(target=cpu_bound_task, args=(i,))
    processes.append(process)
    process.start()

for process in processes:
    process.join()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

综合示例:混合使用多线程和多进程

import threading
import multiprocessing
import time

def io_bound_task(task_id):
    print(f"IO Task {task_id} started")
    time.sleep(2)  # Simulate IO-bound task
    print(f"IO Task {task_id} completed")

def cpu_bound_task(task_id):
    print(f"CPU Task {task_id} started")
    result = 0
    for i in range(10**7):
        result += i
    print(f"CPU Task {task_id} completed")

# Using threading for IO-bound tasks
io_threads = []
for i in range(5):
    thread = threading.Thread(target=io_bound_task, args=(i,))
    io_threads.append(thread)
    thread.start()

for thread in io_threads:
    thread.join()

# Using multiprocessing for CPU-bound tasks
cpu_processes = []
for i in range(5):
    process = multiprocessing.Process(target=cpu_bound_task, args=(i,))
    cpu_processes.append(process)
    process.start()

for process in cpu_processes:
    process.join()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.

通过这些示例代码,您可以更好地理解如何在Python中使用多线程和多进程处理不同类型的任务,从而提高程序的执行效率。