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

থ্রেডিং

দ্যthreadingobject হল একটি গ্লোবাল মাল্টিথ্রেডিং ম্যানেজমেন্ট টুল যা সমান্তরাল থ্রেড, থ্রেড লক এবং শর্ত বস্তুর সৃষ্টির মতো ফাংশন প্রদান করে। এই বিভাগটি সদস্য ফাংশনগুলিকে পরিচয় করিয়ে দেয়threadingএই বস্তুর শুধুমাত্র দ্বারা সমর্থিত হয়JavaScriptভাষা কৌশল।

থ্রেড

দ্যThread()একই সময়ে থ্রেড তৈরি করতে ফাংশন ব্যবহার করা হয়।

দ্যThread()ফাংশন a প্রদান করেThreadobject, যা তৈরি concurrent threads, thread communication ইত্যাদি পরিচালনা করতে ব্যবহৃত হয়।

Threadবস্তু

থ্রেড ((ফান,... আর্গস) থ্রেড ((... আইটেম)

প্যারামিটারfuncএকটি ফাংশন যা একই সাথে সম্পাদন করা হয় (রেফারেন্স দ্বারা পাস করা হয়), এবং বেনামী ফাংশনগুলিকে পাস করতে সহায়তা করে।funcএকাধিক পরামিতি গ্রহণ করতে পারে, যা মাধ্যমে পাস করা হবে...argsএকই সময়ে কার্যকর করার সময়. অতএব, পরামিতি তালিকাfuncএর সাথে সামঞ্জস্যপূর্ণ হতে হবে...args.

ফাংশন সত্য ফাংশন প্যারামিটারargপ্রকৃত প্যারামিটার যা পাস করা হয়func(যেমন সমান্তরাল থ্রেড এক্সিকিউশন ফাংশন) যখন কলব্যাক এক্সিকিউটেড হয়; একাধিক পরামিতি থাকতে পারেarg, এবং প্যারামিটার তালিকাfuncএর সাথে সামঞ্জস্যপূর্ণ হতে হবে...args.

আরজি মিথ্যা string, number, bool, object, array, function, null value এবং সিস্টেম দ্বারা সমর্থিত অন্যান্য প্রকার প্যারামিটার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 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)
}

এটি ফাংশন স্ট্রিংগুলি পাস করতে সমর্থন করে এবং সমান্তরাল কম্পিউটিংয়ের জন্য গতিশীলভাবে বাহ্যিক লাইব্রেরি আমদানি করতে পারে।

থ্রেড ফাংশনfuncপ্রবাহিতThread()একই সময়ে কার্যকর করার জন্য একটি ফাংশন একটি বিচ্ছিন্ন পরিবেশে চালিত হয়, তাই থ্রেডের বাইরে ভেরিয়েবলগুলি সরাসরি উল্লেখ করা যায় না, এবং সংকলনটি উল্লেখ করার সময় ব্যর্থ হবে। একই সময়ে, থ্রেডের মধ্যে অন্যান্য ক্লোজার ফাংশনের উল্লেখগুলি সমর্থিত নয়। প্ল্যাটফর্ম দ্বারা সরবরাহিত সমস্ত এপিআই থ্রেডের মধ্যে কল করা যেতে পারে, তবে অন্যান্য ব্যবহারকারী-সংজ্ঞায়িত ফাংশনগুলি কল করা যায় না।

এটি ব্যাকটেস্টিং সিস্টেম এবং লাইভ ট্রেডিং পরিবেশকে সমর্থন করে। সমস্ত সমান্তরাল থ্রেড সম্পর্কিত ফাংশনগুলি ব্যাকটেস্টিং সিস্টেমে কোড সামঞ্জস্যের জন্য সমর্থিত এবং প্রকৃতপক্ষে সমান্তরাল থ্রেড দ্বারা কার্যকর করা হবে না, তাই এগুলি এই অধ্যায়ে পুনরাবৃত্তি করা হবে না।

{@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

দ্যgetThread()ফাংশনটি নির্দিষ্ট থ্রেড আইডি এর উপর ভিত্তি করে থ্রেড অবজেক্ট পেতে ব্যবহৃত হয়।

দ্যgetThread()ফাংশন রিটার্ন করেThreadপ্যারামিটার দ্বারা নির্ধারিত threadId সহ বস্তু

Threadবস্তু

getThread ((থ্রেডআইডি)

প্যারামিটারthreadIdহল থ্রেড অবজেক্ট আইডি। প্যারামিটার উল্লেখ করে সংশ্লিষ্ট থ্রেড অবজেক্ট পান।

threadId সত্য সংখ্যা

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

বর্তমান থ্রেড

দ্যcurrentThread()বর্তমান থ্রেডের থ্রেড অবজেক্ট পেতে ফাংশন ব্যবহার করা হয়।

দ্যcurrentThread()ফাংশন বর্তমান থ্রেডের থ্রেড অবজেক্ট ফেরত দেয়।

Threadবস্তু

বর্তমান থ্রেড ((()

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/event Loop}, {@fun/Threads/threads/threads/threading/mainThread mainThread}, {@fun/Threads/threads/threading/threading/threading/thread Thread Lock}, {@fun/Threads/threads/threading/eventLoop eventLoop}, {@fun/Threads/threads/threading/eventLoop}, {@fun/Threads/threads/threads/eventLoop event

লক

দ্য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()
}

দুটি সমান্তরাল থ্রেড একটি সাধারণ রিসোর্স অ্যাক্সেস করে।

এটি ব্যাকটেস্টিং সিস্টেম এবং লাইভ ট্রেডিং পরিবেশ সমর্থন করে।

{@fun/Threads/threading/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threads/threading/ThreadThread}, {@fun/Threads/threads/threading/Condition Condition}, {@fun/Threads/threads/threading/Event Event}, {@fun/Threads/threads/threading/Dict Dict}, {@fun/Threads/threads/threading/pending pending}, {@fun/Threads/threads/threading/threading/eventLoop}, {@fun/Threads/threads/threads/eventLoop}

শর্ত

দ্য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()
}

দুটি সমান্তরাল থ্রেড একটি সাধারণ রিসোর্স অ্যাক্সেস করে।

ব্যাকটেস্টিং সিস্টেম এই কার্যকারিতা বাস্তবায়ন করে না, এটি শুধুমাত্র এটি সংজ্ঞায়িত করে।

{@fun/Threads/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/Thread Thread}, {@fun/Threads/threads/threading/event Event}, {@fun/Threads/threads/threading/Dict Dict}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threading/threading/eventLoop}, {@fun/Threads/threads/threading/eventLoop},

ঘটনা

দ্য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()
}

দুটি সমান্তরাল থ্রেড একটি সাধারণ রিসোর্স অ্যাক্সেস করে।

এটি ব্যাকটেস্টিং সিস্টেম এবং লাইভ ট্রেডিং পরিবেশ সমর্থন করে।

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

ডিক্ট

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

অপেক্ষমান

দ্য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())
}

একই সময়ে চলমান দুটি থ্রেড তৈরি করুন এবংpending()বিভিন্ন সময় নোড এ ফাংশন।

যখন কৌশলmain()ফাংশন চালানো শুরু, ফাংশন কলpending()সরাসরি 1 ফিরে আসবে, কারণ প্রধান থ্রেড যেখানে কৌশল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/threading/Dict Dict}, {@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/eventLoop}, {@fun/Threads/threading/eventLoop}, {@fun/Threads/threads/threading/eventLoop}

নেট সেটিং থ্রেড