```Thread()```函数返回一个```Thread```对象,用于管理创建出的并发线程、线程通信等。
```Thread```对象
Thread(func, ...args)
Thread(...items)
参数```func```是用于并发执行的函数(通过引用传递),支持传入匿名函数。```func```可接受多个参数,这些参数将在并发执行时通过```...args```传入。因此,```func```的参数列表需要与```...args```一致。
func
true
function
参数```arg```是在回调执行时传递给```func```(即并发线程执行函数)的实际参数;参数```arg```可能有多个,```func```的参数列表需要与```...args```一致。
arg
false
string、number、bool、object、array、function、空值等系统支持的所有类型
参数```item```是一个数组,包含待并发执行的函数引用及其参数,调用```Thread```函数时的参数```item```可以传入多组。
item
true
array
```javascript
function test1(a, b, c) {
Log("test1:", a, b, c)
}
function main() {
var t1 = threading.Thread(test1, 1, 2, 3)
var t2 = threading.Thread(function (msg) {
Log("msg:", msg)
}, "Hello thread2")
t1.join()
t2.join()
}
Criar simultaneamente um fio de funções personalizadas e uma função anônima.
function test1(msg) {
Log("msg:", msg)
test2("Hello test2")
}
function main() {
var t1 = threading.Thread(
[function(a, b, c) {Log(a, b, c)}, 1, 2, 3],
[test1, "Hello test1"],
[`function test2(msg) {Log("msg:", msg)}`])
t1.join()
}
UtilizaçãoThread(...items)
Formas para criar linhas de concomitância e executar várias funções em sequência.
function testFunc1(p) {
Log("testFunc1 p:", p)
}
function main() {
threading.Thread(function(pfn) {
var threadName = threading.currentThread().name()
var threadId = threading.currentThread().id()
pfn(`in thread threadName: ${threadName}, threadId: ${threadId}`)
}, testFunc1).join()
}
Suporte para transferência de parâmetros para funções executadas em simultâneo.
function ml(input) {
const net = new brain.NeuralNetwork()
net.train([
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] },
])
return net.run(input)
}
function main() {
var ret = threading.Thread([ml, [1, 0]], [HttpQuery("https://unpkg.com/brain.js")]).join()
// ret: {"id":1,"terminated":false,"elapsed":337636000,"ret":{"0":0.9339330196380615}}
Log(ret)
}
Suporte para cadeias de números de passagens, que podem ser importadas dinâmicamente para bibliotecas externas para computação em simultâneo.
TransmissãoThread()
Funções usadas para executar funções em simultâneofunc
A função é executada em um ambiente isolado e, portanto, não é possível citar diretamente as variáveis externas ao thread, o que causa um fracasso na compilação de referências. Além disso, não é possível citar outras funções de fechamento dentro do thread. Todos os APIs fornecidos pela plataforma podem ser chamados dentro do thread, mas não outras funções personalizadas pelo usuário.
Quando a execução do thread está concluída e não está sendo continuamente referenciada, o fundo do sistema recupera automaticamente os recursos relacionados ao thread, sem a necessidade de uma chamada expressa.join()
Funções para liberar recursos. Se uma referência contínua não liberar o recurso, mais de 2000 referências simultâneas retornarão um erro:InternalError: too many routine wait, max is 2000
。
Suporte para sistemas de retorno, ambientes de disco real; todas as funções relacionadas a linhas de concomitância, apenas como suporte de compatibilidade de código no sistema de retorno, não são realmente executadas em linhas de concomitância, e não serão discutidas neste capítulo.
{@fun/Threads/threading/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/Condition Condition}, {@fun/Threads/threading/Event Event}, {@fun/Threads/threading/Dict Dict}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threading/eventLoop event}
Configurações da rede getThread