永发信息网

JS单线程 如何避免阻塞?

答案:3  悬赏:80  手机版
解决时间 2021-04-06 19:22
JS单线程 如何避免阻塞?
最佳答案
阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪),JS单线程避免阻塞方法:
  1.sleep()方法:sleep()允许指定以毫秒为单位的一段时间作为参数,使得线程在指定的时间内进入阻塞状态,不能得到CPU时间,指定的时间一过,线程重新进入可执行状态。
  典型地,sleep()被用在等待某个资源就绪的情形:测试发现条件不满足后,让线程阻塞一段时间后重新测试,直到条件满足为止。
  2.suspend()和resume()方法:两个方法配套使用,suspend()使得线程进入阻塞状态,并且不会自动恢复,必须其对应的resume()被调用,才能使得线程重新进入可执行状态。
  suspend()和resume()被用在等待另一个线程产生的结果的情形:测试发现结果还没有产生后,让线程阻塞,另一个线程产生了结果后,调用resume()使其恢复。
  3.yield()方法:yield()使得线程放弃当前分得的CPU时间,但是不使线程阻塞,即线程仍处于可执行状态,随时可能再次分得CPU时间。调用yield()的效果等价于调度程序认为该线程已执行了足够的时间从而转到另一个线程。
  4.wait()和notify()方法:两个方法配套使用,wait()使得线程进入阻塞状态,有两种形式,一种允许指定以毫秒为单位的一段时间作为参数,另一种没有参数,前者当对应的notify()被调用或者超出指定时间时线程重新进入可执行状态,后者则必须对应的notify()被调用。
全部回答
以前的JavaScript是不能多线程执行的,在运行一段脚本的时候,如果有其它脚本正在请求,那这段脚本就只能等待。不过最新的html5支持Web worker功能,这个相当于让JavaScript可以多线程执行任务。具体使用可以百度。
因为JS运行在浏览器中,是单线程的,每个window一个JS线程,既然是单线程的,在某个特定的时刻只有特定的代码能够被执行,并阻塞其它的代码。而浏览器是事件驱动的(Event driven),浏览器中很多行为是异步(Asynchronized)的,会创建事件并放入执行队列中。javascript引擎是单线程处理它的任务队列,你可以理解成就是普通函数和回调函数构成的队列。当异步事件发生时,如mouse click, a timer firing, or an XMLHttpRequest completing(鼠标点击事件发生、定时器触发事件发生、XMLHttpRequest完成回调触发等),将他们放入执行队列,等待当前代码执行完成。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
179cm的男生正常体重应该是多少啊?
大王椰生态板咋样?
上联:下蛋鸡,不下蛋,下联:鸡下蛋,下不出,
安全八字口号大全,关于贵在坚持的八字口号
简述消化道各部分的吸收功能
中国海洋石油上海分公司 和 中国海运(中海)
双拳难敌四手,藏龙卧虎显神威,杀鸡敬猴无成意
下列离子在溶液中能大量共存,加入OH-能产生
域名跟虚拟主机怎么联系
怎样自己在家测视力,如何测试自己的视力
周口出入境检验检疫在哪
自制染发剂 酒红色 要有效啊
麦当劳是什么国家的,第一间中国的KFC.麦当劳
2014昆山找工作好找吗
淡水石斑鱼怎么做,淡水石斑鱼怎么做好吃
推荐资讯
我今年45岁了皮肤有点松而且还是过敏皮肤超生
请问英国大学入学要求upper second-class Hon
行书法二王起,便是头路;真行用羲之法,以小
拳击节目有哪些,有哪些节目是打拳击的?就像
《往事依依》阅读答案:
霍华德的快乐篮球理论到底有没有错
3/2断路器接线中当线路跳闸后为什么要求母线
中国历史上有没有龙图案的金币或铜币
打架厉害的画眉怎么看,怎么让自己打架变得厉
被拒绝,她只说了句:“我们还是做朋友吧。。
鬼为什么都穿衣服现身 而不是裸体
阿根廷和泰国哪个发达,阿根廷红虾和泰国cp虾
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?