首页 > 其他分享 >万象更新 Html5 - h5: h5 通过 web worker 实现多线程(演示如何转移数据的所有权)

万象更新 Html5 - h5: h5 通过 web worker 实现多线程(演示如何转移数据的所有权)

时间:2024-09-24 11:03:03浏览次数:8  
标签:byteLength 万象更新 worker h5 length 多线程 buffer1 buffer2

源码 https://github.com/webabcd/Html5
作者 webabcd

万象更新 Html5 - h5: h5 通过 web worker 实现多线程(演示如何转移数据的所有权)

示例如下:

h5\webWorker\worker_transferable.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>通过 web worker 实现多线程(演示如何转移数据的所有权)</title>
</head>
<body>

    <!--注:运行本示例时,必须要在一个 web server 中运行,不能通过直接打开本地文件的方式运行-->
    
    <button id="buttonStartThread">启动 worker 线程</button>
    <div id="result"></div>
    <script>
        let buttonStartThread = document.getElementById('buttonStartThread');
        buttonStartThread.onclick = function() {
            let worker = new Worker('worker_transferable.js');

            /**
             * worker 的 postMessage 的第 2 个参数是一个对象数组(对象必须是 ArrayBuffer 或 MessagePort 或 ImageBitmap 类型)
             * 其用于将指定数据的所有权从当前上下文转移到 worker 的上下文(即当前上下文会清除掉这些数据,从而减少内存开销)
             */

            let buffer1 = new ArrayBuffer(8);
            let buffer2 = new ArrayBuffer(16);

            // buffer1 length:8, buffer2 length:16
            console.log(`buffer1 length:${buffer1.byteLength}, buffer2 length:${buffer2.byteLength}`);

            worker.postMessage({
                b1: buffer1,
                b2: buffer2
            });

            // buffer1 length:8, buffer2 length:16
            console.log(`buffer1 length:${buffer1.byteLength}, buffer2 length:${buffer2.byteLength}`);

            worker.postMessage({
                b1: buffer1,
                b2: buffer2
            }, [buffer1, buffer2]); // 将 buffer1 和 buffer2 的所有权从当前上下文转移到 worker 的上下文

            // buffer1 length:0, buffer2 length:0
            console.log(`buffer1 length:${buffer1.byteLength}, buffer2 length:${buffer2.byteLength}`); // buffer1 和 buffer2 在当前上下文中被清空了
        }
    </script>

</body>
</html>

h5\webWorker\worker_transferable.js

onmessage = function(event) {

};

源码 https://github.com/webabcd/Html5
作者 webabcd

标签:byteLength,万象更新,worker,h5,length,多线程,buffer1,buffer2
From: https://www.cnblogs.com/webabcd/p/18428719/html5_h5_webWorker_worker_transferable

相关文章

  • 万象更新 Html5 - h5: h5 通过 Service Worker 拦截和处理网络请求(可以实现网络资源的
    源码https://github.com/webabcd/Html5作者webabcd万象更新Html5-h5:h5通过ServiceWorker拦截和处理网络请求(可以实现网络资源的缓存)示例如下:h5\serviceWorker\worker.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8">......
  • 万象更新 Html5 - vue.js: vue 模板语法基础(MVVM, 插值, 指令等)
    源码https://github.com/webabcd/Html5作者webabcd万象更新Html5-vue.js:vue模板语法基础(MVVM,插值,指令等)示例如下:vue\basic.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>vue模板语法基础......
  • 万象更新 Html5 - js: js 的 setInterval
    源码https://github.com/webabcd/Html5作者webabcd万象更新Html5-js:js的setInterval示例如下:js\setInterval.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>setInterval</ti......
  • 万象更新 Html5 - js: js 的跨域请求 XMLHttpRequest
    源码https://github.com/webabcd/Html5作者webabcd万象更新Html5-js:js的跨域请求XMLHttpRequest示例如下:js\XMLHttpRequest.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>XMLHttpR......
  • 万象更新 Html5 - dom: DOM 获取元素,修改元素的样式
    源码https://github.com/webabcd/Html5作者webabcd万象更新Html5-dom:DOM获取元素,修改元素的样式示例如下:dom\demo1.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>DOM获取元素,修改元素的样式</t......
  • 万象更新 Html5 - dom: DOM 常用方法和属性
    源码https://github.com/webabcd/Html5作者webabcd万象更新Html5-dom:DOM常用方法和属性示例如下:dom\demo2.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>DOM常用方法和属性</title>&......
  • 万象更新 Html5 - dom: DOM 事件
    源码https://github.com/webabcd/Html5作者webabcd万象更新Html5-dom:DOM事件示例如下:dom\demo3.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>DOM事件</title><sty......
  • 万象更新 Html5 - dom: DOM scroll
    源码https://github.com/webabcd/Html5作者webabcd万象更新Html5-dom:DOMscroll示例如下:dom\demo4.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>DOMscroll</title>......
  • 万象更新 Html5 - h5: h5 drag 和 drop
    源码https://github.com/webabcd/Html5作者webabcd万象更新Html5-h5:h5drag和drop示例如下:h5\dragdrop.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>drag和drop</title&g......
  • ARS展览项目(七)——C++多线程:Socket+表情识别整合
    说明一下我这边做表情识别和Socket,表情识别要实时,Socket要一直监听表情识别的结果,那么就只好用C++多线程来解决这个“两个功能一直并且同时运行”的问题。否则,如果是单线程的话,只能运行表情识别一段时间,切换发送一段时间,又切换回来,这样没有多线程好。还要说解决的难点写成多......