并发编程基础总结

Python并发编程基础主要包括以下几个方面:

  1. 多线程(threading)
  2. 多进程(multiprocessing)
  3. 协程(asyncio)
  4. 线程池和进程池
  5. 同步与异步
  6. 锁(Lock)和信号量(Semaphore)
  7. 条件变量(Condition)
  8. 队列(Queue)

首先要知道的概念:串行(可以理解为在X轴,随着时间在运行代码,一段代码结束,下一段代码继续运行),并行(可以理解为在Y轴,同一时间,多段代码同时运行,运行数量少于cpu核数),并发(XY周同时运行,指的是任务数多余 cpu 核数,通过操作系统的各种任务调度算法,实现用多个任 务“一起”执行)

多线程(threading)

import threading

def worker():
    """线程工作函数"""
    print("线程执行中...")

# 创建两个线程
t1 = threading.Thread(target=worker)
t2 = threading.Thread(target=worker)

# 启动线程
t1.start()
t2.start()

# 等待线程执行完毕
t1.join()
t2.join()

print("所有线程执行完毕")

多进程

import multiprocessing

def worker():
    """进程工作函数"""
    print("进程执行中...")

# 创建两个进程
p1 = multiprocessing.Process(target=worker)
p2 = multiprocessing.Process(target=worker)

# 启动进程
p1.start()
p2.start()

# 等待进程执行完毕
p1.join()
p2.join()

print("所有进程执行完毕")

 协程(asyncio)

import asyncio

async def worker():
    """协程工作函数"""
    print("协程执行中...")
    await asyncio.sleep(1)

# 创建事件循环
loop = asyncio.get_event_loop()

# 创建任务列表
tasks = [worker(), worker()]

# 执行任务
loop.run_until_complete(asyncio.wait(tasks))

# 关闭事件循环
loop.close()

print("所有协程执行完毕")

线程池和进程池

from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor

def worker():
    """工作函数"""
    print("工作执行中...")

# 创建线程池
with ThreadPoolExecutor(max_workers=2) as executor:
    # 提交任务
    futures = [executor.submit(worker) for _ in range(2)]
    # 等待任务完成
    for future in futures:
        future.result()

print("所有线程池任务执行完毕")

# 创建进程池
with ProcessPoolExecutor(max_workers=2) as executor:
    # 提交任务
    futures = [executor.submit(worker) for _ in range(2)]
    # 等待任务完成
    for future in futures:
        future.result()

print("所有进程池任务执行完毕")

写在最后:

进程:拥有自己独立的堆和栈,既不共享堆,也不共享栈,进程由操作系统调度;进程切 换需要的资源很最大,效率很低 线程:拥有自己独立的栈和共享的堆,共享堆,不共享栈,标准线程由操作系统调度;线 程切换需要的资源一般,效率一般(当然了在不考虑 GIL 的情况下)

协程:拥有自己独立的栈和共享的堆,共享堆,不共享栈,协程由程序员在协程的代码里 显示调度;协程切换任务资源很小,效率高

多进程、多线程根据 cpu 核数不一样可能是并行的,但是协程是在一个线程中 所以是并 发 选择技术考虑的因素:切换的效率、数据共享的问题、 数据安全、是否需要并发

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

给你给个糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值