网站打开403,中国科协网站建设招标,上海闵行区邮编,网站版面1、前言 1.1 计算密集型、IO密集型 python因为自身的GIL的问题导致并发不能像java和C一样#xff0c;但并不是说Python不能实现并发。常见的有两种#xff1a;
计算密集型 IO密集型 计算密集型 计算密集型任务的特点是要进行大量的计算#xff0c;消耗CPU资源#xff0c;比…1、前言 1.1 计算密集型、IO密集型 python因为自身的GIL的问题导致并发不能像java和C一样但并不是说Python不能实现并发。常见的有两种
计算密集型 IO密集型 计算密集型 计算密集型任务的特点是要进行大量的计算消耗CPU资源比如计算圆周率、对视频进行高清解码等等全靠CPU的运算能力。这种计算密集型任务虽然也可以用多任务完成但是任务越多花在任务切换的时间就越多CPU执行任务的效率就越低所以要最高效地利用CPU计算密集型任务同时进行的数量应当等于CPU的核心数。
计算密集型任务由于主要消耗CPU资源因此代码运行效率至关重要。Python这样的脚本语言运行效率很低完全不适合计算密集型任务。对于计算密集型任务最好用C语言编写。
IO密集型 第二种任务的类型是IO密集型涉及到网络、磁盘IO的任务都是IO密集型任务这类任务的特点是CPU消耗很少任务的大部分时间都在等待IO操作完成因为IO的速度远远低于CPU和内存的速度。对于IO密集型任务任务越多CPU效率越高但也有一个限度。常见的大部分任务都是IO密集型任务比如Web应用。
IO密集型任务执行期间99%的时间都花在IO上花在CPU上的时间很少因此用运行速度极快的C语言替换用Python这样运行速度极低的脚本语言完全无法提升运行效率。对于IO密集型任务最合适的语言就是开发效率最高代码量最少的语言脚本语言是首选C语言最差。
异步IO 考虑到CPU和IO之间巨大的速度差异一个任务在执行的过程中大部分时间都在等待IO操作单进程单线程模型会导致别的任务无法并行执行因此我们才需要多进程模型或者多线程模型来支持多任务并发执行。
现代操作系统对IO操作已经做了巨大的改进最大的特点就是支持异步IO。如果充分利用操作系统提供的异步IO支持就可以用单进程单线程模型来执行多任务这种全新的模型称为事件驱动模型Nginx就是支持异步IO的Web服务器它在单核CPU上采用单进程模型就可以高效地支持多任务。在多核CPU上可以运行多个进程数量与CPU核心数相同充分利用多核CPU。由于系统总的进程数量十分有限因此操作系统调度非常高效。用异步IO编程模型来实现多任务是一个主要的趋势。
1.2 同步和异步 同步是指完成事务的逻辑先执行第一个事务如果阻塞了会一直等待直到这个事务完成再执行第二个事务顺序执行 异步是和同步相对的异步是指在处理调用这个事务的之后不会等待这个事务的处理结果直接处理第二个事务去了通过状态、通知、回调来通知调用者处理结果
异步实践
import logging;logging.basicConfig(levellogging.INFO)import asyncio,os,json,time
from datetime import datetime
from aiohttp import webdef index(request):return web.Response(bodybh1welcome/h1,content_typetext/html)async def init(loop):host 127.0.0.1port 8081app web.Application()app.router.add_route(GET, /, index)apprunner web.AppRunner(app)await apprunner.setup()srv await loop.create_server(apprunner.server, host, port)logging.info(server started at %s:%d... % (host, port))return srvloop asyncio.new_event_loop()
loop.run_until_complete(init(loop))
loop.run_forever()