Warning: Undefined global variable $debug in /var/www/ourcoders/tiny4cocoa/application/controllers/baseController.php on line 124
有个梨UGlee 2019-12-28 01:07:34 发布的技术动态 - OurCoders (我们程序员)
有个梨UGlee
2019-12-28 01:07:34 发布
说一下为什么我认为promise/async不能作为并发主力。

promise/async本质上一样。如果我们把系统的计算资源看作有限资源时,会发现promise/async是一个push machine,即有服务和计算请求时立刻开始执行;这个做法在可以水平扩展且以数据库作为共享资源(和持久化)的backend时,可行。

但是反过来说,你会发现这种随意分配计算资源的情况对于有限资源模型来说是不成立的。

想想操作系统内核,无论算力、io、还是网络带宽,都有fairness需求,不可能应为一个密集计算请求就把系统都hang住;当然在内核里做调度有一定的便利性,userspace任务都可以被抢先;但是这不意味着资源分配在userspace就不该做了,如果不做,系统的可用性会出问题;

同样的,在一些特定场景下,对priority可能会需要调整,一些情况下是某些任务天生比另外一些需要service,另外一些情况下,可能期望short job first以获得最低平均等待时间,无论那个,一个任务调度器都是不可少的。

++++

本质上这是流式处理的push模型还是pull模型,pull模型也可以称为是lazy的,任务都堆在队列里等着执行器来取;如果要保证有限资源下,系统的可用性或者部分可用性,最终一定会进化成这种设计,换句话说如果完全基于promise/async实现,当资源不足时,基本上需要全部重写才能获得这种调度能力保障可用性。

++++

在云计算上这个不是问题,但是对iot或者边缘计算,这是个大问题。