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

スレッド



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

既定関数と匿名関数の両方の並行スレッドを同時に作成する.

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

同期実行する関数への参数伝達関数をサポートする.

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

入力函数の文字列をサポートし,動的に外部データベースにインポートして並行計算できます.

感染Thread()関数は同時に実行されるスレッド関数ですfunc孤立した環境で実行されるため,スレッドの外部の変数を直接引用することができないため,引用時にコンパイル失敗する.同時に,スレッド内では他の閉じる関数を引用するサポートがありません.スレッド内ではプラットフォームが提供するすべてのAPIを呼び出すことができますが,ユーザーにカスタマイズされた他の関数を呼び出すことはできません.

文字列が実行完了し,継続的に参照されていないとき,システム底層は,明示的な呼び出しを必要とせず,文字列に関連するリソースを自動的に回収します.join()関数はリソースを解放します. 連続した参照がリソースを解放できない場合,並行数が2000を超える場合はエラーが返されます:InternalError: too many routine wait, max is 2000

復習システム,実盤環境をサポートする.すべての並行スレッドに関連する関数は,復習システムでのコード互換性サポートのみで,実際には並行スレッドが実行されない.この章は,これ以上説明しない.

{@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 を取得する