A plataforma de negociação de quantidade FMZ realmente suporta a função multi-threaded doJavaScript
A estratégia linguística é desenvolvida a partir da base do sistema e tem por objectivo:
Objetos | Orientações | Observações |
---|---|---|
Filamentos | Objeto global multithreaded | Funções dos membros:Thread , getThread , mainThread , etc. |
Fios | Objeto de linha | Funções dos membros:peekMessage , postMessage , join , etc. |
ThreadLock | Objeto de bloqueio de fio | Funções dos membros:acquire , release . Eles podem ser passados para o ambiente do thread como parâmetros da função de execução do thread. |
ThreadEvent | Objeto evento | Funções dos membros:set , clear , wait , isSet . Eles podem ser passados para o ambiente do thread como um parâmetro da função de execução do thread. |
ThreadCondição | Objeto de condição | Funções dos membros:notify , notifyAll , wait , acquire , release . Eles podem ser passados para o ambiente do thread como um parâmetro da função de execução do thread. |
ThreadDict | Objeto do dicionário | Funções dos membros:get , set . Eles podem ser passados para o ambiente do thread como parâmetros da função de execução do thread. |
Othreading
object é uma ferramenta global de gerenciamento de multithreading que fornece funções como criar threads concorrentes, bloqueios de thread e objetos de condição.threading
Este objeto só é suportado peloJavaScript
Estratégia linguística.
OThread()
função é usada para criar tópicos simultâneos.
OThread()
função retorna aThread
objeto, que é utilizado para gerir threads criados em simultâneo, comunicação de threads, etc.
Thread
Objeto
Thread ((func,...args) Apresentação (s)
O parâmetrofunc
é uma função para execução simultânea (passada por referência), e suporta a passagem de funções anônimas.func
pode aceitar múltiplos parâmetros, que serão transmitidos através de...args
Portanto, a lista de parâmetros defunc
deve ser coerente com...args
.
Função
verdade
função
O parâmetroarg
é o parâmetro real passado parafunc
(ou seja, a função de execução de thread simultânea) quando a chamada de retorno é executada; pode haver vários parâmetrosarg
, e a lista de parâmetros defunc
deve ser coerente com...args
.
arg
Falso
cadeia, número, bool, objeto, matriz, função, valor nulo e outros tipos suportados pelo sistema
O parâmetroitem
é uma matriz contendo as referências de função e seus parâmetros a serem executados simultaneamente.item
Os parâmetros podem ser transmitidos ao chamar oThread
function.
item verdade matriz
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()
}
Crie tópicos simultâneos para uma função personalizada 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()
}
Utilize oThread(...items)
forma para criar threads simultâneos e executar múltiplas funções sequencialmente.
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()
}
Suporta a passagem de parâmetros para funções executadas simultaneamente.
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)
}
Ele suporta a passagem de cadeias de funções e pode importar bibliotecas externas dinamicamente para computação simultânea.
A função do fiofunc
passaram para oThread()
A função para execução simultânea é executada em um ambiente isolado, de modo que as variáveis fora do thread não podem ser diretamente referenciadas, e a compilação falhará quando referenciada. Ao mesmo tempo, as referências a outras funções de fechamento não são suportadas dentro do thread. Todas as APIs fornecidas pela plataforma podem ser chamadas dentro do thread, mas outras funções definidas pelo usuário não podem ser chamadas.
Ele suporta sistema de backtesting e ambiente de negociação ao vivo. Todas as funções relacionadas ao thread simultâneo são apenas suportadas como compatibilidade de código no sistema de backtesting e não serão executadas por threads simultâneos, por isso não serão repetidas 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}
OgetThread()
função é usada para obter o objeto de thread com base no ID de thread especificado.
OgetThread()
função retorna oThread
Objeto com o threadId especificado pelo parâmetro
Thread
Objeto
getThread ((ThreadId)
O parâmetrothreadId
é o ID do objeto do thread. Obtenha o objeto do thread correspondente especificando o parâmetro.
threadId verdade Número
function main() {
var t1 = threading.Thread(function () {
Log("Hello thread1")
})
// The Thread object has a method: id(), which is used to get the thread ID. You can view the section of the document corresponding to the Thread object.
var threadId = t1.id()
var threadName = t1.name()
Log("threadId:", threadId, ", threadName:", threadName)
var t2 = threading.getThread(threadId)
Log(`threadId == t2.id():`, threadId == t2.id(), `, threadName == t2.name():`, threadName == t2.name())
}
Obtenha o objeto de thread especificado atravésthreadId
.
Suporta sistema de backtesting e ambiente de negociação ao vivo.
Se o thread que você quer obter foi executado e liberado, você não pode usarthreading.getThread(threadId)
para obter o objeto do fio do fio.
{@fun/Threads/threading/Thread Thread}, {@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 eventLoop}
OmainThread()
A função é utilizada para obter o objeto do fio do fio principal, ou seja, o fio onde omain()
A função na estratégia está localizada.
OmainThread()
função retorna o objeto thread do thread principal.
Thread
Objeto
mainThread ((()
function main() {
Log("The threadId of the main thread:", threading.mainThread().id())
}
Apanha oThread
Objeto do fio principal e saída dothreadId
da linha principal.
function test() {
Log("Output the main thread ID in the test function:", threading.mainThread().id())
}
function main() {
var t1 = threading.Thread(test)
t1.join()
}
O objeto do fio do fio principal também pode ser obtido em fios concorrentes.
Suporta sistema de backtesting e ambiente de negociação ao vivo.
{@fun/Threads/getThread getThread}, {@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/Condition Condition}, {@fun/Threads/threading/Event Event}, {@fun/Threads/threads/threading/Dict Dict}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threading/eventLoop Loop}
OcurrentThread()
função é usada para obter o objeto thread do thread atual.
OcurrentThread()
função retorna o objeto thread do thread atual.
Thread
Objeto
CurrentThread ((()
function test() {
Log("Id of the current thread:", threading.currentThread().id())
}
function main() {
var t1 = threading.Thread(test)
t1.join()
}
Apanha oThread
objeto do fio de corrente e saída dothreadId
do fio corrente.
Suporta sistema de backtesting e ambiente de negociação ao vivo.
{@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/threading/Condition Condition}, {@fun/Threads/threading/event Event}, {@fun/Threads/threading/threading/Dict Dict}, {@fun/Threads/threading/threading/pending pending}, {@fun/Threads/threading/eventLoop eventLoop}
OLock()
A função é usada para criar um objeto de bloqueio de thread.
OLock()
A função retorna um objeto de bloqueio de thread.
ThreadLock
Objeto
Bloqueio
function consumer(productionQuantity, dict, lock) {
for (var i = 0; i < productionQuantity; i++) {
lock.acquire()
var count = dict.get("count")
Log("consumer:", count)
Sleep(1000)
lock.release()
}
}
function producer(productionQuantity, dict, lock) {
for (var i = 0; i < productionQuantity; i++) {
lock.acquire()
dict.set("count", i)
Log("producer:", i)
Sleep(1000)
lock.release()
}
}
function main() {
var dict = threading.Dict()
dict.set("count", -1)
var lock = threading.Lock()
var productionQuantity = 10
var producerThread = threading.Thread(producer, productionQuantity, dict, lock)
var consumerThread = threading.Thread(consumer, productionQuantity, dict, lock)
consumerThread.join()
producerThread.join()
}
Dois tópicos simultâneos acessam um recurso comum.
Suporta sistema de backtesting e ambiente de negociação ao vivo.
{@fun/Threads/threading/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threads/threading/ThreadThread}, {@fun/Threads/threads/threading/Condition Condition}, {@fun/Threads/threads/threading/Event Event}, {@fun/Threads/threads/threading/Dict Dict}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threads/threading/eventLoop event}
OCondition()
função é usada para criar um objeto de variável de condição, que é usado para alcançar a sincronização e comunicação entre threads em um ambiente simultâneo multi-threaded.Condition()
, um thread pode esperar quando certas condições não são cumpridas até que outro thread notifique que a condição foi cumprida.
OCondition()
função retorna aThreadCondition
object.
ThreadCondition
Objeto
Condição
function consumer(productionQuantity, dict, condition) {
for (var i = 0; i < productionQuantity; i++) {
condition.acquire()
while (dict.get("array").length == 0) {
condition.wait()
}
var arr = dict.get("array")
var count = arr.shift()
dict.set("array", arr)
Log("consumer:", count, ", array:", arr)
condition.release()
Sleep(1000)
}
}
function producer(productionQuantity, dict, condition) {
for (var i = 0; i < productionQuantity; i++) {
condition.acquire()
var arr = dict.get("array")
arr.push(i)
dict.set("array", arr)
Log("producer:", i, ", array:", arr)
condition.notify()
condition.release()
Sleep(1000)
}
}
function main() {
var dict = threading.Dict()
dict.set("array", [])
var condition = threading.Condition()
var productionQuantity = 10
var producerThread = threading.Thread(producer, productionQuantity, dict, condition)
var consumerThread = threading.Thread(consumer, productionQuantity, dict, condition)
consumerThread.join()
producerThread.join()
}
Dois tópicos simultâneos acessam um recurso comum.
O sistema de backtesting não implementa esta funcionalidade, ele apenas a define.
{@fun/Threads/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/Event Event}, {@fun/Threads/threading/Dict Dict}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threading/eventLoop}
OEvent()
função é usada para criar umevento de threadobjeto, que é usado para a sincronização entre os tópicos, permitindo que um tópico espere por notificação ou sinal de outro tópico.
OEvent()
função retorna aThreadEvent
object.
ThreadEvent
Objeto
Eventos
function consumer(productionQuantity, dict, pEvent, cEvent) {
for (var i = 0; i < productionQuantity; i++) {
while (dict.get("array").length == 0) {
pEvent.wait()
}
if (pEvent.isSet()) {
pEvent.clear()
}
var arr = dict.get("array")
var count = arr.shift()
dict.set("array", arr)
Log("consumer:", count, ", array:", arr)
cEvent.set()
Sleep(1000)
}
}
function producer(productionQuantity, dict, pEvent, cEvent) {
for (var i = 0; i < productionQuantity; i++) {
while (dict.get("array").length != 0) {
cEvent.wait()
}
if (cEvent.isSet()) {
cEvent.clear()
}
var arr = dict.get("array")
arr.push(i)
dict.set("array", arr)
Log("producer:", i, ", array:", arr)
pEvent.set()
Sleep(1000)
}
}
function main() {
var dict = threading.Dict()
dict.set("array", [])
var pEvent = threading.Event()
var cEvent = threading.Event()
var productionQuantity = 10
var producerThread = threading.Thread(producer, productionQuantity, dict, pEvent, cEvent)
var consumerThread = threading.Thread(consumer, productionQuantity, dict, pEvent, cEvent)
consumerThread.join()
producerThread.join()
}
Dois tópicos simultâneos acessam um recurso comum.
Suporta sistema de backtesting e ambiente de negociação ao vivo.
{@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/threading/Thread Thread}, {@fun/Threads/threading/Dict Dict}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threading/eventLoop eventop}
ODict()
função é usada para criar um objeto de dicionário para passar para tópicos concorrentes.
ODict()
função retorna aThreadDict
object.
ThreadDict
Objeto
Dicionário
function threadFun1(obj) {
obj["age"] = 100
while (true) {
Log("threadFun1 obj:", obj)
Sleep(5000)
}
}
function threadFun2(obj) {
while (true) {
Log("threadFun2 obj:", obj)
Sleep(5000)
}
}
function main() {
var obj = {"age": 10}
var t1 = threading.Thread(threadFun1, obj)
var t2 = threading.Thread(threadFun2, obj)
t1.join()
t2.join()
}
Passar um objeto normal para a função de execução de thread simultâneo para testar se modificar o valor da chave do objeto causará alterações no valor da chave do objeto em outros threads.
function threadFun1(threadDict) {
threadDict.set("age", 100)
while (true) {
Log(`threadFun1 threadDict.get("age"):`, threadDict.get("age"))
Sleep(5000)
}
}
function threadFun2(threadDict) {
while (true) {
Log(`threadFun2 threadDict.get("age"):`, threadDict.get("age"))
Sleep(5000)
}
}
function main() {
var threadDict = threading.Dict()
threadDict.set("age", 10)
var t1 = threading.Thread(threadFun1, threadDict)
var t2 = threading.Thread(threadFun2, threadDict)
t1.join()
t2.join()
}
Passa oThreadDict
Objeto criado peloDict()
função para a função de execução de thread simultânea, e testar se a modificação do valor da chave do objeto fará com que o valor da chave do objeto em outros threads mude.
Quando um objeto comum é passado para uma função de thread concorrente, ele é passado como uma cópia profunda.
Suporta sistema de backtesting e ambiente de negociação ao vivo.
{@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}, {@fun/Threads/threading/threading/thread}, {@fun/Threads/threading/threading/pending pending}, {@fun/Threads/threading/eventLoop}
Opending
função é usada para obter o número de tópicos concorrentes em execução no programa de estratégia atual.
Opending()
função retorna o número de tópicos simultâneos que o programa de estratégia atual está executando.
Número
pendente
function threadFun1() {
Log("threadFun1")
Sleep(3000)
}
function threadFun2() {
for (var i = 0; i < 3; i++) {
LogStatus(_D(), "print from threadFun2")
Sleep(3000)
}
}
function main() {
Log(`begin -- threading.pending():`, threading.pending())
var t1 = threading.Thread(threadFun1)
var t2 = threading.Thread(threadFun2)
Log(`after threading.Thread -- threading.pending():`, threading.pending())
t1.join()
t2.join()
Log(`after thread.join -- threading.pending():`, threading.pending())
}
Crie dois tópicos em execução simultânea e chame opending()
função em diferentes pontos de tempo.
Quando a estratégiamain()
função começa a executar, chamando a funçãopending()
diretamente irá retornar 1, porque o fio principal onde a estratégiamain()
função está localizado é também um fio pendente.
Suporta sistema de backtesting e ambiente de negociação ao vivo.
{@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/Thread Thread}, {@fun/Threads/threading/eventLoop}
Thread
objetos podem ser criados ou devolvidos porthreading.Thread()
, threading.getThread()
, threading.mainThread()
, ethreading.currentThread()
.
OpeekMessage()
função é usada para obter uma mensagem de um thread.
OpeekMessage()
função retorna a mensagem recebida pelo thread associado ao objeto do thread atual.
string, number, bool, object, array, null value e outros tipos suportados pelo sistema
PeekMessagem() PeekMessage ((timeout)
O parâmetrotimeout
é a definição de timeout. Ele irá bloquear e esperar o número de milissegundos definidos pelo parâmetro e retornar dados. Se não houver dados e o timeout exceder o limite, um valor nulo será devolvido. Setimeout
é definido como 0 ou otimeout
Parâmetro não é passado, significa que o processo irá bloquear e esperar até que os dados sejam recebidos do canal.timeout
se for definido em -1, significa que o processo não bloqueará e retornará dados imediatamente.
tempo de espera Falso Número
function main() {
var t1 = threading.Thread(function() {
for (var i = 0; i < 10; i++) {
Log("thread1 postMessage():", i)
threading.mainThread().postMessage(i)
Sleep(500)
}
})
while (true) {
var msg = threading.currentThread().peekMessage()
Log("main peekMessage():", msg)
if (msg == 9) {
break
}
Sleep(1000)
}
t1.join()
}
Enviar mensagens para o tópico principal de um tópico concorrente.
Quando escrevemos programas, precisamos prestar atenção aos problemas de thread deadlock.
{@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name}, {@Threads/Threads/eventLoop eventLoop}
OpostMessage()
função é usada para enviar uma mensagem para um tópico.
PostMessage ((msg)
O parâmetromsg
é a mensagem a ser enviada.
msg verdade Qualquer tipo suportado pelo sistema, como string, número, bool, objeto, matriz, função, valor nulo, etc.
function main() {
var t1 = threading.Thread(function() {
for (var i = 0; i < 10; i++) {
Log("thread1 postMessage():", i)
threading.mainThread().postMessage(i)
Sleep(500)
}
})
for (var i = 0; i < 10; i++) {
var event = threading.mainThread().eventLoop()
Log("main event:", event)
Sleep(500)
}
t1.join()
}
Enviar mensagens em tópicos simultâneos e usareventLoop()
para receber notificações de mensagens.
function main() {
threading.mainThread().postMessage(function(msg) {
Log("func from mainThread, msg:", msg)
})
threading.Thread(function() {
var func = threading.mainThread().peekMessage()
func("in " + threading.currentThread().name())
}).join()
}
Suporta enviar uma função.
Quando uma função de execução de threadpostMessage()
A função para enviar um sinal ou dados, um evento de mensagem também é gerado.eventLoop()
Função para receber notificações de mensagens.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name name}, {@fun/Threads/Thread/eventLoop eventLoop}
Ojoin()
A função é usada para esperar que o thread saia e recupere os recursos do sistema.
OThreadRet
Objetocontém dados sobre o resultado da execução. As propriedades incluem:
ThreadRet
Objeto
Junte-se. Participação (timeout)
Otimeout
O parâmetro é usado para definir o timeout em milissegundos para esperar que o fio termine.timeout
Parâmetro é definido em 0 ou otimeout
Parâmetro não definido, ojoin()
função irá bloquear e esperar até que o tópico terminar de executar.timeout
Parâmetro definido em -1, ojoin()
A função irá voltar imediatamente.
tempo de espera Falso Número
function main() {
var t1 = threading.Thread(function() {
Log("Hello thread1")
Sleep(5000)
})
var ret = t1.join(1000)
Log("ret:", ret) // ret: undefined
ret = t1.join()
Log("ret:", ret) // ret: {"id":1,"terminated":false,"elapsed":5003252000}
}
Teste ojoin()
Função de timeout e saída do valor de retorno.
Ojoin()
Função out times e returnsundefined
.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}
Oterminate()
A função é usada para encerrar forçosamente um thread e liberar os recursos de hardware utilizados pelo thread criado.
Terminar (((
function main() {
var t1 = threading.Thread(function() {
for (var i = 0; i < 10; i++) {
Log("thread1 i:", i)
Sleep(1000)
}
})
Sleep(3000)
t1.terminate()
Log("after t1.terminate()")
while (true) {
LogStatus(_D())
Sleep(1000)
}
}
Terminar a execução de um thread com força.
Para fios que são forçosamente terminados peloterminate()
A função, já não podemos usar ojoin()
Função para esperar que eles terminem.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Thread/eventLoop eventLoop}
OgetData()
A função é usada para acessar variáveis registradas no ambiente do thread.join()
função (em espera de saída bem sucedida) e não executou oterminate()
Função (terminar o fio à força).
OgetData()
função retorna o valor da chave correspondente aokey
Parâmetro no par chave-valor armazenado no contexto do thread atual.
string, number, bool, object, array, null value e outros tipos suportados pelo sistema
GetData (em inglês) GetData (chave)
Okey
Parâmetro é o nome da chave do par chave-valor armazenado.
Chave verdade cordel
function main() {
var t1 = threading.Thread(function() {
for (var i = 0; i < 5; i++) {
threading.currentThread().setData("count", i)
Log(`setData("count"):`, i)
Sleep(1000)
}
})
for (var i = 0; i < 5; i++) {
var count = threading.getThread(t1.id()).getData("count")
Log(`getData("count"):`, count)
Sleep(1000)
}
t1.join()
}
Gravar o valor da chavecount
no ambiente de thread simultâneo, e depois ler o valor chave decount
no assunto principal.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/setData set}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Thread/eventLoop eventLoop}
OsetData()
função é usada para armazenar variáveis no contexto do thread.
setData ((chave, valor)
Okey
O parâmetro é utilizado para especificar o nome da chave do par chave-valor armazenado.
Chave
verdade
cordel
Ovalue
O parâmetro é utilizado para especificar o valor da chave do par chave-valor armazenado.
Valor verdade Qualquer tipo suportado pelo sistema, como string, número, bool, objeto, matriz, função, valor nulo, etc.
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Sleep(1000)
Log(`t1.getData("data"):`, t1.getData("data"))
t1.join()
}
Configure o par chave-valor no thread concorrente e leia o par chave-valor no thread principal.
function main() {
threading.mainThread().setData("func2", function(p) {
Log("func2 p:", p)
})
var t1 = threading.Thread(function() {
threading.currentThread().setData("func1", function(p) {
Log("func1 p:", p)
})
var func2 = threading.mainThread().getData("func2")
func2("test2")
})
Sleep(1000)
var func1 = t1.getData("func1")
func1("test1")
t1.join()
}
Suporta a passagem de valores-chave em funções.
Os dados são válidos quando o tópico não executou ojoin()
função (em espera de saída bem sucedida) e não executou oterminate()
Função (terminando o fio forçosamente).value
deve ser uma variável serializável.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Thread/eventLoop eventLoop}
Oid()
função é usada para retornar othreadId
da instância de objeto multithread atual.
O valor de retorno doid()
função éthreadId
.
Número
id()
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Log(`t1.id():`, t1.id())
t1.join()
}
Crie um thread em execução simultânea e faça a saídathreadId
deste fio concorrente no fio principal.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData set}, {@fun/Threads/Thread/name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}
Oname()
função é usada para retornar o nome da instância atual de objeto multithreaded.
Oname()
função retorna o nome do thread concorrente.
cordel
Nome (s)
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Log(`t1.name():`, t1.name()) // t1.name(): Thread-1
t1.join()
}
Crie um tópico concorrente e produza o nome do tópico concorrente no tópico principal.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData set}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/eventLoop eventLoop}
OeventLoop()
função é usada para ouvir eventos recebidos pelo thread.
OeventLoop()
função retorna a informação do evento recebida pelo thread atual.Estrutura de informação de eventos.
Objeto, valor nulo
EventLoop (em inglês) EventLoop (tempo de espera)
O parâmetrotimeout
é a definição de timeout em milissegundos.timeout
Se for definido como 0, ele vai esperar que um evento ocorra antes de retornar. Se for maior que 0, ele irá definir o evento de espera de tempo. Se for menor que 0, ele retornará o último evento imediatamente.
tempo de espera Falso Número
function main() {
var t1 = threading.Thread(function() {
while (true) {
var eventMsg = threading.currentThread().eventLoop() // Blocking wait
// 2024-11-14 10:14:18 thread1 eventMsg: {"Seq":1,"Event":"thread","ThreadId":0,"Index":1,"Queue":0,"Nano":1731550458699947000}
Log(_D(), "thread1 eventMsg:", eventMsg)
}
})
var t2 = threading.Thread(function() {
while (true) {
var eventMsg = threading.currentThread().eventLoop(-1) // Return immediately
Log(_D(), "thread2 eventMsg:", eventMsg)
Sleep(5000)
}
})
var t3 = threading.Thread(function() {
while (true) {
var eventMsg = threading.currentThread().eventLoop(3000) // Set a 3 second timeout
Log(_D(), "thread3 eventMsg:", eventMsg)
}
})
t1.postMessage("Hello ", t1.name())
t2.postMessage("Hello ", t2.name())
t3.postMessage("Hello ", t3.name())
t1.join()
t2.join()
t3.join()
}
Se o timeout ocorrer ou a função retornar imediatamente, o valor de saída é nulo.
O mecanismo de tratamento doeventLoop()
função é o mesmo que a função globalEventLoop()
.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}
Objeto de bloqueio de thread, utilizado para processamento de sincronização multi-thread.
Oacquire()
A função é utilizada para solicitar um bloqueio (bloqueio) do fio.
Adquirir (((
Por favor, consulte othreading.Lock()
secção para exemplos.
Oacquire()
A função é usada para solicitar um bloqueio de thread.acquire()
Função de um objeto de bloqueio de thread, ele tenta adquirir o bloqueio. Se o bloqueio não está atualmente mantido por outro thread, o thread chamador adquire o bloqueio com sucesso e continua a execução. Se o bloqueio já está mantido por outro thread, o thread chamadoracquire()
será bloqueado até que a fechadura seja liberada.
Não, não, não, não, não.
Orelease()
A função é utilizada para liberar um bloqueio de fio (desbloqueio).
libertação
function consumer(productionQuantity, dict, pLock, cLock) {
for (var i = 0; i < productionQuantity; i++) {
pLock.acquire()
cLock.acquire()
var arr = dict.get("array")
var count = arr.shift()
dict.set("array", arr)
Log("consumer:", count, ", array:", arr)
cLock.release()
Sleep(1000)
pLock.release()
}
}
function producer(productionQuantity, dict, pLock, cLock) {
for (var i = 0; i < productionQuantity; i++) {
cLock.acquire() // cLock.acquire() placed after pLock.acquire() will not cause deadlock
pLock.acquire()
var arr = dict.get("array")
arr.push(i)
dict.set("array", arr)
Log("producer:", i, ", array:", arr)
pLock.release()
Sleep(1000)
cLock.release()
}
}
function main() {
var dict = threading.Dict()
dict.set("array", [])
var pLock = threading.Lock()
var cLock = threading.Lock()
var productionQuantity = 10
var producerThread = threading.Thread(producer, productionQuantity, dict, pLock, cLock)
var consumerThread = threading.Thread(consumer, productionQuantity, dict, pLock, cLock)
consumerThread.join()
producerThread.join()
}
Teste de cenários de impasse
Deve notar-se que a utilização inadequada de fechaduras de fios pode conduzir a um impasse.
Não, não, não, não, não.
Objeto de evento, utilizado para notificação e sinal de evento multi-threaded.
Oset()
A função é utilizada para notificar eventos (sinais definidos).
Conjunto
Por favor, consulte othreading.Event()
secção para exemplos.
Se o sinal tiver sido definido usandoset()
Temos de limpar o sinal e voltar a colocá-lo.
{@fun/Threads/ThreadEvent/clear clear}, {@fun/Threads/ThreadEvent/wait wait}, {@fun/Threads/ThreadEvent/isSet isSet}
Oclear()
A função é utilizada para eliminar o sinal.
Está tudo limpo.
Por favor, consulte othreading.Event()
secção para exemplos.
{@fun/Threads/ThreadEvent/set set}, {@fun/Threads/ThreadEvent/wait wait}, {@fun/Threads/ThreadEvent/isSet isSet}
Owait()
A função é utilizada para definir um evento (sinal) de espera, e bloqueará antes do evento (sinal) ser definido; suporta a definição de um parâmetro de timeout.
Owait()
A função retorna se o timeout ocorreu. Se sim, retorna um valor verdadeiro.
Bool
Espere. Espere (Timeout)
Otimeout
O parâmetro é utilizado para definir o tempo de espera em milissegundos.
tempo de espera Falso Número
function main() {
var event = threading.Event()
var t1 = threading.Thread(function(event) {
var ret = event.wait(100)
Log(`event.wait(100):`, ret)
ret = event.wait()
Log(`event.wait():`, ret)
}, event)
Sleep(1000)
event.set()
t1.join()
}
Teste o valor de retorno dowait()
function.
{@fun/Threads/ThreadEvent/set set}, {@fun/Threads/ThreadEvent/clear clear}, {@fun/Threads/ThreadEvent/isSet isSet}
OisSet()
Função utilizada para determinar se um evento (sinal) foi definido.
OisSet()
A função retorna se o evento (sinal) foi definido; se o evento (sinal) foi definido, retorna um valor verdadeiro.
Bool
isSet()
Por favor, consulte othreading.Event()
secção para exemplos.
{@fun/Threads/ThreadEvent/set set}, {@fun/Threads/ThreadEvent/clear clear}, {@fun/Threads/ThreadEvent/wait wait}
Objeto de condição, utilizado para sincronização multi-thread.
Onotify()
A função é usada para acordar um tópico em espera (se houver).wait()
O método vai despertar.
Notificar
function consumer(dict, condition) {
while (true) {
condition.acquire()
while (dict.get("array").length == 0) {
Log(threading.currentThread().name(), "wait()...", ", array:", dict.get("array"))
condition.wait()
}
var arr = dict.get("array")
var num = arr.shift()
Log(threading.currentThread().name(), ", num:", num, ", array:", arr, "#FF0000")
dict.set("array", arr)
Sleep(1000)
condition.release()
}
}
function main() {
var condition = threading.Condition()
var dict = threading.Dict()
dict.set("array", [])
var t1 = threading.Thread(consumer, dict, condition)
var t2 = threading.Thread(consumer, dict, condition)
var t3 = threading.Thread(consumer, dict, condition)
Sleep(1000)
var i = 0
while (true) {
condition.acquire()
var msg = ""
var arr = dict.get("array")
var randomNum = Math.floor(Math.random() * 5) + 1
if (arr.length >= 3) {
condition.notifyAll()
msg = "notifyAll"
} else {
arr.push(i)
dict.set("array", arr)
if (randomNum > 3 && arr.length > 0) {
condition.notify()
msg = "notify"
} else {
msg = "pass"
}
i++
}
Log(_D(), "randomNum:", randomNum, ", array:", arr, ", msg:", msg)
condition.release()
Sleep(1000)
}
}
Utilize onotify()
Função para acordar o fio de espera.
Onotify()
Função acorda um fio na fila de espera.
Quando onotify()
Função acorda um fio, o fio vai recuperar o bloqueio do fio.
{@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}
OnotifyAll()
A função acorda todos os fios em espera.
Avise a todos
Por favor, consulte oThreadCondition.notify()
secção para exemplos.
OnotifyAll()
A função acorda todos os fios em espera um por um, e os fios despertados recuperam o bloqueio do fio.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}
Owait()
A função é usada para fazer um fio esperar sob certas condições projetadas.
Espere.
Por favor, consulte oThreadCondition.notify()
secção para exemplos.
Owait()
A função liberta o bloqueio do fio e recupera o bloqueio do fio quando acordado.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}
Oacquire()
A função é utilizada para solicitar um bloqueio (bloqueio) do fio.
Adquirir (((
Por favor, consulte oThreadCondition.notify()
secção para exemplos.
Antes de utilizarwait()
, você precisa solicitar o bloqueio de thread (bloqueio) do objeto de condição atual.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/release release}
Orelease()
A função é utilizada para liberar um bloqueio de fio (desbloqueio).
libertação
Por favor, consulte oThreadCondition.notify()
secção para exemplos.
Após utilizaçãowait()
, precisamos liberar o thread lock (desbloquear) do objeto de condição atual.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}
Objeto de dicionário, usado para partilha de dados.
Oget()
função é usada para obter o valor chave registrado no objeto do dicionário.
Oget()
função retorna o valor da chave especificada pelokey
parameter.
string, number, bool, object, array, null value e outros tipos suportados pelo sistema
Get (chave)
Okey
O parâmetro é utilizado para especificar o nome da chave correspondente à chave a obter.
Chave verdade cordel
function main() {
var event = threading.Event()
var dict = threading.Dict()
dict.set("data", 100)
var t1 = threading.Thread(function(dict, event) {
Log(`thread1, dict.get("data"):`, dict.get("data"))
event.set()
event.clear()
event.wait()
Log(`after main change data, thread1 dict.get("data"):`, dict.get("data"))
dict.set("data", 0)
}, dict, event)
event.wait()
dict.set("data", 99)
event.set()
event.clear()
t1.join()
Log(`main thread, dict.get("data"):`, dict.get("data"))
}
Usar objetos de evento para notificar threads para ler e modificar dados.
Não, não, não, não.
Oset()
A função é utilizada para definir um par chave-valor.
Set (chave, valor)
O parâmetrokey
é utilizado para definir o nome da chave a modificar.
Chave
verdade
cordel
O parâmetrovalue
É utilizada para definir o valor chave a modificar.
Valor verdade cadeia, número, bool, objeto, matriz, função, valor nulo e outros tipos suportados pelo sistema
function main() {
var dict1 = threading.Dict()
dict1.set("func1", function(p) {
Log("func1 p:", p)
})
threading.Thread(function(dict1) {
var func1 = dict1.get("func1")
func1("test")
}, dict1).join()
}
Suporta a passagem de valores-chave em funções.
Não, não, não, não.
Configurações da rede Web3