当前位置:首页 > JavaScript

js实现阻塞

2026-03-01 01:05:33JavaScript

同步阻塞

使用同步代码会阻塞JavaScript的执行,直到当前任务完成。由于JavaScript是单线程的,同步操作会阻止其他代码执行。

function syncBlock() {
    const start = Date.now();
    while (Date.now() - start < 3000) {} // 阻塞3秒
    console.log("同步阻塞完成");
}
syncBlock();
console.log("后续代码被阻塞");

循环阻塞

通过循环占用主线程实现阻塞。这种方式会持续占用CPU资源,导致页面无响应。

js实现阻塞

function loopBlock(duration) {
    const end = Date.now() + duration;
    while (Date.now() < end) {}
    console.log(`阻塞${duration}毫秒完成`);
}
loopBlock(2000);

定时器阻塞

虽然setTimeout本身是异步的,但可以通过递归调用实现类似阻塞的效果。这种方式比纯循环更友好。

js实现阻塞

function timerBlock(ms) {
    const start = Date.now();
    function check() {
        if (Date.now() - start < ms) {
            setTimeout(check, 0);
        } else {
            console.log("定时器阻塞完成");
        }
    }
    check();
}
timerBlock(3000);

Web Worker阻塞

在主线程中创建Worker并等待其完成。这种方式不会阻塞UI线程,但会阻塞主线程的执行流。

function workerBlock() {
    const worker = new Worker(URL.createObjectURL(
        new Blob([`postMessage('done');`], {type: 'application/javascript'})
    ));
    worker.onmessage = () => console.log("Worker完成");
    while(true) {} // 故意阻塞主线程
}

Atomics等待

使用SharedArrayBuffer和Atomics API可以实现真正的线程同步阻塞。

const sharedBuffer = new SharedArrayBuffer(4);
const sharedArray = new Int32Array(sharedBuffer);

function atomicsBlock() {
    Atomics.wait(sharedArray, 0, 0); // 无限等待
    console.log("Atomics等待结束");
}

注意事项

JavaScript是单线程语言,阻塞主线程会导致页面失去响应。大多数情况下应该避免阻塞操作,改用异步编程模式。Web Worker是处理耗时任务的最佳选择,它不会影响主线程的执行。

标签: js
分享给朋友:

相关文章

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…