V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
number
V2EX  ›  Node.js

你遇到过哪些业务场景,可以通过 node.js 实现,却是 CPU 密集型场景,并且可能需要实时返回的?

  •  
  •   number · 2020-08-29 11:45:20 +08:00 via Android · 3732 次点击
    这是一个创建于 1541 天前的主题,其中的信息可能已经有所发展或是发生改变。
    /t/702273

    看到上面这个问题想到。

    例如:图片复杂的裁剪合并,node.js 虽有相关的库,但是实现的功能不多。一般我们会把任务放进队列,后端用 python 实现相应的功能,并且也不要求实时性。

    大家也举例说说遇到过的业务场景,平常所说的“node.js 不适合 CPU 密集型的应用场景”,到底是哪些场景?

    更多的有可能 node.js 的生态并不是很完善。
    17 条回复    2020-10-13 09:14:44 +08:00
    noe132
        1
    noe132  
       2020-08-29 12:29:29 +08:00 via Android
    node 天生异步,大部分公司的业务都是 io 操作,基本很少有需要长时间占用 cpu 的业务。大家的业务基本上就是写写数据库

    反倒是很多 python 写出来的后端不用协程多进程,在接口里做同步 io 数据库操作,一个请求阻塞全局 gil,并发测试响应时间上天
    FreeEx
        2
    FreeEx  
       2020-08-29 12:35:41 +08:00 via iPhone
    node js 搭配 python 用,也是鬼才^_^
    chenqh
        3
    chenqh  
       2020-08-29 12:46:56 +08:00
    加密,
    chenqh
        4
    chenqh  
       2020-08-29 12:47:54 +08:00
    但是这种情况下 python 更慢,蛇日的 python 好慢呀
    dcalsky
        5
    dcalsky  
       2020-08-29 12:51:50 +08:00 via Android
    用 node canvas 画图返回,python 的 pillow 太慢了。
    ragnaroks
        6
    ragnaroks  
       2020-08-29 12:52:42 +08:00
    minecraft 服务端?

    另外不要为了 node 而 node
    black11black
        7
    black11black  
       2020-08-29 13:08:24 +08:00
    @noe132 有原生 IO 复用不用,非得写同步逻辑,实属倔强的公司
    foam
        8
    foam  
       2020-08-29 13:12:53 +08:00 via Android
    图片处理,sharp 库了解一下,用的 libvips
    TypeError
        9
    TypeError  
       2020-08-29 13:17:13 +08:00 via Android
    Python 跑 CPU 密集型的可以用进程池,node 应该也有类似的吧
    whitehack
        10
    whitehack  
       2020-08-29 13:22:21 +08:00
    node 有 work_thread 库.cpu 密集已经不是短板了
    hallDrawnel
        11
    hallDrawnel  
       2020-08-29 13:29:27 +08:00
    很多是 node 做不好或者就直接不做不了的 CPU 密集的任务,比如:
    直播视频流动态编码类型多马率、多编码的转码,要求实时,且 IO 不是瓶颈。
    实时模型推理,实时排序等,主要是计算,尤其是涉及 CV 和 NLP,还有图计算的。
    游戏服务器,比如帧同步模块,无锁队列(游戏的队列,比如组队、进服务器等)模块,必须在给定时间内算完,且数据一般都在同一个进程里,只有少部分数据会异步落盘。
    以及数据的复杂处理等,这个看业务了,比如对大量的 data point 用特定的算法做 sampling 。
    bashbot
        12
    bashbot  
       2020-08-29 15:08:21 +08:00   ❤️ 1
    一般遇到 CPU 密集型场景优先考虑用 C 实现,而且不会要求实时。要求实时要么堆硬件要么并发稳定,不然来个高并发波动 CPU 资源超限直接就任务超时了。
    之前做过三个计算任务场景,一个是 CAD 文件解析绘图,一个是视频转码,还有个自然语言处理,前两个是用消息队列提交到任务中心排队的,最后一个控制并发量多买机器。
    架构上设计好了,用不用 node.js 其实不重要,任务处理用 nodejs,java,python,C++随便什么写都可以,经常混合的。刚开始规模不大的话性能差个一两倍直接堆硬件就完了,后期有规模了才会优化。
    wwqgtxx
        13
    wwqgtxx  
       2020-08-29 15:43:08 +08:00 via iPhone
    @noe132 请问一下贵公司使用的是哪个垃圾 python 的数据库驱动,做数据库操作居然不会释放 gil 锁
    otakustay
        14
    otakustay  
       2020-08-29 16:49:28 +08:00
    比如 webpack build,就是一个典型的计算密集型
    dustinth
        15
    dustinth  
       2020-08-29 17:12:44 +08:00
    node.js 的强项是前后端可以用同一技术栈. 弱项是后端生态不完善, 第三方库质量参差不齐. CPU 密集型不合适我理解主要是指一些极端场景效率不高(但是我极度怀疑这些极端场景会用 node.js 来实现). 实时返回不代表要同步处理或者要在 node.js 层面处理, node.js 很多逻辑天生都是异步的, 放到 worker 中处理即可.
    foxkiller
        16
    foxkiller  
       2020-08-30 01:58:43 +08:00
    MCTS
    zy445566
        17
    zy445566  
       2020-10-13 09:14:44 +08:00 via Android
    比如大循环 1 加到 10 亿,大递归递归版本的斐波那契
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1303 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:30 · PVG 01:30 · LAX 09:30 · JFK 12:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.