
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
可扩展性是程序员在开发软件的时候需要考虑到的一个软件开发需求,下面我们就通过案例分析来了解一下,python编程可扩展性实现方法。
如果同步服务器同时收到100个请求,想一下会发生什么。这个服务器同时多只能处理4个请求,因此大部分请求会停留在一个队列中等待,直到它们被分配一个worker。
与之形成对比的是,异步服务器会立即创建100个任务(或者使用混合模式的话,在4个异步worker上每个创建25个任务)。使用异步服务器,所有请求都会立即开始处理而不用等待(尽管公平地说,这种方案也还会有其它瓶颈会减慢速度,例如对活跃的数据库连接的限制)。
如果这100个任务主要使用CPU,那么同步和异步方案会有相似的性能,因为每个CPU运行的速度是固定的,Python执行代码的速度总是相同的,应用程序要完成的工作也是相同的。但是,如果这些任务需要做很多I/O操作,那么同步服务器只能处理4个并发请求而不能实现CPU的高利用率。而另一方面,异步服务器会更好地保持CPU繁忙,因为它是并行地运行所有这100个请求。
你可能会想,为什么你不能运行100个同步worker,那样,这两个服务器就会有相同的并发能力。要注意,每个worker需要自己的Python解释器以及与之相关联的所有资源,再加上一份单独的应用程序拷贝及其资源。你的服务器和应用程序的大小将决定你可以运行多少个worker实例,但通常这个数字不会很大。另一方面,异步任务非常轻量,都运行在单个worker进程的上下文中,因此具有明显优势。
综上所述,只有如下场景时,我们可以说异步可能比同步快:
存在高负载(没有高负载,访问的高并发性就没有优势)
任务是I/O绑定的(如果任务是CPU绑定的,那么超过CPU数目的并发并没有帮助)
你查看单位时间内的平均请求处理数。如果你查看单个请求的处理时间,你不会看到有很大差别,甚至异步可能更慢,因为异步有更多并发的任务在争夺CPU。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。