更新時間:2023-07-10 來源:黑馬程序員 瀏覽量:
在Python中,"并發(fā)"和"并行"是兩個相關但不同的概念。
并發(fā) (Concurrency) 是指程序的設計方式,允許多個任務在重疊的時間段內執(zhí)行。雖然在同一時刻只能執(zhí)行一個任務,但任務之間可以通過切換上下文來實現交替執(zhí)行。這種交替執(zhí)行的方式可以提高程序的響應性和效率,尤其是在處理I/O密集型任務時。在并發(fā)編程中,任務之間通常是獨立的,它們可以通過多線程、多進程、協(xié)程或異步編程等方式來實現。
并行 (Parallelism) 是指多個任務同時執(zhí)行的能力。在并行編程中,多個任務真正地同時執(zhí)行,通常需要多個物理或邏輯處理單元(例如多核CPU)。并行執(zhí)行任務可以顯著提高計算密集型任務的性能,但對于I/O密集型任務則沒有明顯的優(yōu)勢。
接下來我們看一段簡單的代碼演示,演示了并發(fā)和并行的概念:
import time import concurrent.futures # 并發(fā)執(zhí)行任務 def task(name): print(f'Task {name} started') time.sleep(2) # 模擬任務執(zhí)行時間 print(f'Task {name} completed') # 并行執(zhí)行任務 def parallel_task(name): print(f'Task {name} started') time.sleep(2) # 模擬任務執(zhí)行時間 print(f'Task {name} completed') # 并發(fā)示例 with concurrent.futures.ThreadPoolExecutor() as executor: tasks = ['A', 'B', 'C'] executor.map(task, tasks) # 并發(fā)執(zhí)行任務 # 并行示例 with concurrent.futures.ProcessPoolExecutor() as executor: tasks = ['X', 'Y', 'Z'] executor.map(parallel_task, tasks) # 并行執(zhí)行任務
在上面的示例中,'task'函數模擬了一個耗時2秒的任務,并使用線程池實現了并發(fā)執(zhí)行。'parallel_task'函數也是一個耗時2秒的任務,但使用了進程池實現了并行執(zhí)行。我們可以運行這段代碼,觀察任務執(zhí)行的順序和時間,以更好地理解并發(fā)和并行的區(qū)別。