V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  wefgonujnopu  ›  全部回复第 2 页 / 共 4 页
回复总数  70
1  2  3  4  
@lizhenda 这么巧,还真有人问过,这个确实不难,只要理解透彻 promise 的都能回答出来,不过貌似 v2 很多人不会,一堆人嘲讽
@xz410236056 很多人看来无意义就是无意义吗,我觉得有意义,而且手写 promise 比这个难多了,面试也会问 js 的宏任务微任务执行过程,是很常见的问题
@deadpl 是没关系,python 只是为了对比,正常语言都是这样的,但是 js 的就和 await 有关系,所以 js 不正常
@lnbiuc 确实没有场景,因为是 await 原理探讨,手写 promise 也没有场景,b 站这个教程视频一堆人看呢,场景就是面试会问,除此之外没有任何场景
@uchihaObito 你这个就是死循环了,阻塞线程的,sleep 过程中,进程直接卡死,所有异步任务停滞,而且 CPU 占用飙升
@EgoTao 不会爆的本质是创建了微任务,而不是 GC 了,因为使用了 await,把下方的代码都包装为任务函数,添加到队列中稍后执行了,如果 GC 了,内存是不会溢出的,运行可以发现内存爆满,一瞬间几个 G ,业务中确实不会写出这种代码,因为不好维护,没意义,上面说了纯粹兴趣而已,就跟手写 apply call bind 和 promise 一样,也是面试题,但是实际项目不可能自己手写
@sss393 js 主要是历史遗留问题,刚开始是 promise 先出现,await async 还没有,后面出了,不过实现方式是语法糖,本质上还是 promise,就跟继承和 class 一样,本质都是 function,压根没有 class,类似的问题还有很多,比如 undefined 可以作为关键词,let undefined = 0 都可以,所以实际项目如果要写 undefined,规范点都会让你写 void 0
48 天前
回复了 yujianwjj 创建的主题 Python go 转 Python 的心智负担增加
python 动态类型确实不适合写大项目,异常的话,如果数据格式确保百分百不会问题,就不需要处理,如果是 IO 函数,处理文件 IO 或者网络 IO ,统一 try,一般出现错误的基本都是这些操作
@chesha1 你这函数貌似有问题,我试了 node22 运行立马就结束了,
@journalistFromHK 一直都可以,任何对象上添加一个 then 方法,都可以 await
@chesha1 可以,新答案,虽然用了 promise 对象,但是是 api 间接调用的,我还不知道有这个方法呢,看了下是新出的
@kdwnil 对啊,你不知道 js 还有专门的 http 高并发优化的库吗,你小项目换语言容易,大项目可就要重构了,https://github.com/nodejs/undici
@icy37785 所以你 block 之前还要回复下吗,上面已经说了,性能比原生的 promise 还慢,你确定耐着性子看了么,还是说也是自己臆想了下自己看过了,给我整不会了
@Selenium39 面试题不都这样,比如自己实现 apply call bind 这些
@EgoTao
比如下面这个代码,去掉 await foo(),就会堆栈溢出,如果不去掉,程序会一直运行到出现 fatal error FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
···
async function foo() {
return 1
}


async function main(num = 0) {
//去掉 sleep 会堆栈溢出
await foo()
await main()

}

main()


···
@EgoTao 递归有溢出确实是常识,但是 js 代码中 await 函数就会破坏这种常识,加了就永远不会溢出
@nexo 所以手写 promise 当面试题没问题吗,手写 promise 作为面试题,代码库里面就要用手写 promise?
@horizon 测试了下,原生的 promise 反而性能更高,v8 引擎有优化,原生 promise 为 c++对象,在 nodejs 中差别很明显,原生的快 2.5 倍左右,不过浏览器里面基本没区别,所以这个只能作为兴趣研究下
@SanjinGG 所以我什么时候说系统级了,我说的是语言底层,也就是 c++层?懂? python 的协程也是单线程,为什么可以?
@SanjinGG 和 sleep 没关系,是 await 的问题,每次调用都会把 await 下方的代码创建为任务,放到任务队列中,而不是从语言底层实现异步阻塞机制
1  2  3  4  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5388 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 14ms · UTC 08:28 · PVG 16:28 · LAX 01:28 · JFK 04:28
Developed with CodeLauncher
♥ Do have faith in what you're doing.