資源の読み込みに... 荷物...

スレッド

についてthreadingobject は,同時スレッド,スレッドロック,および条件オブジェクトを作成する機能を提供するグローバルマルチスレッド管理ツールです.このセクションでは,Stream のメンバー関数を紹介します.threadingこのオブジェクトは,このオブジェクトのみがサポートされていますJavaScript言語戦略

スレッド

についてThread()この関数は同時スレッドを作成するために使用されます.

についてThread()a を返しますThread作成された同時スレッド,スレッド通信などを管理するために使用されるオブジェクト.

Threadオブジェクト

スレッド (笑) スレッド (→...項目)

パラメータfunc同期実行のための関数 (参照で渡す) で,匿名関数の渡しをサポートします.func複数のパラメータを受け入れることができます....argsパラメータリストはfunc必要なのは...args.

機能 本当 機能 パラメーターarg実行パラメータがfunc(つまり,同時スレッド実行機能) コールバックが実行されるとき,複数のパラメータがある可能性があります.arg, パラメータリストfunc必要なのは...args.

アルグ 偽り 文字列,数,ボール,オブジェクト,配列,関数,ゼロ値,システムでサポートされる他のタイプ パラメーターitem同期実行される関数参照とそのパラメータを含む配列である.itemパラメータを呼び出すときに送信することができます.Thread function.

ポイント 本当 配列

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

カスタム関数と匿名関数の両方の同時スレッドを作成します.

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

試しにThread(...items)連続スレッドを作成し,複数の機能を順序的に実行します.

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

函数文字列の転送をサポートし,同時コンピューティングのために外部ライブラリを動的にインポートすることができます.

スレッド機能func通過したThread()同期実行のための関数は孤立した環境で実行されるので,スレッドの外の変数は直接参照できないし,参照されたときにコンパイルが失敗する.同時に,スレッド内で他の閉じる関数への参照はサポートされません.プラットフォームが提供するすべてのAPIはスレッド内で呼び出されますが,他のユーザー定義関数は呼び出できません.

バックテストシステムとライブ取引環境をサポートする.すべての同時スレッド関連機能は,バックテストシステムでのコード互換性としてのみサポートされており,実際に同時スレッドによって実行されません.したがって,この章では繰り返されません.

{@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/threads/threading/eventLoop}

getThread を取得する

についてgetThread()この関数は,指定されたスレッドIDに基づいてスレッドオブジェクトを取得するために使用されます.

についてgetThread()この関数は,Threadパラメータで指定されたthreadIdを持つオブジェクト

Threadオブジェクト

getThread (threadId) を取得する

パラメータthreadIdパラメータを指定して対応するスレッドオブジェクトを取得します.

スレッドId 本当 番号

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

指定されたスレッドオブジェクトを入力します.threadId.

バックテストシステムとライブ取引環境をサポートします

実行され,解放された場合は,それを使用することはできません.threading.getThread(threadId)糸のスレッドオブジェクトを得るために

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

メインスレッド

についてmainThread()主糸のスレッドオブジェクト,つまりスレッドがmain()戦略の機能が位置しています.

についてmainThread()この関数で返されるのは 主なスレッドのスレッドオブジェクトです

Threadオブジェクト

mainThread (メインスレッド)

function main() {
    Log("The threadId of the main thread:", threading.mainThread().id())
}

持ってきてThread主糸の物体と出力threadId主要な糸の

function test() {
    Log("Output the main thread ID in the test function:", threading.mainThread().id())
}

function main() {
    var t1 = threading.Thread(test)
    t1.join()
}

メインスレッドのスレッドオブジェクトは,並行スレッドでも得ることができる.

バックテストシステムとライブ取引環境をサポートします

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

currentスレッド

についてcurrentThread()この関数は,現在のスレッドのスレッドオブジェクトを取得するために使用されます.

についてcurrentThread()この関数は,現在のスレッドのスレッドオブジェクトを返します.

Threadオブジェクト

currentThread (現在のスレッド)

function test() {
    Log("Id of the current thread:", threading.currentThread().id())
}

function main() {
    var t1 = threading.Thread(test)
    t1.join()
}

持ってきてThread電流の糸の対象と出力threadIdロープの流れを

バックテストシステムとライブ取引環境をサポートします

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

ロック

についてLock()この関数はスレッドロックオブジェクトを作成するために使用されます.

についてLock()この関数はスレッドロックオブジェクトを返します.

ThreadLockオブジェクト

鍵を閉めろ

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

2つの同時スレッドが共通のリソースにアクセスします.

バックテストシステムとライブ取引環境をサポートします

{@fun/Threads/threading/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threads/threading/Thread Thread}, {@fun/Threads/threads/threading/condition Condition}, {@fun/Threads/threads/threading/event Event}, {@fun/Threads/threads/threading/mainThread mainThread}, {@fun/Threads/threads/threading/currentThread currentThread}, {@fun/Threads/threads/threading/threads/threading/threadThreadThread}, {@fun/Threads/threads/threads/threads/threads/eventLoopイベント}, {@fun/Threads/threads/threads/thre

条件

についてCondition()条件変数オブジェクトを作成するために使用され,複数のスレッドの同時環境におけるスレッド間の同期と通信を達成するために使用されます.Condition()特定の条件が満たされていない場合,スレッドが他のスレッドが条件が満たされていることを通知するまで待つことができます.

についてCondition()a を返しますThreadCondition object.

ThreadConditionオブジェクト

条件

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

2つの同時スレッドが共通のリソースにアクセスします.

バックテストシステムは この機能を実装しません ただ定義します

{@fun/Threads/getThread getThread}, {@fun/Threads/threads/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threads/threading/Lock Lock}, {@fun/Threads/threads/threading/Thread Thread}, {@fun/Threads/threads/threading/event Event}, {@fun/Threads/threads/threads/mainThread mainThread}, {@fun/Threads/threads/threading/currentThread currentThread}, {@fun/Threads/threads/threads/threading/Loop lock}, {@fun/Threads/threads/threads/eventLoop}, {@fun/Threads/threads/threads/threading/eventLoop}, {@fun/Threads/threads/th

イベント

についてEvent()この関数は,スレッドイベントスレッド間の同期に使用されるオブジェクトで,スレッドが別のスレッドからの通知またはシグナルを待つことができます.

についてEvent()a を返しますThreadEvent object.

ThreadEventオブジェクト

イベント

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

2つの同時スレッドが共通のリソースにアクセスします.

バックテストシステムとライブ取引環境をサポートします

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

ディクト

についてDict()この関数は,並行スレッドに転送するための辞書オブジェクトを作成するために使用されます.

についてDict()a を返しますThreadDict object.

ThreadDictオブジェクト

暗記する

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

正規オブジェクトを同時スレッド実行関数に転送し,オブジェクトのキー値を修正すると,他のスレッドのオブジェクトのキー値が変更されるかどうかをテストします.

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

渡してThreadDict作成されたオブジェクトDict()動作を同時スレッド実行機能に変換し,オブジェクトのキー値を変更すると,他のスレッドのオブジェクトのキー値が変化するかどうかをテストします.

共通のオブジェクトが並行スレッド関数に渡されたとき,それはディープコピーとして渡されます.並行スレッドのキー値を修正すると,他のスレッドの辞書に影響しません.

バックテストシステムとライブ取引環境をサポートします

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

待機中

についてpendingこの関数は,現在の戦略プログラムで実行されている並行スレッドの数を得るのに使用されます.

についてpending()この関数は,現在の戦略プログラムが実行している並行スレッドの数を返します.

番号

待機している

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

2つの同時実行スレッドを作成して,pending()異なる時間ノードで機能します.

戦略がmain()実行を開始し,関数を呼び出す.pending()戦略が実行されている主なスレッドであるため,main()機能が位置している場合も 待機しているスレッドです

バックテストシステムとライブ取引環境をサポートします

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

ネットワーク設定 スレッド