Javascript在工作线程中执行任务

Javascript在工作线程中执行任务,javascript,Javascript,我最近正在学习javascript的异步编程,似乎javascript没有java那样的“线程api”。 在android中,我们可以在工作线程中放入慢函数,以避免阻塞ui操作。 那么,如何通过javascript实现下面的java功能: public void execAsync() { new Thread(){ slowFunction(); }.start(); } 您可以在javascript中使用java线程的可能是一个“we

我最近正在学习javascript的异步编程,似乎javascript没有java那样的“线程api”。 在android中,我们可以在工作线程中放入慢函数,以避免阻塞ui操作。 那么,如何通过javascript实现下面的java功能:

public void execAsync() {
        new Thread(){
            slowFunction();
        }.start();
}

您可以在javascript中使用java线程的可能是一个“web工作者”。我将为您提供一个对象+数组的示例,而不仅仅是一个简单的字符串

let thread = new Worker("worker.js");
他们用信息交流

 thread.postMessage([first.value,second.value]);
 console.log('Message posted to worker');
在worker.js

onmessage = function(e) {
  console.log('Message received from main script');
  var workerResult = 'Result: ' + (e.data[0] * e.data[1]);
  console.log('Posting message back to main script');
  postMessage(workerResult);
}

您可以在javascript中使用java线程的可能是一个“web工作者”。我将为您提供一个对象+数组的示例,而不仅仅是一个简单的字符串

let thread = new Worker("worker.js");
他们用信息交流

 thread.postMessage([first.value,second.value]);
 console.log('Message posted to worker');
在worker.js

onmessage = function(e) {
  console.log('Message received from main script');
  var workerResult = 'Result: ' + (e.data[0] * e.data[1]);
  console.log('Posting message back to main script');
  postMessage(workerResult);
}

JavaScript实际上是单线程的


您可以与服务人员一起获得线程,请参阅此处的更多信息:

JavaScript确实是单线程的


您可以与服务人员一起获得线程,请参阅此处的更多信息:

JavaScript和Java有完全不同的异步方法。虽然Java具有基于线程的并发性,但是如果相同的代码可以在不同的线程上运行并在相同的内存上工作,那么JS与不同的代理具有基于任务的并发性,这些代理可以相互交换消息

因此,您不能将基于线程的编码样式转换为基于任务的编码样式

唯一的情况是,如果您有无法卸载的工作,那么您确实需要多个代理,换句话说:繁重的计算。在这些情况下,您可以在浏览器中使用多个代理WorkerThreads/ServiceWorkers,在NodeJ中使用多个进程。与Java线程不同,这些代理不共享代码和内存,除了s

要使另一个WebWorker在浏览器中运行,必须启动一个WebWorker,并指定另一个要运行的文件:

 const worker = new WebWorker("worker.js");

然后就可以了。

JavaScript和Java有完全不同的异步方法。虽然Java具有基于线程的并发性,但是如果相同的代码可以在不同的线程上运行并在相同的内存上工作,那么JS与不同的代理具有基于任务的并发性,这些代理可以相互交换消息

因此,您不能将基于线程的编码样式转换为基于任务的编码样式

唯一的情况是,如果您有无法卸载的工作,那么您确实需要多个代理,换句话说:繁重的计算。在这些情况下,您可以在浏览器中使用多个代理WorkerThreads/ServiceWorkers,在NodeJ中使用多个进程。与Java线程不同,这些代理不共享代码和内存,除了s

要使另一个WebWorker在浏览器中运行,必须启动一个WebWorker,并指定另一个要运行的文件:

 const worker = new WebWorker("worker.js");
然后您可以。

为浏览器为浏览器