当前位置: 首页 > news >正文

珠海的网站建设大型商城购物平台开发

珠海的网站建设,大型商城购物平台开发,wordpress图片轮播,电脑做网站用word简介 并发(Concurrency):多个任务交替执行(宏观上同时进行,微观上交替处理),适合 I/O 密集型任务(如网络请求、文件读写)。并行(Parallelism)&…

简介

  • 并发(Concurrency):多个任务交替执行(宏观上同时进行,微观上交替处理),适合 I/O 密集型任务(如网络请求、文件读写)。
  • 并行(Parallelism):多个任务真正同时执行(需多核 CPU 支持),适合 CPU 密集型任务(如数据计算、图像处理)。

多线程(Threading)

线程是进程内的执行单元,共享进程内存空间,切换成本低。

特点

  • 共享内存:线程间可直接共享变量(需注意同步问题)。
  • GIL 限制:Python 的全局解释器锁(GIL)导致同一时刻只有一个线程执行 Python 字节码,多线程无法利用多核 CPU(对 CPU 密集型任务效率低)。
  • 适用场景:I/O 密集型任务(如爬虫、网络服务)。

基本用法

import threading
import timedef task(name):print(f"任务 {name} 开始")time.sleep(2)  # 模拟 I/O 操作print(f"任务 {name} 结束")# 创建线程
t1 = threading.Thread(target=task, args=("t1",))
t2 = threading.Thread(target=task, args=("t2",))# 启动线程
t1.start()
t2.start()# 等待线程结束
t1.join()
t2.join()print("所有任务完成")

线程同步

Lock:互斥锁,确保同一时间只有一个线程访问共享资源。

lock = threading.Lock()
count = 0def increment():global countwith lock:  # 自动获取和释放锁count += 1# 多线程调用 increment() 不会出现计数错误

多进程(Multiprocessing)

进程是独立的内存空间,由操作系统调度,可利用多核 CPU。

特点

  • 独立内存:进程间不共享内存,通信需用特定机制(如队列、管道)。
  • 无 GIL 限制:多进程可真正并行执行,充分利用多核 CPU。
  • 适用场景:CPU 密集型任务(如数据分析、复杂计算)。
  • 缺点:创建和切换成本高,内存占用大。

基本用法

import multiprocessing
import timedef task(name):print(f"任务 {name} 开始")time.sleep(2)  # 模拟计算print(f"任务 {name} 结束")if __name__ == "__main__":  # 多进程必须在 main 模块中启动p1 = multiprocessing.Process(target=task, args=("p1",))p2 = multiprocessing.Process(target=task, args=("p2",))p1.start()p2.start()p1.join()p2.join()print("所有任务完成")

进程通信

q = multiprocessing.Queue()def producer():q.put("数据")def consumer():data = q.get()print(data)# 启动生产者和消费者进程

协程(Coroutine)

协程是轻量级线程(用户态线程),由程序主动控制切换,切换成本极低。

特点

  • 单线程内执行:所有协程在一个线程内交替运行,无需线程切换开销。
  • 主动切换:通过 await 关键字主动让出 CPU,适合 I/O 等待时切换。
  • 适用场景:高并发 I/O 密集型任务(如异步 Web 框架、高并发爬虫)。

基本用法(Python 3.5+ async/await 语法)

import asyncio
import timeasync def task(name):print(f"任务 {name} 开始")await asyncio.sleep(2)  # 模拟 I/O 操作(非阻塞)print(f"任务 {name} 结束")async def main():# 并发执行两个任务await asyncio.gather(task("c1"),task("c2"))# 运行事件循环
asyncio.run(main())
print("所有任务完成")

核心原理

  • 事件循环(Event Loop):调度协程执行,当一个协程 await 时,事件循环切换到其他就绪协程。
  • 非阻塞 I/O:协程的 I/O 操作(如网络请求)需使用异步库(如 aiohttp 而非 requests)。

线程池与进程池

频繁创建 / 销毁线程 / 进程会消耗资源,池化技术可复用资源,提高效率。

线程池(concurrent.futures.ThreadPoolExecutor)

from concurrent.futures import ThreadPoolExecutor
import timedef task(name):print(f"任务 {name} 开始")time.sleep(2)return f"任务 {name} 结果"# 创建线程池(最多 3 个线程)
with ThreadPoolExecutor(max_workers=3) as executor:# 提交任务futures = [executor.submit(task, f"t{i}") for i in range(5)]# 获取结果for future in futures:print(future.result())

进程池(concurrent.futures.ProcessPoolExecutor)

from concurrent.futures import ProcessPoolExecutor
import timedef task(name):print(f"任务 {name} 开始")time.sleep(2)return f"任务 {name} 结果"if __name__ == "__main__":# 创建进程池(最多 2 个进程)with ProcessPoolExecutor(max_workers=2) as executor:futures = [executor.submit(task, f"p{i}") for i in range(4)]for future in futures:print(future.result())

池的优势

  • 减少创建 / 销毁线程 / 进程的开销。
  • 控制并发数量,避免资源耗尽。
  • 简化任务提交和结果获取流程。

选择

在这里插入图片描述
选择建议:

  1. I/O 密集型任务(如爬虫、API 调用):
    • 优先用 协程(最高效,适合超大规模并发)。
    • 其次用 线程池(实现简单,适合中等规模并发)。
  2. CPU 密集型任务(如数据计算):
    • 必须用 进程池(利用多核 CPU,避免 GIL 限制)。
  3. 混合任务:
    • 结合使用(如多进程 + 协程,进程利用多核,协程处理每个进程内的 I/O)。
http://www.dtcms.com/a/568206.html

相关文章:

  • o2o家电维修网站开发开发网站开票名称是什么
  • 大学网站栏目建设重庆营销型网站建设多少钱
  • 网站的首页怎么做做电脑网站宽度
  • dede网站模板免费下载吴江做网站
  • 泸州市建设工程质量监督站网站电子商务网站优化方案
  • saas建站源码下载便宜网站建设哪家好
  • 东莞做网站公司排名电子商务网站的基本流程
  • 优秀网站及网址做yy头像的网站
  • 网站建设属于哪种公司济南网站seo
  • 门户网站建设情况企业管理系统哪家好
  • 有关网站建设的标题seo网站程序
  • 大连网站制作.net网站有几个后台
  • 网站关键词的优化在哪做重庆市建立网站的网络公司
  • 企业网站设计论文西安医院网站建设
  • 论坛类网站搭建湖南网站建设公司 地址磐石网络
  • 优秀的手机网站案例wordpress主页一个静态页面
  • 设计高端网站哪家好有哪些网站可以做淘宝客
  • 机关网站建设个人简历网站开发
  • ip子域名大全手机优化软件排行
  • 网站别人给我做的备案 我能更改吗下列关于网站开发中网页额
  • 沈阳做网站价格装修公司网站建设方案
  • 滁州网站seo深圳协会网站建设
  • 空间除了可以做网站还能干什么南京关键词优化服务
  • 泉州专业网站制作公司网站专题页是什么
  • 邯郸wap网站建设公司WordPress搜索功能增强
  • 网站设计毕业设计任务书深圳专业做网站哪家好
  • 新网站百度多久收录网站建设预算表格
  • 仿织梦小说网站源码网站系统分析报告
  • 网站开发的交付文档山西住房和城乡建设部网站
  • 如何设计网站网站建设实训结论与分析总结