1
noe132 2020-08-29 12:29:29 +08:00 via Android
node 天生异步,大部分公司的业务都是 io 操作,基本很少有需要长时间占用 cpu 的业务。大家的业务基本上就是写写数据库
反倒是很多 python 写出来的后端不用协程多进程,在接口里做同步 io 数据库操作,一个请求阻塞全局 gil,并发测试响应时间上天 |
2
FreeEx 2020-08-29 12:35:41 +08:00 via iPhone
node js 搭配 python 用,也是鬼才^_^
|
3
chenqh 2020-08-29 12:46:56 +08:00
加密,
|
4
chenqh 2020-08-29 12:47:54 +08:00
但是这种情况下 python 更慢,蛇日的 python 好慢呀
|
5
dcalsky 2020-08-29 12:51:50 +08:00 via Android
用 node canvas 画图返回,python 的 pillow 太慢了。
|
6
ragnaroks 2020-08-29 12:52:42 +08:00
minecraft 服务端?
另外不要为了 node 而 node |
7
black11black 2020-08-29 13:08:24 +08:00
@noe132 有原生 IO 复用不用,非得写同步逻辑,实属倔强的公司
|
8
foam 2020-08-29 13:12:53 +08:00 via Android
图片处理,sharp 库了解一下,用的 libvips
|
9
TypeError 2020-08-29 13:17:13 +08:00 via Android
Python 跑 CPU 密集型的可以用进程池,node 应该也有类似的吧
|
10
whitehack 2020-08-29 13:22:21 +08:00
node 有 work_thread 库.cpu 密集已经不是短板了
|
11
hallDrawnel 2020-08-29 13:29:27 +08:00
很多是 node 做不好或者就直接不做不了的 CPU 密集的任务,比如:
直播视频流动态编码类型多马率、多编码的转码,要求实时,且 IO 不是瓶颈。 实时模型推理,实时排序等,主要是计算,尤其是涉及 CV 和 NLP,还有图计算的。 游戏服务器,比如帧同步模块,无锁队列(游戏的队列,比如组队、进服务器等)模块,必须在给定时间内算完,且数据一般都在同一个进程里,只有少部分数据会异步落盘。 以及数据的复杂处理等,这个看业务了,比如对大量的 data point 用特定的算法做 sampling 。 |
12
bashbot 2020-08-29 15:08:21 +08:00 1
一般遇到 CPU 密集型场景优先考虑用 C 实现,而且不会要求实时。要求实时要么堆硬件要么并发稳定,不然来个高并发波动 CPU 资源超限直接就任务超时了。
之前做过三个计算任务场景,一个是 CAD 文件解析绘图,一个是视频转码,还有个自然语言处理,前两个是用消息队列提交到任务中心排队的,最后一个控制并发量多买机器。 架构上设计好了,用不用 node.js 其实不重要,任务处理用 nodejs,java,python,C++随便什么写都可以,经常混合的。刚开始规模不大的话性能差个一两倍直接堆硬件就完了,后期有规模了才会优化。 |
13
wwqgtxx 2020-08-29 15:43:08 +08:00 via iPhone
@noe132 请问一下贵公司使用的是哪个垃圾 python 的数据库驱动,做数据库操作居然不会释放 gil 锁
|
14
otakustay 2020-08-29 16:49:28 +08:00
比如 webpack build,就是一个典型的计算密集型
|
15
dustinth 2020-08-29 17:12:44 +08:00
node.js 的强项是前后端可以用同一技术栈. 弱项是后端生态不完善, 第三方库质量参差不齐. CPU 密集型不合适我理解主要是指一些极端场景效率不高(但是我极度怀疑这些极端场景会用 node.js 来实现). 实时返回不代表要同步处理或者要在 node.js 层面处理, node.js 很多逻辑天生都是异步的, 放到 worker 中处理即可.
|
16
foxkiller 2020-08-30 01:58:43 +08:00
MCTS
|
17
zy445566 2020-10-13 09:14:44 +08:00 via Android
比如大循环 1 加到 10 亿,大递归递归版本的斐波那契
|