什么是进程?

进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。

它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

通俗来讲就是:一个进程就是一个程序的运行实例(详细解释就是,启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,我们把这样的一个运行环境叫进程)。

进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。

一个进程无法访问另一个进程的变量和数据结构。

如果想让一个进程访问另一个进程的资源,需要使用进程间通信(IPC)。

IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。

IPC通信介绍

什么是线程?

线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

通俗来讲就是:线程是进程的内部的一个执行序列

一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。

单线程,多线程概念

例子:

A = 1 + 2
B = 20 / 5
C = 7 * 8

拆分成4个任务

  • 任务 1 是计算 A=1+2
  • 任务 2 是计算 B=20/5
  • 任务 3 是计算 C=7*8
  • 任务 4 是显示最后计算的结果

单线程是如何执行任务的?

单线程会按照顺序分别执行这四个任务。

多线程是如何执行任务的?

多线程会分两步:

1.使用三个线程同时执行前面三个任务

2.等待第一步全部执行完毕再执行第四个显示任务

从图中可以看到,线程是依附于进程的,而进程中使用多线程并行处理能提升运算效率。

这时候就要讲讲线程安全了

简单测试你的线程是否安全:如果你的代码在多线程下执行和在单线程下执行永远都能获得一样的结果,那么你的多线程就是安全的。

如果不一致,那就可能是多线程的资源安全有问题,常见的情况如下:

1.临界资源问题(多个线程同时访问相同的资源并进行读写操作)

解决思路:互斥锁(防止多个线程同时读写某一块内存区域)

2.死锁(两个线程相互等待对方释放对象锁)

解决思路:

  • 加锁顺序:线程按照一定的顺序加锁
  • 加锁时限:线程尝试获取锁的时候加上一定的时限,超过时限则放弃对该锁的请求,并释放自己占有的锁
  • 死锁检测

好了就介绍到这里,想了解更多

面试:史上最全多线程面试题 - (锁&内存模型&线程)

浅谈linux线程模型和线程切换

进程切换与线程切换的区别?

总结进程和线程

1.进程中的任意一线程执行出错,都会导致整个进程的崩溃。

A = 1+2
B = 20/0
C = 7*8

我把上述三个表达式稍作修改,在计算 B 的值的时候,我把表达式的分母改成 0,当线程执行到 B = 20/0 时,由于分母为 0,线程会执行出错,这样就会导致整个进程的崩溃,当然另外两个线程执行的结果也没有了。

2. 线程与线程之间共享进程中的数据。

如下图所示,线程之间可以对进程的公共数据进行读写操作。

从上图可以看出,线程 1、线程 2、线程 3 分别把执行的结果写入 A、B、C 中,然后线程 2 继续从 A、B、C 中读取数据,用来显示执行结果。

3. 当一个进程关闭之后,操作系统会回收进程所占用的内存。

当一个进程退出时,操作系统会回收该进程所申请的所有资源(即使其中任意线程因为操作不当导致内存泄漏,当进程退出时,这些内存也会被正确回收)。

比如之前的 IE 浏览器,支持很多插件,而这些插件很容易导致内存泄漏,这意味着只要浏览器开着,内存占用就有可能会越来越多,但是当关闭浏览器进程时,这些内存就都会被系统回收掉。

4. 进程与进程之间的内容相互隔离。

进程隔离是为保护操作系统中进程互不干扰的技术,每一个进程只能访问自己占有的数据,也就避免出现进程 A 写入数据到进程 B 的情况。正是因为进程之间的数据是严格隔离的,所以一个进程如果崩溃了,或者挂起了,是不会影响到其他进程的。

如果进程与进程之间需要进行数据的通信,这时候,就需要使用用于进程间通信(IPC)的机制了。

白话总结:

进程是运行中的程序,线程是进程的内部的一个执行序列

进程是资源分配的单元,线程是执行行单元

进程间切换代价大,线程间切换代价小

进程拥有资源多,线程拥有资源少

多个线程共享进程的资源

如果还不懂可以在看看   进程与线程的一个简单解释

什么是协程?

协程,英文名是 Coroutine, 又称为微线程,是一种比线程更加轻量级的存在。

正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。

协程不像线程和进程那样,需要进行系统内核上的上下文切换,协程的上下文切换是由程序所控制。

这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。

想了解更多?什么是协程

什么是并发?

并发是宏观概念,我分别有任务 A 和任务 B,在一段时间内通过任务间的切换完成了这两个任务,这种情况就可以称之为并发。

并发:是指两个或多个事件可以在同一个时间间隔发生

通俗来讲就是:并发就是A先走了1秒B马上跟上

什么是并行?

并行是微观概念,假设 CPU 中存在两个核心,那么我就可以同时完成任务 A、B。同时完成多个任务的情况就可以称之为并行。

并行:是指两个或多个事件可以在同一个时刻发生

通俗来讲就是:并行就是A、B两个人并排走路

异步与同步

异步:不等任务执行完,直接执行下一个任务。

同步:一定要等任务执行完了,得到结果,才执行下一个任务。

阻塞与非阻塞

所谓阻塞,指的是阻碍堵塞。它的本意可以理解为由于遇到了障碍而造成的动弹不得。

所谓非阻塞,自然是和阻塞相对,可以理解为由于没有遇到障碍而继续畅通无阻。

与同步、异步结合

所谓同步/异步,关注的是能不能同时开工。
所谓阻塞/非阻塞,关注的是能不能动。
通过推理进行组合:
同步阻塞,不能同时开工,也不能动。只有一条小道,一次只能过一辆车,可悲的是还TMD的堵上了。
同步非阻塞,不能同时开工,但可以动。只有一条小道,一次只能过一辆车,幸运的是可以正常通行。
异步阻塞,可以同时开工,但不可以动。有多条路,每条路都可以跑车,可气的是全都TMD的堵上了。
异步非阻塞,可以工时开工,也可以动。有多条路,每条路都可以跑车,很爽的是全都可以正常通行。

回到程序里,把它们和线程关联起来

同步阻塞,相当于一个线程在等待。
同步非阻塞,相当于一个线程在正常运行。
异步阻塞,相当于多个线程都在等待。
异步非阻塞,相当于多个线程都在正常运行。

想了解更多?

【面试】迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)

上面说了这么多,就说一个白话版的

打群架

我(CPU)喊了3个人和我一起去打群架(这个 3个人的团伙  就是进程),进程好比是一个上下文,3个人之间 数据共享。

真正打的是谁?是里面的人( 也就是线程),所以线程是最基本的执行单元。

譬如3个人的团伙(这就是进程) 去打架。  对方也是3个人,那么就是1对1干了(这就是多线程操作)。

其实性能很低,完全可以先排一个人(线程)上去, 把对方打趴下后,立刻去打第二个人。 等第一个人站起来了再回过来打。
这种调度机制 ,就是协程(其实还是线程,只不过我加了技巧-调度机制)。

当一个线程(一个打手)打着打着扭在一起了, 那么这叫做阻塞。
我作为头领,可以立刻把这个打手,拉开。让他先去打弱一点的人(这叫做线程切换)。

线程和协程的区别在于:

协程是线程的一个打架技巧(调度策略),真正在干活的 永远是线程(系统根本不知道有协程的存在)。 

并发: 一个人上打A一拳,A还没缓过来,又打B一拳,B懵逼了,又打了C一拳。
看起来 仿佛在同一个时间点我打了三个人(这就是并发)。

并行: 3个人  同时出拳  打ABC ,ABC三个人同时受到一拳(这就是并行)。

同步:一个人打A,必须把A打死,才能打B 。

异步:一个人打A,A只要躺地上, 我就立刻去打B ,等A站起来,我再回头打A。

阻塞:我带3个小弟打架,我就是主线程,我打A ,发现打不过(此时就叫做阻塞)。

如果我硬着头皮打那么所有事就得等待,这叫做同步阻塞。

异步很简单,我打A打不过,我让我小弟去打A,我继续打B,小弟就是处理异步的另外一个线程,而我作为主线程是不能阻塞的,因为要打A打B打C这个过程是预先设定好的(代码里写了),小弟打A,如果打过了,我回头再来扇A一个巴掌  ,小弟打A没打过,我回头过来 向A认错(catch 了)。

好了回到javascript话题

回调函数(Callback)

回调函数应该是大家经常使用到的,以下代码就是一个回调函数的例子:

function ajax(url, succ, fail) {if (url === "/test") {if (typeof succ === "function") {return succ("succ")}}if (typeof fail === "function") {return fail("fail")}
}ajax("/test", (res)=> {console.log(res) // succ
})

但是回调函数有一个致命的弱点,就是容易写出回调地狱(Callback hell)。假设多个请求存在依赖性,你可能就会写出如下代码:

function ajax(url, succ, fail) {if (url === "/test") {if (typeof succ === "function") {return succ("succ")}}if (typeof fail === "function") {return fail("fail")}
}ajax("/test", (res)=> {console.log(res) // succajax("/test", (res)=> {console.log(res) // succajax("/test", (res)=> {console.log(res) // succ})})
})

以上代码看起来不利于阅读和维护,当然,你可能会想说解决这个问题还不简单,把函数分开来写不就得了。

function ajax(url, succ, fail) {if (url === "/test") {if (typeof succ === "function") {return succ("succ")}}if (typeof fail === "function") {return fail("fail")}
}function firstAjax() {ajax("/test", (res)=> {console.log(res) // succsecondAjax()})
}
function secondAjax() {ajax("/test", (res)=> {console.log(res) // succ})
}
ajax("/test", (res)=> {console.log(res) // succfirstAjax()
})

以上的代码虽然看上去利于阅读了,但是还是没有解决根本问题。

回调地狱的根本问题就是:

  1. 嵌套函数存在耦合性,一旦有所改动,就会牵一发而动全身
  2. 嵌套函数一多,就很难处理错误

当然,回调函数还存在着别的几个缺点,比如不能使用 try catch 捕获错误,不能直接 return。

Promise

Promise 是 ES6 新增的语法,一定程度解决了回调地狱的问题。

Promise 翻译过来就是承诺的意思,这个承诺会在未来有一个确切的答复,并且该承诺有三种状态,分别是:

 

  1. 等待中(pending)
  2. 完成了 (resolved)
  3. 拒绝了(rejected)

这个承诺一旦从等待状态变成为其他状态就永远不能更改状态了,也就是说一旦状态变为 resolved 后,就不能再次改变

let promise = new Promise((resolve, reject) => {resolve('succ')// 无效reject('reject')
})
promise.then((res) => {console.log(res) // succ
})

  当我们在构造 Promise 的时候,构造函数内部的代码是立即执行的

let promise = new Promise((resolve, reject) => {console.log('new Promise')resolve('succ')
})
promise.then((res) => {console.log(res)
})
// new Promise
// succ

Promise 实现了链式调用,也就是说每次调用 then 之后返回的都是一个 Promise,并且是一个全新的 Promise,原因也是因为状态不可变。如果你在 then 中 使用了 return,那么 return 的值会被 Promise.resolve() 包装

Promise.resolve(1).then((res) => {console.log(res)return 2 // 包装成 Promise.resolve(2)
}).then(res => {console.log(res)
})
// 1
// 2

前面都是在讲述 Promise 的一些优点和特点,其实它也是存在一些缺点的,比如无法取消 Promise,错误需要通过回调函数捕获。

Promise 凭借什么消灭了回调地狱?

什么是回调地狱

  1. 多层嵌套的问题。
  2. 每种任务的处理结果存在两种可能性(成功或失败),那么需要在每种任务执行结束后分别处理这两种可能性。

这两种问题在回调函数时代尤为突出。Promise 的诞生就是为了解决这两个问题。

解决方法

Promise 利用了三大技术手段来解决回调地狱:

  • 回调函数延迟绑定
  • 返回值穿透
  • 错误冒泡

回调函数延迟绑定

function ajax(url) {return new Promise((resolve, reject) => {if (url === "/test") {resolve("succ")} else {reject("fail")}})
}
ajax("/test").then((res) => {console.log(res) // succ
})

看到没有,回调函数不是直接声明的,而是在通过后面的 then 方法传入的,即延迟传入。这就是回调函数延迟绑定。通俗来讲就是promise有resolved、rejected这两种延迟绑定。

返回值穿透

function ajax(url) {return new Promise((resolve, reject) => {if (url === "/test") {resolve("succ")} else {reject("fail")}})
}let x = ajax("/test").then((res) => {console.log(res) // succreturn ajax("/test")
})
x.then(res => {console.log(res) // succ
})

我们会根据 then 中回调函数的传入值创建不同类型的Promise,然后把返回的 Promise 穿透到外层,以供后续的调用。这里的 x 指的就是内部返回的 Promise,然后在 x 后面可以依次完成链式调用。

这便是返回值穿透的效果

这两种技术一起作用便可以将深层的嵌套回调写成下面的形式:

function ajax(url) {return new Promise((resolve, reject) => {if (url === "/test") {resolve("succ")} else {reject("fail")}})
}ajax("/test").then((res) => {console.log(res) // succreturn ajax("/test")
}).then(res => {console.log(res) // succreturn ajax("/test")
}).then(res => {console.log(res) // succreturn ajax("/test")
}).then(res => {console.log(res)
})

错误冒泡

function ajax(url) {return new Promise((resolve, reject) => {if (url === "/test") {resolve("succ")} else {reject("fail")}})
}ajax("/test").then((res) => {console.log(res)return ajax("/test")
}).then(res => {console.log(res)return ajax("/test")
}).then(res => {console.log(res)return ajax("/test1")
}).then(res => {console.log(res)
}).catch(err => {console.log(err)
})

这样前面产生的错误会一直向后传递,被 catch 接收到,就不用频繁地检查错误了。

Promise 手写实现

// 三种状态
const PENDING = "pending";
const RESOLVED = "resolved";
const REJECTED = "rejected";
// promise 接收一个函数参数,该函数会立即执行
function MyPromise(fn) {let _this = this;_this.currentState = PENDING;_this.value = undefined;// 用于保存 then 中的回调,只有当 promise// 状态为 pending 时才会缓存,并且每个实例至多缓存一个_this.resolvedCallbacks = [];_this.rejectedCallbacks = [];_this.resolve = function (value) {if (value instanceof MyPromise) {// 如果 value 是个 Promise,递归执行return value.then(_this.resolve, _this.reject)}setTimeout(() => { // 异步执行,保证执行顺序if (_this.currentState === PENDING) {_this.currentState = RESOLVED;_this.value = value;_this.resolvedCallbacks.forEach(cb => cb());}})};_this.reject = function (reason) {setTimeout(() => { // 异步执行,保证执行顺序if (_this.currentState === PENDING) {_this.currentState = REJECTED;_this.value = reason;_this.rejectedCallbacks.forEach(cb => cb());}})}// 用于解决以下问题// new Promise(() => throw Error('error))try {fn(_this.resolve, _this.reject);} catch (e) {_this.reject(e);}
}MyPromise.prototype.then = function (onResolved, onRejected) {var self = this;// 规范 2.2.7,then 必须返回一个新的 promisevar promise2;// 规范 2.2.onResolved 和 onRejected 都为可选参数// 如果类型不是函数需要忽略,同时也实现了透传// Promise.resolve(4).then().then((value) => console.log(value))onResolved = typeof onResolved === 'function' ? onResolved : v => v;onRejected = typeof onRejected === 'function' ? onRejected : r => throw r;if (self.currentState === RESOLVED) {return (promise2 = new MyPromise(function (resolve, reject) {// 规范 2.2.4,保证 onFulfilled,onRjected 异步执行// 所以用了 setTimeout 包裹下setTimeout(function () {try {var x = onResolved(self.value);resolutionProcedure(promise2, x, resolve, reject);} catch (reason) {reject(reason);}});}));}if (self.currentState === REJECTED) {return (promise2 = new MyPromise(function (resolve, reject) {setTimeout(function () {// 异步执行onRejectedtry {var x = onRejected(self.value);resolutionProcedure(promise2, x, resolve, reject);} catch (reason) {reject(reason);}});}));}if (self.currentState === PENDING) {return (promise2 = new MyPromise(function (resolve, reject) {self.resolvedCallbacks.push(function () {// 考虑到可能会有报错,所以使用 try/catch 包裹try {var x = onResolved(self.value);resolutionProcedure(promise2, x, resolve, reject);} catch (r) {reject(r);}});self.rejectedCallbacks.push(function () {try {var x = onRejected(self.value);resolutionProcedure(promise2, x, resolve, reject);} catch (r) {reject(r);}});}));}
};
// 规范 2.3
function resolutionProcedure(promise2, x, resolve, reject) {// 规范 2.3.1,x 不能和 promise2 相同,避免循环引用if (promise2 === x) {return reject(new TypeError("Error"));}// 规范 2.3.2// 如果 x 为 Promise,状态为 pending 需要继续等待否则执行if (x instanceof MyPromise) {if (x.currentState === PENDING) {x.then(function (value) {// 再次调用该函数是为了确认 x resolve 的// 参数是什么类型,如果是基本类型就再次 resolve// 把值传给下个 thenresolutionProcedure(promise2, value, resolve, reject);}, reject);} else {x.then(resolve, reject);}return;}// 规范 2.3.3.3.3// reject 或者 resolve 其中一个执行过得话,忽略其他的let called = false;// 规范 2.3.3,判断 x 是否为对象或者函数if (x !== null && (typeof x === "object" || typeof x === "function")) {// 规范 2.3.3.2,如果不能取出 then,就 rejecttry {// 规范 2.3.3.1let then = x.then;// 如果 then 是函数,调用 x.thenif (typeof then === "function") {// 规范 2.3.3.3then.call(x,y => {if (called) return;called = true;// 规范 2.3.3.3.1resolutionProcedure(promise2, y, resolve, reject);},e => {if (called) return;called = true;reject(e);});} else {// 规范 2.3.3.4resolve(x);}} catch (e) {if (called) return;called = true;reject(e);}} else {// 规范 2.3.4,x 为基本类型resolve(x);}
}

Generator

生成器(Generator)是 ES6 中的新语法,最大的特点就是可以控制函数的执行,相对于之前的异步语法,上手的难度还是比较大的。因此这里我们先来好好熟悉一下 Generator 语法。

  1. 使用 * 表示这是一个 Generator 函数
  2. 内部可以通过 yield 暂停代码
  3. 通过调用 next 恢复执行

简单的例子:

function* foo() {yield 'result1'yield 'result2'yield 'result3'
}const gen = foo()
console.log(gen.next())
console.log(gen.next())
console.log(gen.next())
console.log(gen.next())
// { value: 'result1', done: false }
// { value: 'result2', done: false }
// { value: 'result3', done: false }
// { value: undefined, done: true }

很好理解每次gen.next(),程序继续执行,直到遇到 yield 程序暂停。

next 方法返回一个对象, 有两个属性: value 和 done。

value 为当前 yield 后面的结果,done 表示是否执行完。

复杂一点的例子:

function *foo(x) {let y = 2 * (yield (x + 1))let z = yield (y / 3)return (x + y + z)
}
let it = foo(5)
console.log(it.next())   // => {value: 6, done: false}
console.log(it.next(12)) // => {value: 8, done: false}
console.log(it.next(13)) // => {value: 42, done: true}

讲解:

1.当执行第一次 next 时,传参会被忽略,并且函数暂停在 yield (x + 1) 处,所以返回 5 + 1 = 6。

2.当执行第二次 next 时,传入的参数等于上一个 yield 的返回值,如果你不传参,yield 永远返回 undefined

此时 let y = 2 * 12,所以第二个 yield 等于 2 * 12 / 3 = 8。

3.当执行第三次 next 时,传入的参数会传递给 z,所以 z = 13, x = 5, y = 24,相加等于 42。

如果生成器要调用另一个生成器时如何操作?

答案:yield*

看例子:

function* gen1() {yield 1;yield 4;
}
function* gen2() {yield 2;yield 3;
}

如果我们想按照1234顺序执行,如何来做?

看例子:

function* gen1() {yield 1;yield* gen2();yield 4;
}
function* gen2() {yield 2;yield 3;
}let g1 = gen1()
console.log(g1.next())
console.log(g1.next())
console.log(g1.next())
console.log(g1.next())
console.log(g1.next())// { value: 1, done: false }
// { value: 2, done: false }
// { value: 3, done: false }
// { value: 4, done: false }
// { value: undefined, done: true }

 生成器实现机制——协程

可能你会比较好奇,生成器究竟是如何让函数暂停, 又会如何恢复的呢?这时候就要讲协程了(上文有介绍)。

javascript不是单线程执行嘛?难道可以开多协程一起执行嘛?

答案是:并不能。一个线程一次只能执行一个协程。

比如当前执行 A 协程,另外还有一个 B 协程,如果想要执行 B 的任务,就必须在 A 协程中将JS 线程的控制权转交给 B协程,那么现在 B 执行,A 就相当于处于暂停的状态。

例子:

function* A() {console.log("我是A");yield B(); // A停住,在这里转交线程执行权给Bconsole.log("结束了");
}
function B() {console.log("我是B");return 100;// 返回,并且将线程执行权还给A
}
let gen = A();
gen.next();
gen.next();// 我是A
// 我是B
// 结束了

讲解:

在这个过程中,A 将执行权交给 B,也就是 A 启动 B,我们也称 A 是 B 的父协程。因此 B 当中最后return 100其实是将 100 传给了父协程。

Generator 手写实现

// cb 也就是编译过的 test 函数
function generator(cb) {return (function() {var object = {next: 0,stop: function() {}};return {next: function() {var ret = cb(object);if (ret === undefined) return { value: undefined, done: true };return {value: ret,done: false};}};})();
}
// 如果你使用 babel 编译后可以发现 test 函数变成了这样
function test() {var a;return generator(function(_context) {while (1) {switch ((_context.prev = _context.next)) {// 可以发现通过 yield 将代码分割成几块// 每次执行 next 函数就执行一块代码// 并且表明下次需要执行哪块代码case 0:a = 1 + 2;_context.next = 4;return 2;case 4:_context.next = 6;return 3;// 执行完毕case 6:case "end":return _context.stop();}}});
}

async/await

async/await被称为 JS 中异步终极解决方案。

什么是async?

async 它就是 Generator 函数的语法糖

async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成await,仅此而已。

async函数对 Generator 函数的改进,体现在以下四点。

  1. 内置执行器
  2. 更好的语义
  3. 更广的适用性
  4. 返回值是Promise

例子:

async function test() {return "1";
}
console.log(test());

async function test() {return "1";
}
console.log(test());
test().then(res => {console.log(res) // 1
})

await

await 只能在 async 函数中使用(正常情况下,await命令后面是一个 Promise 对象,返回该对象的结果(resolve或者reject的值)。如果不是 Promise 对象,就直接返回对应的值),await 表达式会暂停当前 async function 的执行。

例子:

async function f() {// 等同于// return 123;return await 123;
}f().then(v => console.log(v))
// 123

上面代码中,await命令的参数是数值123,这时等同于return 123

例子:

async function test() {console.log("执行了test方法")let a = await 200// let promise = new Promise((resolve, reject) => {// resolve(200)// })// let a = promise // 会监听promise变化// let a = promise.then((res) => {})console.log("执行test方法await-", a)console.log("----执行完test方法-----")
}
console.log('打印0')
test()
console.log('打印300')
console.log('打印400')
console.log('打印500')let p = new Promise((resolve, reject) => {console.log("执行了p的promise")resolve(800)
})
// 监听p的promise状态变化
p.then(res => {console.log("监听到p的promise变化-", res)
})
// 打印0
// 执行了test方法
// 打印300
// 打印400
// 打印500
// 执行了p的promise
// 执行test方法await- 200
// ----执行完test方法-----
// 监听到p的promise变化- 800

讲解:

首先代码按顺序执行,先执行(console.log('打印0')),然后将test()压入执行栈,执行(console.log("执行了test方法")),下面遇到关键字await:

1.await内部实现了generators,generators会保留堆栈中东西

2.await是异步操作,遇到await就会立即返回一个pending状态的Promise对象,暂时返回执行代码的控制权

await 200

被js引擎转换成一个promise: 

let promise = new Promise((resolve,reject) => {resolve(200);
})
let a = promise // 会监听promise变化

如2说的,所以这时候函数外的代码得以继续执行,所以会按序执行(console.log('打印300')),console.log('打印400'),console.log('打印500'),执行到p的promise内部执行(console.log("执行了p的promise")),遇到resolve,resolve任务进入微任务队列,当前线程的宏任务完成,现在检查微任务队列,先执行test方法里面的(console.log("执行test方法await-", a))、console.log("----执行完test方法-----"),然后执行console.log("监听到p的promise变化-", res)。

在看例子:

async function test() {console.log("执行了test方法")let a = await 200console.log("执行test方法await-", a)let b = await 202console.log("执行test方法await-", b)console.log("----执行完test方法-----")
}
console.log('打印0')
test()
console.log('打印300')
console.log('打印400')
console.log('打印500')let p = new Promise((resolve, reject) => {console.log("执行了p的promise")resolve(800)
})
p.then(res => {console.log("监听到p的promise变化-", res)
})
// 打印0
// 执行了test方法
// 打印300
// 打印400
// 打印500
// 执行了p的promise
// 执行test方法await- 200
// 监听到p的promise变化- 800
// 执行test方法await- 202
// ----执行完test方法-----

在看例子:

async function test() {console.log("执行了test方法")let promise = new Promise((resolve, reject) => {console.log("执行了test里面的Promise内部")resolve(222)})let a = await promiseconsole.log("执行test方法await-", a)console.log("----执行完test方法-----")
}
console.log('打印0')
test()
console.log('打印300')
console.log('打印400')
console.log('打印500')let p = new Promise((resolve, reject) => {console.log("执行了p的promise")resolve(800)
})
p.then(res => {console.log("监听到p的promise变化-", res)
})// 打印0
// 执行了test方法
// 执行了test里面的Promise内部
// 打印300
// 打印400
// 打印500
// 执行了p的promise
// 执行test方法await- 222
// ----执行完test方法-----
// 监听到p的promise变化- 800

想了解更多?

https://yuchengkai.cn/docs/frontend/#async-%E5%92%8C-await

https://es6.ruanyifeng.com/#docs/async

好了让我们实现一个sleep

function sleep(n) {return new Promise(resolve => {setTimeout(() => {resolve(n)}, n);});
}
async function test() {console.log("------开始----")await sleep(1800);console.log("----结束----");
}
test()

 

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. sudo rosdep init时出现错误: ERROR: cannot download default sources list from

    1、问题 按照官网一步一步来看似很顺利,但当走到最后一步时: $ sudo rosdep init $ rosdep update在进行sudo rosdep init 时出现了意想不到的问题: ERROR: cannot download default sources list from: https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sou…...

    2024/4/16 15:56:53
  2. [转发+补充]教你如何学好vue《文档》

    重新对博客内容进行了修正,为了避免自己的文字引来不必要的歧义,所以删自己关于技术方面的,计划这一分类更多的采用引用为主。 本文转自简书《教你如何学好vue《文档》》,但对内容有所删减(Vue 历史、作者以及案例)以及补充,若想了解还请移步至原文。课程目录ECMAScript…...

    2024/4/19 23:11:19
  3. 谷粒商城-elasticsearch

    1. elasticsearch基本操作 1.1. 基本概念 Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的。 对比关系: 索引(indices)----------------------Databases 数据库类型(type)--------------------------Table 数据表文档(Document)--…...

    2024/4/19 11:50:59
  4. 关于微服务架构最好的文章!

    本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件。本文侧重于简明地表达微服务架构的全局图景。❝ 为了防止不提供原网址的转载,特加上原文链接:https://www.cnblogs.com/skabyy/p/11396571.html要理解微服务,首先要先理解不是微服务…...

    2024/4/18 14:56:06
  5. DFuseNet论文阅读笔记

    原文连接:https://arxiv.org/abs/1902.00761DFuseNet:利用RGB和稀疏深度信息的深度融合,完成图像引导的稠密深度补全 Shreyas S. Shivakumar, Ty Nguyen, Ian D. Miller, Steven W. Chen, Vijay Kumar and Camillo J. Taylor摘要:我们在文章中提出了一个卷积神经网络,该网…...

    2024/4/16 15:57:13
  6. 浙江工业大学计算机技术专业考研经验分享帖

    浙江工业大学复试经验分享自我介绍初试复习复试流程复试感想心态分享 自我介绍我,本科双非二本,软件工程专业,大学四年学业成绩在专业前十,拿过奖学金,参加过一些没啥含金量的比赛,不爱且不怎么会敲代码。就这样一个平凡的我决定考研了,考虑到地理,专业等因素,我将浙江…...

    2024/4/16 15:56:22
  7. jvm垃圾收集器你学废了吗(二)

    前言 前面一篇文章讲了6种垃圾收集器分别是Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS(传送门) 今天我们来说一下G1(Garbage First)收集器,为什么把G1收集器单独拿出来说呢?它是垃圾收集器技术发展历史上的里程碑式的成果,下面我们细细道来G1收…...

    2024/4/19 13:57:26
  8. 互联网行业VS传统行业,哪碗饭更香?

    这些年,网络发展速度越来越快,通过网络赚钱的项目也越来越多。但是,如果你去对这些项目进行分类的话,其实这些项目大致也就分为几种,赚钱的方式也大致相同。这个时代给我们提供了很多网上赚钱的机会。老实说,现在赚钱不一定非要去公司或工厂工作,何况在公司或工厂工作的…...

    2024/3/31 23:53:12
  9. SOLR_8.2_学习、使用、计划、思想、项目实践

    文章目录一、项目安装部署:1.1、下载地址:1.2、解压1.3、启动1.4、浏览器访问二、项目部分配置2.1、创建核心文件夹(可以理解为数据库)2.2、将配置文件copy到meta_db中2.3、创建核心三、创建document(表)添加Field(字段)四、导入数据 documents五、查询数据5.1、查询全…...

    2024/4/16 15:58:00
  10. 【算法设计与分析】第2章 枚举算法

    第2章 枚举算法基本思想作用案例水仙花数 基本思想 列举问题所涉及的所有情形,并根据问题提出的条件逐个检验哪些是问题的解,哪些应予排除。 作用 1、理论上可解决计算领域中的各种问题 2、问题规模不大,运算速度可接受,设计更高效算法不值得的时候 3、作为底线 4、其他算法…...

    2024/4/19 17:31:12
  11. 叩丁狼开发工程师:SSR服务架构特点分析

    叩丁狼开发工程师:SSR服务架构特点分析SSR服务架构是我们在搭建一些开放性平台的时候需要添加的一项功能应用,而今天成都软件开发工程师就通过案例分析来了解一下,关于SSR服务架构的特点都有哪些内容?1、抵抗单页面大流量 要抵抗单页面的大流量,先我们自然而然会想到会使用…...

    2024/4/16 15:58:26
  12. PYQT中QtMultimedia模块使用及处理

    PYQT中,使用QtMultimedia模块,播放视频。 本文可以实现的功能是点击播放按钮,可以播放视频;点击暂停按钮,可以停止播放视频;拉动进度条,可以定位视频播放位置。 附上代码: from PyQt5.QtCore import QUrl import PyQt5.QtWidgets from PyQt5.QtMultimedia import * fro…...

    2024/4/18 9:06:10
  13. 微信公众号自定义菜单栏绑定关联小程序

    日期:2020/7/2 10:02 原文链接: http://note.youdao.com/noteshare?id=a5b5529c7bb1f385fa5453d2a338dbd1&sub=B015901C99BF4BEF93CA3F3E1F8AA7B4 注意事项: 微信公众号必须已经有了绑定关联的小程序,如微信公众号还没有关联小程序,请去微信公众平台进行绑定 情况一:…...

    2024/4/18 9:19:52
  14. spring cloud 学习(6) - zuul 微服务网关

    微服务架构体系中,通常一个业务系统会有很多的微服务,比如:OrderService、ProductService、UserService...,为了让调用更简单,一般会在这些服务前端再封装一层,类似下面这样:前面这一层俗称为“网关层”,其存在意义在于,将"1对N"问题 转换成了"1对1”问…...

    2024/4/16 15:58:26
  15. liunx-搭建hadoop(2.7.1)和使用

    1.搭建 1.集群jdk安装 配置JDK环境变量在局域网中关闭防火墙 service iptables stop设置主机映射 1. 打开配置文件vim /etc/hosts 2. 内容192.168.80.111 server1192.168.80.112 server2192.168.80.110 server3配置SSH免密登录 1. 生成私钥ssh-keygen -t dsa -P -f ~/.ssh/id_…...

    2024/4/26 7:55:43
  16. java枚举enum

    java枚举 jdk5.0之前的 public class SessonTest {public static void main(String[] args) {Seasson spring = Seasson.Spring;System.out.println(spring);} }class Seasson{//1.private final String seassonName;private final String seassonDesc;//2.private Seasson(Str…...

    2024/4/16 15:57:39
  17. 大数据-java基础-第4章 while和do-while循环结构

    1.循环的定义? 答: 循环就是在不停的干着同一件事情。 2.循环结构的特点? 答: 循环结构的特点是都存在循环条件和循环操作。 3.什么是while循环,while循环的特点是? 答: while循环为:while(循环条件){循环操作};当循环的条件为真是则执行循环操作,当条件为假时,结…...

    2024/4/16 15:57:49
  18. 多线程知识点梳理1

    1.什么是线程 线程(thread)是操作系统能够调度的最小的单位,它包含在进程内。是进程的实际运作单位。一个进程中可以有多个线程。2.线程的生命周期 线程的生命周期一共分为五个部分:新建,就绪,运行,阻塞,死亡。 当线程被创建之后并不是直接执行状态,也不是一直处于执…...

    2024/4/16 15:57:55
  19. PHP用户连续签到赠送额外积分

    目录一、需求1、为什么要赠送积分2、怎么获取积分3、积分如何使用1)、兑换2)、抵扣3)、等等二、规则1、用户注册2、成功邀请新用户3、用户签到4、联想三、数据表1、用户表 user2、用户签到表 user_sign3、积分(获取)日志表 integral_log四、代码1、用户签到方法2、公共类 …...

    2024/4/17 23:09:45
  20. 机械键盘alt和win键互换

    按住ctrl+fn+alt就可以 ,然后再按ctrl+fn+win解锁win键...

    2024/4/16 15:57:34

最新文章

  1. 学习100个Unity Shader (14) ---透明效果

    文章目录 渲染队列透明度测试(Alpha Test)效果Shader 透明度混合(Alpha Blending)效果Shader 参考 渲染队列 由”Queue“ 标签决定,索引号越小越早被渲染: 名称队列索引号Background1000Geometry2000Alph…...

    2024/4/28 6:49:40
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. [iOS]事件处理

    一、事件的种类 1.触摸事件(Touch Events) 触摸事件是最为直观的用户交互形式。iOS 设备的触摸屏能够检测多点触摸,并区分各种手势。处理触摸事件的关键在于理解 UIResponder 类以及其相关的方法。下面是一些更详细的信息: UIRe…...

    2024/4/25 16:22:24
  4. 磁盘管理与文件管理

    文章目录 一、磁盘结构二、MBR与磁盘分区分区的优势与缺点分区的方式文件系统分区工具挂载与解挂载 一、磁盘结构 1.硬盘结构 硬盘分类: 1.机械硬盘:靠磁头转动找数据 慢 便宜 2.固态硬盘:靠芯片去找数据 快 贵 硬盘的数据结构:…...

    2024/4/23 6:16:19
  5. PHP获取亚马逊商品详情api接口

    亚马逊提供了一个名为Product Advertising API(PA API)的接口,可以用来获取亚马逊商品的详细信息。 要使用PA API,您需要进行以下几个步骤: 注册为亚马逊合作伙伴,并创建一个亚马逊开发人员账户。创建一个…...

    2024/4/26 23:25:20
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/28 3:28:32
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/28 1:22:35
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57