संसाधन लोड हो रहा है... लोड करना...

धागा



```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एक अलग वातावरण में चल रहा है, इसलिए सीधे थ्रेड के बाहर के चर का संदर्भ नहीं ले सकता है, संदर्भ के दौरान संकलन विफलता; साथ ही, थ्रेड में अन्य समापन कार्यों का संदर्भ लेने का समर्थन नहीं करता है; थ्रेड के भीतर प्लेटफॉर्म द्वारा प्रदान किए गए सभी एपीआई को बुलाया जा सकता है, लेकिन उपयोगकर्ता द्वारा अनुकूलित अन्य कार्यों को नहीं बुलाया जा सकता है।

जब कोई थ्रेड निष्पादित हो जाता है और लगातार संदर्भित नहीं होता है, तो सिस्टम बेसलेयर स्वचालित रूप से थ्रेड से संबंधित संसाधनों को पुनः प्राप्त करता है, बिना किसी स्पष्ट कॉल के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/threading/Dict Dict}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threading/eventLoop}, {@fun/Threads/threading/eventLoop}

नेट सेटिंग्स getThread