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