你遇到过哪些业务场景,可以通过 node.js 实现,却是 CPU 密集型场景,并且可能需要实时返回的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
number
V2EX    Node.js

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

  •  
  •   number 2020-08-29 11:45:20 +08:00 via Android 4387 次点击
    这是一个创建于 1940 天前的主题,其中的信息可能已经有所发展或是发生改变。
    /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,并发测试响应时间上天
    dushixiang
        2
    dushixiang  
       2020-08-29 12:35:41 +08:00 via iPhone
    node js 搭配 python 用,也是鬼才^_^
    simple2025
        3
    simple2025  
       2020-08-29 12:46:56 +08:00
    加密,
    simple2025
        4
    simple2025  
       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
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2482 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 05:47 PVG 13:47 LAX 21:47 JFK 00:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86