【问题标题】:Can worker thread run on different CPU core, parallely?工作线程可以在不同的 CPU 内核上并行运行吗?
【发布时间】:2016-04-18 08:12:21
【问题描述】:

JavaScript 引入了window.Worker,允许脚本并行运行。想进一步了解并行性。示例代码是,

<script>
   var worker = new Worker('worker.js');
   worker.onmessage = function (event) {
     document.getElementById('result').textContent = event.data;
   };
</script>

如果操作系统遵循 1-1 线程模型,

那么,Web Worker 用户线程是否分配给了专用的内核线程?

【问题讨论】:

    标签: javascript multithreading operating-system


    【解决方案1】:

    HTML5 规范有工人的概念,但没有规定它们是如何实现的。

    worker 的实现方式取决于浏览器。一个实现可能会选择实现worker:

    • 作为操作系统进程
    • 作为操作系统线程
    • 使用自己的调度算法(例如,在为具有自身多任务支持的操作系统编写的浏览器中,如 MS-DOS)
    • 或它选择的任何其他方式

    例如,V8(在 Chrome 中可以找到)使用操作系统线程来实现线程——因此,如果您查看 V8 的 posix.cpp,您会看到对 pthreads 的引用。典型的现代操作系统通常会尝试将线程分布在 CPU 内核之间。

    【讨论】:

    • ""Javascript" 有线程的概念" 不,它没有。 JS 本质上是单线程的。引擎的单个实例可能支持在不同线程中运行脚本(V8 执行 AFAIK),但这更像是运行两个单独的应用程序,而不是一个具有两个线程的应用程序。 “引擎(在您的情况下是浏览器)” 浏览器不是引擎。工人也不是引擎的一部分。
    • 感谢这个完全合适的吊坠;)我已经修改以适应。
    【解决方案2】:

    是的,可以。这通常取决于浏览器,但重点是允许真正的并行性,没有真正的线程就无法实现:

    例如检查这个google book

    【讨论】:

    • @overexchange :是的,它在创建Worker 时启动。
    猜你喜欢
    • 2022-09-29
    • 1970-01-01
    • 2017-08-22
    • 2013-08-09
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多