রিসোর্স লোড হচ্ছে... লোডিং...

থ্রেড



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

নেট সেটিং getThread