lazyczx 最近的时间轴更新
lazyczx

lazyczx

V2EX 第 465939 号会员,加入于 2020-01-20 01:04:44 +08:00
lazyczx 最近回复了
10 天前
回复了 lazyczx 创建的主题 问与答 关于 Promise 添加 microTask 时机的问题
嗯?什么玩意儿 v2 的回复区不支持 md 吗?上面的代码和链接都有问题喂?
10 天前
回复了 lazyczx 创建的主题 问与答 关于 Promise 添加 microTask 时机的问题
@iceprosurface
@mc2tap
@NoManPlay

> iceprosurface:我记得理论上 Promise.resolve().then 的回调函数会在当前同步代码执行完毕后加入微任务队列的。

是因为 then 和 resolve() 是处于同一块同步代码,resolve 的时候本来可以添加 microtask 的,但是由于 then 还没有被执行所以没有 task 可以添加。

> iceprosurface:至于 console 1212 因为 await 的原因应该是要等到整个微任务队列清空以后才会执行的吧,这种代码我觉得纯 八股文,如果要保证时序,应该从业务考虑

不是因为 await 的原因,await 我觉得其实就是将当前任务的后续代码包裹成一个 callback 然后用 then 调用了(可能说法有错误),我觉得也不算八股文吧,至少让我搞清楚了 Promise 原理,下次用 Promise 会更有底气不出错,我感觉这样至少心理上挺爽的哈哈。

> NoManPlay: Promise 本身是宏任务,要执行完同步任务和微任务后再执行.then/await

我认为 new Promise 的 executer 是同步代码,await 是语法糖,将代码包装成 .then 的回调函数,然后当 Promise resolve 的时候会将已经存在的 onFulfilleds 或者 onRejects 添加为 microtask ,全部过程中我不知道哪个是宏任务,不在认知中

> mc2tap:自己照着 Promise A+实现一遍 Promise 就知道了

我看了,但是水平有限最终还是去看别人的实现了,但是看了半天也没关联到这个问题的具体答案,我后面又遇到一个问题,[去 StackOverflow 上问了]( https://stackoverflow.com/questions/79455607/when-does-promise-resolve-reject-actually-add-a-micro-task#comment140127364_79455607),然后连带着这个问题也知道答案了,其实就是 resolve 的时候还没有注册回调函数,所以导致无任务可以添加,直到执行了 then 才添加了任务,被回答者的说法点拨了,我惊觉后回来看这个帖子的问题,答案也是相同的。


我添加了 setTimeout ,延后了 resolve 和 addMicro 的执行之后,添加 microtask 的次序就按照我想的来了:

```js
const delay = async (time) => {
return new Promise((resolve) => setTimeout(resolve, time));
};

const busy = (time) => {
const now = new Date();
while (new Date() - now < time) {}
};

const getNum = () => {
console.log("getnum 执行");
return new Promise(async (resolve, reject) => {
console.log("promise 开始");
setTimeout(() => {
resolve(1);
addMicro("haha");
});
console.log("promise 结束");
});
};
const addMicro = (str) => {
Promise.resolve().then(() => {
console.log(`micro task ${str}`);
});
};

getNum().then(() => {
console.log("1212");
});
···

这个代码是先输出 1212 再输出 micro task haha 的
313 天前
回复了 lazyczx 创建的主题 问与答 大家有没有好用的背包 or 挎包推荐啊?
@Marelbruim
我高中的时候就背这个牌子,到现在了还没坏,但是我买的太单薄了,背书合适,但是感觉笔记本在里面可能会形变或者磕到什么的,总之还是太单薄了=ω=。
314 天前
回复了 lazyczx 创建的主题 MySQL 在看《高性能 MySQL》第 3 版,有点问题想问
@keakon o 仔细看了下英文。。确实。。= =抱歉问了个蠢问题
314 天前
回复了 lazyczx 创建的主题 MySQL 在看《高性能 MySQL》第 3 版,有点问题想问
@Flourite
看了下,确实好东西。。。越来越怀疑我手上这本是不是已经太过时了。看这本书的时候看到和我网上搜出来,问 GPT 问出来的结论不一样的描述了已经。。

没解决的幻读是不是这两种:
- 事务 A 先快照读,读出 empty set ,事务 B 插入数据,事务 A 再 update 这个数据,然后再快照读,就能读出来这个数据了。这个情况下预期的应该是无法 update 也无法读出来才对。
- T1 时刻,事务 A 执行快照读,读出 3 条,T2 ,事务 B 插入一条记录,T3 ,事务 A 执行当前读,读出 4 条。这里的解决办法是再开启事务后,马上执行当前读语句。
314 天前
回复了 lazyczx 创建的主题 MySQL 在看《高性能 MySQL》第 3 版,有点问题想问
@ttoh 牛逼,这个判断确实完全解决了我的问题
314 天前
回复了 lazyczx 创建的主题 MySQL 在看《高性能 MySQL》第 3 版,有点问题想问
@keakon

> consistent read 一致读
> A read operation that uses snapshot information to present query results based on a point in time, regardless of changes performed by other transactions running at the same time. If queried data has been changed by another transaction, the original data is reconstructed based on the contents of the undo log. This technique avoids some of the locking issues that can reduce concurrency by forcing transactions to wait for other transactions to finish.
> 一种读操作,它使用快照信息基于某个时间点呈现查询结果,而不管同时运行的其他事务执行的更改如何。如果查询的数据被另一个事务更改,则根据 undo log 的内容重建原始数据。此技术通过强制事务等待其他事务完成来避免一些可能降低并发性的锁定问题。

这个重建原始数据的意思,就是找到本事务开始的时候的数据(快照)对吧?所以这一步是通过 MVCC 实现的对吧。

> MVCC
> Acronym for “multiversion concurrency control”. This technique lets InnoDB transactions with certain isolation levels perform consistent read operations; that is, to query rows that are being updated by other transactions, and see the values from before those updates occurred. This is a powerful technique to increase concurrency, by allowing queries to proceed without waiting due to locks held by the other transactions.

也就是说我这个问题的答案就是,MVCC 不仅支持向前回滚查找数据,也支持向后回滚?因为官方文档对 MVCC 的描述是 before those updates occurred ,但没有强调 transaction ID 的先后关系,就是不管哪个事务新哪个事务旧,反正都可以从 undo log 上找到当前这个事务开始的版本,取用?

但是不太懂这个描述的最后一句:强制事务等待其他事务结束,这个和我想问的问题有关系吗?

还是说这个数据快照不是通过 MVCC 实现的?
314 天前
回复了 lazyczx 创建的主题 问与答 大家有没有好用的背包 or 挎包推荐啊?
@hangbale 什么军事装备吗这是 hhh
314 天前
回复了 lazyczx 创建的主题 问与答 大家有没有好用的背包 or 挎包推荐啊?
@Shinu 那个看着太中二了哈哈哈
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2684 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 20ms · UTC 15:24 · PVG 23:24 · LAX 07:24 · JFK 10:24
Developed with CodeLauncher
♥ Do have faith in what you're doing.