JS单线程 如何避免阻塞?

JavaScript013

JS单线程 如何避免阻塞?,第1张

阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪),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()被调用。

其实js的异步 就是开辟一个新的线程。和java的多线程机制是一样的 ,不过js吧线程细节给屏蔽掉了。理解函数回调的概连,处理多线程任务比java 更方便。不过js 确实不太适合高cpu的程序,比较适合高并发

方法一: 1、首先建立一个按钮,在后台将调用或处理的内容写入button_click中2、在前台写一个js函数,内容为document.getElementById("btn1").click()3、在前台或后台调用js函数,激发click事件,等于访问后台c#函数;