Les ressources ont été chargées... Je charge...

Le fil



```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()
}

Créer simultanément un fil de synchronisation avec une fonction personnalisée et une fonction anonyme.

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()
}

UtilisationThread(...items)Les formes permettent de créer des chaînes simultanées et d'exécuter plusieurs fonctions dans l'ordre.

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()
}

Supports le transfert de paramètres vers des fonctions qui exécutent simultanément.

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)
}

Il supporte des chaînes numériques de lettres d'entrée, qui peuvent être importées dynamiquement dans des bibliothèques externes pour des calculs simultanés.

La transmissionThread()Fonction utilisée pour exécuter des fonctions de chaîne en parallèlefuncIl fonctionne dans un environnement isolé et ne peut donc pas faire directement référence à des variables extérieures au thread, ce qui entraîne un échec de compilation lors de la référence. De plus, il ne prend pas en charge la référence à d'autres fonctions de clôture dans le thread. Toutes les API fournies par la plate-forme peuvent être appelées dans le thread, mais aucune autre fonction personnalisée par l'utilisateur ne peut être appelée.

Lorsque le fil est terminé et qu'il n'est pas continuellement référencé, la couche inférieure du système récupère automatiquement les ressources associées au fil, sans avoir besoin d'un appel explicite.join()Une fonction pour libérer une ressource. Si une référence continue empêche la libération d'une ressource et que le nombre de parallèles est supérieur à 2000, une erreur est signalée:InternalError: too many routine wait, max is 2000

Prise en charge des systèmes de réflexion, des environnements de disque réel; toutes les fonctions liées aux threads en parallèle, qui ne sont en fait pas vraiment exécutées en parallèle, ne sont pas traitées dans ce chapitre.

{@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/threads/threading/Dict Dict}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threading/eventLoop}

Réglages réseau - Je ne sais pas.