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

থ্রেড

এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম সত্যই মাল্টি-থ্রেড ফাংশন সমর্থন করেJavaScriptসিস্টেমের নীচে থেকে ভাষা কৌশল, এবং নিম্নলিখিত উদ্দেশ্য বাস্তবায়নঃ

বস্তু নির্দেশাবলী মন্তব্যসমূহ
থ্রেডিং মাল্টিথ্রেড গ্লোবাল অবজেক্ট সদস্যদের কাজ:Thread, getThread, mainThreadইত্যাদি।
থ্রেড থ্রেড অবজেক্ট সদস্যদের কাজ:peekMessage, postMessage, joinইত্যাদি।
থ্রেডলক থ্রেড লক অবজেক্ট সদস্যদের কাজ:acquire, releaseতারা থ্রেড এক্সিকিউশন ফাংশনের পরামিতি হিসাবে থ্রেড পরিবেশে পাস করা যেতে পারে।
থ্রেড ইভেন্ট ইভেন্ট বস্তু সদস্যদের কাজ:set, clear, wait, isSet. তারা থ্রেড এক্সিকিউশন ফাংশনের একটি পরামিতি হিসাবে থ্রেড পরিবেশে পাস করা যেতে পারে।
থ্রেডCondition শর্ত বস্তু সদস্যদের কাজ:notify, notifyAll, wait, acquire, release. তারা থ্রেড এক্সিকিউশন ফাংশনের একটি পরামিতি হিসাবে থ্রেড পরিবেশে পাস করা যেতে পারে।
ThreadDict অভিধানের বস্তু সদস্যদের কাজ:get, setতারা থ্রেড এক্সিকিউশন ফাংশনের পরামিতি হিসাবে থ্রেড পরিবেশে পাস করা যেতে পারে।

থ্রেডিং

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

থ্রেড

Threadবস্তুর দ্বারা তৈরি বা ফিরে আসতে পারেthreading.Thread(), threading.getThread(), threading.mainThread(), এবংthreading.currentThread().

পিক বার্তা

দ্যpeekMessage()একটি থ্রেড থেকে একটি বার্তা পেতে ফাংশন ব্যবহার করা হয়।

দ্যpeekMessage()ফাংশন বর্তমান থ্রেড অবজেক্টের সাথে যুক্ত থ্রেড দ্বারা গৃহীত বার্তাটি ফেরত দেয়।

string, number, bool, object, array, null value এবং সিস্টেম দ্বারা সমর্থিত অন্যান্য প্রকার

পিকমেইজ ((() পিকমেইজ ((টাইমআউট)

প্যারামিটারtimeoutis the timeout setting. এটি প্যারামিটার দ্বারা সেট করা মিলিসেকেন্ডের সংখ্যা ব্লক করবে এবং ডেটা ফেরত দেবে। যদি কোনও ডেটা না থাকে এবং টাইমআউট সীমা অতিক্রম করে, তাহলে একটি শূন্য মান ফেরত দেওয়া হবে। যদিtimeout0 বাtimeoutপ্যারামিটার পাস করা হয় না, এর মানে হল যে প্রক্রিয়া ব্লক হবে এবং অপেক্ষা করুন যতক্ষণ না চ্যানেল থেকে তথ্য গ্রহণ করা হয়.timeoutযদি -১ এ সেট করা হয়, তাহলে এর মানে হল যে প্রক্রিয়াটি অবিলম্বে ডেটা ব্লক করবে না এবং ফেরত দেবে না। যদি কোন ডেটা না থাকে, তাহলে একটি শূন্য মান ফেরত দেওয়া হবে।

টাইমআউট মিথ্যা সংখ্যা

function main() {
    var t1 = threading.Thread(function() {
        for (var i = 0; i < 10; i++) {
            Log("thread1 postMessage():", i)
            threading.mainThread().postMessage(i)
            Sleep(500)
        }        
    })

    while (true) {
        var msg = threading.currentThread().peekMessage()
        Log("main peekMessage():", msg)
        if (msg == 9) {
            break
        }
        Sleep(1000)
    }

    t1.join()
}

একটি সমান্তরাল থ্রেড থেকে প্রধান থ্রেডে বার্তা পাঠান।

প্রোগ্রাম লেখার সময়, আমাদের থ্রেড ব্লক সমস্যার দিকে মনোযোগ দিতে হবে।

{@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name}, {@Threads/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop event

postMessage

দ্যpostMessage()ফাংশন একটি থ্রেডে একটি বার্তা পাঠাতে ব্যবহৃত হয়।

postMessage ((msg)

প্যারামিটারmsgএই বার্তাটি পাঠানো হবে।

মেসেজ সত্য সিস্টেম দ্বারা সমর্থিত যে কোন ধরনের, যেমন স্ট্রিং, সংখ্যা, bool, বস্তু, অ্যারে, ফাংশন, শূন্য মান ইত্যাদি।

function main() {
    var t1 = threading.Thread(function() {
        for (var i = 0; i < 10; i++) {
            Log("thread1 postMessage():", i)
            threading.mainThread().postMessage(i)
            Sleep(500)
        }        
    })
    for (var i = 0; i < 10; i++) {
        var event = threading.mainThread().eventLoop()
        Log("main event:", event)
        Sleep(500)
    }
    t1.join()
}

একই সময়ে থ্রেডে বার্তা পাঠান এবং ব্যবহার করুনeventLoop()মেসেজ নোটিফিকেশন পেতে।

function main() {
    threading.mainThread().postMessage(function(msg) {
        Log("func from mainThread, msg:", msg)
    })
    
    threading.Thread(function() {
        var func = threading.mainThread().peekMessage()
        func("in " + threading.currentThread().name())
    }).join()
}

এটি একটি ফাংশন পাঠাতে সমর্থন করে।

যখন একটি থ্রেড এর এক্সিকিউশন ফাংশনpostMessage()একটি সংকেত বা তথ্য পাঠাতে ফাংশন, একটি বার্তা ইভেন্ট এছাড়াও উৎপন্ন হয়. আমরা ব্যবহার করতে পারেনeventLoop()মেসেজ নোটিফিকেশন গ্রহণের ফাংশন।

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name name join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/eventLoop eventLoop}

যোগদান

দ্যjoin()থ্রেড থেকে বেরিয়ে আসার জন্য অপেক্ষা করতে এবং সিস্টেম রিসোর্স পুনরুদ্ধার করতে ফাংশনটি ব্যবহৃত হয়।

দ্যThreadRetবস্তুসম্পাদনের ফলাফল সম্পর্কে তথ্য রয়েছে। বৈশিষ্ট্যগুলির মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছেঃ

  • আইডিঃ থ্রেড আইডি।
  • terminated: থ্রেড শেষ হতে বাধ্য কিনা।
  • elapsed: ন্যানো সেকেন্ডে থ্রেডের চলার সময়।
  • ret: থ্রেড ফাংশনের রিটার্ন মান।

ThreadRetবস্তু

যোগদান ((() যোগদান ((টাইমআউট)

দ্যtimeoutপ্যারামিটার থ্রেড শেষ হওয়ার জন্য অপেক্ষা করার জন্য মিলিসেকেন্ডে টাইমআউট সেট করতে ব্যবহৃত হয়। যখনtimeoutপ্যারামিটার 0 সেট করা হয় অথবাtimeoutপ্যারামিটার সেট করা হয় না,join()ফাংশন ব্লক এবং থ্রেড শেষ পর্যন্ত অপেক্ষা করবে. যখনtimeoutপ্যারামিটার -1 এ সেট করা হয়,join()অবিলম্বে ফাংশন ফিরে আসবে।

টাইমআউট মিথ্যা সংখ্যা

function main() {
    var t1 = threading.Thread(function() {
        Log("Hello thread1")
        Sleep(5000)
    })

    var ret = t1.join(1000)
    Log("ret:", ret)   // ret: undefined

    ret = t1.join()
    Log("ret:", ret)   // ret: {"id":1,"terminated":false,"elapsed":5003252000}
}

পরীক্ষা করুনjoin()টাইমআউট ফাংশন এবং রিটার্ন মান আউটপুট।

দ্যjoin()ফাংশন টাইমস আউট এবং রিটার্নundefined.

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Threads/Thread/id id}, {@fun/Threads/Thread/name name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/thread/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads

শেষ করা

দ্যterminate()ফাংশনটি একটি থ্রেডকে জোরপূর্বক শেষ করতে এবং তৈরি থ্রেড দ্বারা ব্যবহৃত হার্ডওয়্যার সংস্থানগুলি মুক্ত করতে ব্যবহৃত হয়।

সমাপ্ত ((()

function main() {
    var t1 = threading.Thread(function() {
        for (var i = 0; i < 10; i++) {
            Log("thread1 i:", i)
            Sleep(1000)
        }
    })

    Sleep(3000)
    t1.terminate()
    Log("after t1.terminate()")

    while (true) {
        LogStatus(_D())
        Sleep(1000)
    }
}

একটি থ্রেডের এক্সিকিউশন জোরপূর্বক শেষ করুন। একটি থ্রেড জোরপূর্বক শেষ করার পরে, লগটিতে এই থ্রেড থেকে কোন আউটপুট থাকবে না।

থ্রেডগুলির জন্য যা জোরপূর্বক শেষ হয়terminate()ফাংশন, আমরা আর ব্যবহার করতে পারবেন নাjoin()তাদের শেষ হওয়ার জন্য অপেক্ষা করার ফাংশন।

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name name}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@

getData

দ্যgetData()ফাংশন থ্রেড পরিবেশে রেকর্ড ভেরিয়েবল অ্যাক্সেস করতে ব্যবহার করা হয়. তথ্য বৈধ যখন থ্রেড এক্সিকিউটেড না হয়েছেjoin()ফাংশন (সফল প্রস্থান জন্য অপেক্ষা) এবং কার্যকর করা হয়নিterminate()ফাংশন (শক্তির সাথে থ্রেড শেষ) ।

দ্যgetData()ফাংশন মূল মান সংশ্লিষ্ট রিটার্নkeyবর্তমান থ্রেড কনটেক্সটে সংরক্ষিত কী-ভ্যালু জোড়ার প্যারামিটার।

string, number, bool, object, array, null value এবং সিস্টেম দ্বারা সমর্থিত অন্যান্য প্রকার

getData ((() getData ((কী)

দ্যkeyপ্যারামিটার হল সংরক্ষিত কী-মানের জোড়ার কী নাম।

চাবি সত্য স্ট্রিং

function main() {
    var t1 = threading.Thread(function() {
        for (var i = 0; i < 5; i++) {
            threading.currentThread().setData("count", i)
            Log(`setData("count"):`, i)
            Sleep(1000)
        }
    })
    for (var i = 0; i < 5; i++) {
        var count = threading.getThread(t1.id()).getData("count")
        Log(`getData("count"):`, count)
        Sleep(1000)
    }
    t1.join()
}

কী এর মান রেকর্ড করুনcountসমান্তরাল থ্রেড পরিবেশে, এবং তারপর কী মান পড়াcountমূল থ্রেডে।

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/setData set}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name name}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun

সেটডাটা

দ্যsetData()ফাংশনটি থ্রেডের প্রেক্ষাপটে ভেরিয়েবল সংরক্ষণ করতে ব্যবহৃত হয়।

setData ((কী, মান)

দ্যkeyসংরক্ষিত কী-মানের জোড়ার কী নাম নির্দিষ্ট করতে প্যারামিটার ব্যবহার করা হয়।

চাবি সত্য স্ট্রিং দ্যvalueসংরক্ষিত কী-মানের জোড়ার কী মান নির্দিষ্ট করতে প্যারামিটার ব্যবহার করা হয়।

মূল্য সত্য সিস্টেম দ্বারা সমর্থিত যে কোন ধরনের, যেমন স্ট্রিং, সংখ্যা, bool, বস্তু, অ্যারে, ফাংশন, শূন্য মান ইত্যাদি।

function main() {
    var t1 = threading.Thread(function() {
        threading.currentThread().setData("data", 100)
    })
    Sleep(1000)
    Log(`t1.getData("data"):`, t1.getData("data"))
    t1.join()
}

সমান্তরাল থ্রেডে কী-মানের জোড়া সেট করুন এবং মূল থ্রেডে কী-মানের জোড়া পড়ুন।

function main() {
    threading.mainThread().setData("func2", function(p) {
        Log("func2 p:", p)
    })
    
    var t1 = threading.Thread(function() {
        threading.currentThread().setData("func1", function(p) {
            Log("func1 p:", p)
        })
    
        var func2 = threading.mainThread().getData("func2")
        func2("test2")
    })
    
    Sleep(1000)
    var func1 = t1.getData("func1")
    func1("test1")
    t1.join()
}

এটি ফাংশনগুলিতে কী-মান পাস সমর্থন করে।

ডাটা বৈধ যখন থ্রেড এক্সিকিউট করেনিjoin()ফাংশন (সফল প্রস্থান জন্য অপেক্ষা) এবং কার্যকর করা হয়নিterminate()ফাংশন (শক্তিগতভাবে থ্রেড শেষ) । প্যারামিটার মানvalueএকটি সিরিয়ালাইজযোগ্য ভেরিয়েবল হতে হবে।

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name name}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}

আইডি

দ্যid()ফাংশন রিটার্ন করতে ব্যবহৃত হয়threadIdবর্তমান মাল্টি-থ্রেডেড অবজেক্ট ইনস্ট্যান্স।

রিটার্ন মানid()ফাংশন হলthreadId.

সংখ্যা

id ((()

function main() {
    var t1 = threading.Thread(function() {
        threading.currentThread().setData("data", 100)
    })
    Log(`t1.id():`, t1.id())
    t1.join()
}

একটি সমান্তরালভাবে চলমান থ্রেড তৈরি করুন এবং আউটপুটthreadIdমূল থ্রেডে এই সমান্তরাল থ্রেডের।

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Threads/setData set}, {@fun/Threads/Thread/name name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/event

নাম

দ্যname()বর্তমান মাল্টি-থ্রেডেড অবজেক্ট ইনস্ট্যান্সের নাম ফেরত দিতে ফাংশন ব্যবহার করা হয়।

দ্যname()ফাংশন সমান্তরাল থ্রেডের নাম প্রদান করে।

স্ট্রিং

নাম ((()

function main() {
    var t1 = threading.Thread(function() {
        threading.currentThread().setData("data", 100)
    })
    Log(`t1.name():`, t1.name())  // t1.name(): Thread-1
    t1.join()
}

একটি সমান্তরাল থ্রেড তৈরি করুন এবং মূল থ্রেডে সমান্তরাল থ্রেডের নামটি আউটপুট করুন।

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Threads/setData set}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads

ইভেন্টলুপ

দ্যeventLoop()ফাংশনটি থ্রেড দ্বারা প্রাপ্ত ইভেন্টগুলির জন্য শুনতে ব্যবহৃত হয়।

দ্যeventLoop()ফাংশন বর্তমান থ্রেড দ্বারা প্রাপ্ত ইভেন্ট তথ্য প্রদান করে।ইভেন্ট তথ্য কাঠামো.

বস্তু, শূন্য মান

ইভেন্টলুপ ((() ইভেন্টলুপ (টাইমআউট)

প্যারামিটারtimeoutযদি প্যারামিটারtimeoutএটি 0 এ সেট করা হলে, এটি ফেরত দেওয়ার আগে একটি ইভেন্টের জন্য অপেক্ষা করবে। যদি এটি 0 এর চেয়ে বড় হয় তবে এটি ইভেন্টের অপেক্ষা টাইমআউট সেট করবে। যদি এটি 0 এর চেয়ে কম হয় তবে এটি অবিলম্বে সর্বশেষ ইভেন্টটি ফিরিয়ে দেবে।

টাইমআউট মিথ্যা সংখ্যা

function main() {
    var t1 = threading.Thread(function() {
        while (true) {
            var eventMsg = threading.currentThread().eventLoop()     // Blocking wait
            // 2024-11-14 10:14:18 thread1 eventMsg: {"Seq":1,"Event":"thread","ThreadId":0,"Index":1,"Queue":0,"Nano":1731550458699947000}
            Log(_D(), "thread1 eventMsg:", eventMsg)
        }
    })

    var t2 = threading.Thread(function() {
        while (true) {
            var eventMsg = threading.currentThread().eventLoop(-1)   // Return immediately
            Log(_D(), "thread2 eventMsg:", eventMsg)
            Sleep(5000)
        }
    })

    var t3 = threading.Thread(function() {
        while (true) {
            var eventMsg = threading.currentThread().eventLoop(3000) // Set a 3 second timeout
            Log(_D(), "thread3 eventMsg:", eventMsg)
        }
    })

    t1.postMessage("Hello ", t1.name())
    t2.postMessage("Hello ", t2.name())
    t3.postMessage("Hello ", t3.name())
    t1.join()
    t2.join()
    t3.join()
}

একই সময়ে তিনটি থ্রেড চালান এবং প্রাপ্ত ইভেন্টের তথ্য আউটপুট করুন। যদি টাইমআউট ঘটে বা ফাংশনটি অবিলম্বে ফিরে আসে তবে আউটপুট মানটি শূন্য।

প্রক্রিয়াকরণ প্রক্রিয়াeventLoop()ফাংশন গ্লোবাল ফাংশন হিসাবে একইEventLoop().

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Threads/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name name}, {@fun/Threads/name name name}, {@fun/Threads/Thread/name name name}, {@fun/Threads/name name name}, {@fun/Threads/Thread/name name name}, {@fun/Threads/Thread/name name name}, {@fun/Threads/Threads/name name name}, {@fun/Threads/Threads/name name name name name}

থ্রেডলক

থ্রেড লক অবজেক্ট, মাল্টি-থ্রেড সিঙ্ক্রোনাইজেশন প্রসেসিংয়ের জন্য ব্যবহৃত হয়।

অর্জন করা

দ্যacquire()ফাংশনটি একটি থ্রেড লক (লক) অনুরোধ করতে ব্যবহৃত হয়।

অর্জন ((()

অনুগ্রহ করে দেখুনthreading.Lock()উদাহরণ জন্য অধ্যায়.

দ্যacquire()ফাংশন একটি থ্রেড লক অনুরোধ করতে ব্যবহৃত হয়. যখন একটি থ্রেড কলacquire()একটি থ্রেড লক অবজেক্টের ফাংশন, এটি লকটি অর্জন করার চেষ্টা করে। যদি লকটি বর্তমানে অন্য থ্রেড দ্বারা অনুষ্ঠিত না হয়, তাহলে কলিং থ্রেড সফলভাবে লকটি অর্জন করে এবং কার্যকর করা চালিয়ে যায়। যদি লকটি ইতিমধ্যে অন্য থ্রেড দ্বারা অনুষ্ঠিত হয়, তবে থ্রেড কলিংacquire()লকটি খুলে দেওয়া না হওয়া পর্যন্ত বন্ধ থাকবে।

{@fun/Threads/threading/Lock Lock}, {@fun/Threads/ThreadLock/release release}

মুক্তি

দ্যrelease()ফাংশনটি একটি থ্রেড লক (আনলক) মুক্ত করতে ব্যবহৃত হয়।

মুক্তি (((

function consumer(productionQuantity, dict, pLock, cLock) {
    for (var i = 0; i < productionQuantity; i++) {
        pLock.acquire()
        cLock.acquire()
        var arr = dict.get("array")
        var count = arr.shift()
        dict.set("array", arr)
        Log("consumer:", count, ", array:", arr)
        cLock.release()
        Sleep(1000)
        pLock.release()
    }
}

function producer(productionQuantity, dict, pLock, cLock) {
    for (var i = 0; i < productionQuantity; i++) {
        cLock.acquire()   // cLock.acquire() placed after pLock.acquire() will not cause deadlock
        pLock.acquire()   
        var arr = dict.get("array")
        arr.push(i)
        dict.set("array", arr)
        Log("producer:", i, ", array:", arr)
        pLock.release()
        Sleep(1000)
        cLock.release()
    }
}

function main() {
    var dict = threading.Dict()
    dict.set("array", [])
    var pLock = threading.Lock()
    var cLock = threading.Lock()
    var productionQuantity = 10
    var producerThread = threading.Thread(producer, productionQuantity, dict, pLock, cLock)
    var consumerThread = threading.Thread(consumer, productionQuantity, dict, pLock, cLock)

    consumerThread.join()
    producerThread.join()
}

স্থবিরতার পরিস্থিতি পরীক্ষা করা

এটা লক্ষ করা উচিত যে থ্রেড লকগুলির অনুপযুক্ত ব্যবহার স্থবিরতার দিকে পরিচালিত করতে পারে।

{@fun/Threads/threading/Lock Lock}, {@fun/Threads/ThreadLock/acquire acquire}

থ্রেড ইভেন্ট

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

সেট

দ্যset()ফাংশনটি ইভেন্টগুলি (সেট সিগন্যাল) জানাতে ব্যবহৃত হয়।

সেট (()

অনুগ্রহ করে দেখুনthreading.Event()উদাহরণ জন্য অধ্যায়.

যদি সিগন্যালটি ব্যবহার করে সেট করা থাকেset()সিগন্যাল পরিষ্কার করে আবার সেট করতে হবে।

{@fun/Threads/ThreadEvent/clear clear}, {@fun/Threads/ThreadEvent/wait wait}, {@fun/Threads/ThreadEvent/isSet isSet}

পরিষ্কার

দ্যclear()ফাংশনটি সিগন্যালটি পরিষ্কার করতে ব্যবহৃত হয়।

পরিষ্কার

অনুগ্রহ করে দেখুনthreading.Event()উদাহরণ জন্য অধ্যায়.

{@fun/Threads/ThreadEvent/set set}, {@fun/Threads/ThreadEvent/wait wait}, {@fun/Threads/ThreadEvent/isSet isSet}

অপেক্ষা করো

দ্যwait()ফাংশনটি একটি ইভেন্ট (সিগন্যাল) অপেক্ষা সেট করতে ব্যবহৃত হয়, এবং ইভেন্ট (সিগন্যাল) সেট করার আগে ব্লক হবে; এটি একটি টাইমআউট প্যারামিটার সেট করতে সমর্থন করে।

দ্যwait()ফাংশনটি টাইমআউট ঘটেছে কিনা তা ফেরত দেয়। যদি তাই হয় তবে এটি একটি সত্য মান ফেরত দেয়।

বুল

অপেক্ষা করো। অপেক্ষা করুন ((টাইমআউট)

দ্যtimeoutপ্যারামিটারটি মিলিসেকেন্ডে অপেক্ষা সময়সীমা সেট করতে ব্যবহৃত হয়।

টাইমআউট মিথ্যা সংখ্যা

function main() {
    var event = threading.Event()
    var t1 = threading.Thread(function(event) {
        var ret = event.wait(100)
        Log(`event.wait(100):`, ret)
        ret = event.wait()
        Log(`event.wait():`, ret)
    }, event)

    Sleep(1000)
    event.set()
    t1.join()
}

রিটার্ন মান পরীক্ষা করুনwait() function.

{@fun/Threads/ThreadEvent/set set}, {@fun/Threads/ThreadEvent/clear clear}, {@fun/Threads/ThreadEvent/isSet isSet}

isSet

দ্যisSet()একটি ইভেন্ট (সিগন্যাল) সেট করা হয়েছে কিনা তা নির্ধারণ করতে ফাংশন ব্যবহার করা হয়।

দ্যisSet()ফাংশনটি ইভেন্ট (সিগন্যাল) সেট করা হয়েছে কিনা তা ফেরত দেয়; যদি ইভেন্ট (সিগন্যাল) সেট করা হয়েছে, এটি একটি সত্য মান ফেরত দেয়।

বুল

isSet (()

অনুগ্রহ করে দেখুনthreading.Event()উদাহরণ জন্য অধ্যায়.

{@fun/Threads/ThreadEvent/set set}, {@fun/Threads/ThreadEvent/clear clear}, {@fun/Threads/ThreadEvent/wait wait}

থ্রেডCondition

কন্ডিশন অবজেক্ট, মাল্টি-থ্রেড সিঙ্ক্রোনাইজেশনের জন্য ব্যবহৃত হয়।

অবহিত করা

দ্যnotify()ফাংশনটি একটি অপেক্ষা থ্রেড (যদি থাকে) জাগাতে ব্যবহৃত হয়। শুধুমাত্র থ্রেডগুলি যা ডেকেছেwait()পদ্ধতি জেগে উঠবে।

জানানো হবে

function consumer(dict, condition) {
    while (true) {
        condition.acquire()
        while (dict.get("array").length == 0) {
            Log(threading.currentThread().name(), "wait()...", ", array:", dict.get("array"))
            condition.wait()
        }
        var arr = dict.get("array")
        var num = arr.shift()
        Log(threading.currentThread().name(), ", num:", num, ", array:", arr, "#FF0000")
        dict.set("array", arr)
        Sleep(1000)
        condition.release()
    }
}

function main() {
    var condition = threading.Condition()
    var dict = threading.Dict()
    dict.set("array", [])
    var t1 = threading.Thread(consumer, dict, condition)
    var t2 = threading.Thread(consumer, dict, condition)
    var t3 = threading.Thread(consumer, dict, condition)
    Sleep(1000)
    var i = 0
    while (true) {
        condition.acquire()
        var msg = ""
        var arr = dict.get("array")
        var randomNum = Math.floor(Math.random() * 5) + 1
        if (arr.length >= 3) {
            condition.notifyAll()
            msg = "notifyAll"
        } else {
            arr.push(i)
            dict.set("array", arr)
            if (randomNum > 3 && arr.length > 0) {
                condition.notify()
                msg = "notify"
            } else {
                msg = "pass"
            }
            i++
        }

        Log(_D(), "randomNum:", randomNum, ", array:", arr, ", msg:", msg)
        condition.release()
        Sleep(1000)
    }
}

ব্যবহার করুনnotify()অপেক্ষা করা থ্রেডকে জাগ্রত করার ফাংশন।

দ্যnotify()ফাংশন অপেক্ষা সারি একটি থ্রেড জাগায়.

যখনnotify()ফাংশন একটি থ্রেড জাগিয়ে তোলে, থ্রেড থ্রেড লক পুনরায় অর্জন করবে।

{@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}

সকলকে জানানো

দ্যnotifyAll()ফাংশন সব অপেক্ষা থ্রেড জাগায়.

সবাইকে জানানো হবে।

অনুগ্রহ করে দেখুনThreadCondition.notify()উদাহরণ জন্য অধ্যায়.

দ্যnotifyAll()ফাংশনটি অপেক্ষা করা সকল থ্রেডকে একের পর এক জাগিয়ে তোলে, এবং জাগানো থ্রেডগুলি থ্রেড লকটি পুনরায় অর্জন করে।

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}

অপেক্ষা করো

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

অপেক্ষা করো।

অনুগ্রহ করে দেখুনThreadCondition.notify()উদাহরণ জন্য অধ্যায়.

দ্যwait()ফাংশন থ্রেড লক মুক্ত এবং জাগ্রত যখন থ্রেড লক পুনরায় অর্জন করে।

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}

অর্জন করা

দ্যacquire()ফাংশনটি একটি থ্রেড লক (লক) অনুরোধ করতে ব্যবহৃত হয়।

অর্জন ((()

অনুগ্রহ করে দেখুনThreadCondition.notify()উদাহরণ জন্য অধ্যায়.

ব্যবহারের আগেwait(), আপনি বর্তমান শর্ত বস্তুর থ্রেড লক (লক) অনুরোধ করতে হবে.

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/release release}, {@fun/ThreadCondition/ThreadCondition/release release}, {@fun/ThreadCondition/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/release release}, {@fun/ThreadCondition/release release}, {@fun/ThreadCondition/threadCondition/release release}, {@threadCondition/release release}, {@threadCondition/threadCondition/release release release}, {@threadCondition/threadCondition/release release}, {@thread

মুক্তি

দ্যrelease()ফাংশনটি একটি থ্রেড লক (আনলক) মুক্ত করতে ব্যবহৃত হয়।

মুক্তি (((

অনুগ্রহ করে দেখুনThreadCondition.notify()উদাহরণ জন্য অধ্যায়.

ব্যবহারের পরwait(), আমরা বর্তমান অবস্থা বস্তুর থ্রেড লক (আনলক) মুক্ত করতে হবে.

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}

ThreadDict

ডিকশনারি অবজেক্ট, ডাটা শেয়ারিং এর জন্য ব্যবহৃত হয়।

পেতে

দ্যget()শব্দকোষ বস্তুর মধ্যে রেকর্ড কী মান পেতে ফাংশন ব্যবহার করা হয়.

দ্যget()ফাংশন দ্বারা নির্দিষ্ট কী মান ফেরৎkey parameter.

string, number, bool, object, array, null value এবং সিস্টেম দ্বারা সমর্থিত অন্যান্য প্রকার

get ((key)

দ্যkeyএই প্যারামিটারটি ব্যবহৃত হয় কী নাম নির্দিষ্ট করতে যা পাওয়া যেতে পারে।

চাবি সত্য স্ট্রিং

function main() {
    var event = threading.Event()
    var dict = threading.Dict()
    dict.set("data", 100)
    
    var t1 = threading.Thread(function(dict, event) {
        Log(`thread1, dict.get("data"):`, dict.get("data"))
        
        event.set()
        event.clear()
        
        event.wait()
        Log(`after main change data, thread1 dict.get("data"):`, dict.get("data"))
    
        dict.set("data", 0)
    }, dict, event)
    
    event.wait()
    
    dict.set("data", 99)
    
    event.set()
    event.clear()
    
    t1.join()
    Log(`main thread, dict.get("data"):`, dict.get("data"))
}

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

{@fun/Threads/ThreadDict/set set}

সেট

দ্যset()ফাংশন একটি কী-মান জোড়া সেট করতে ব্যবহৃত হয়।

সেট ((কী, মান)

প্যারামিটারkeyপরিবর্তন করা হবে এমন কী নাম সেট করতে ব্যবহৃত হয়।

চাবি সত্য স্ট্রিং প্যারামিটারvalueপরিবর্তন করার জন্য কী মান সেট করতে ব্যবহৃত হয়।

মূল্য সত্য string, number, bool, object, array, function, null value এবং সিস্টেম দ্বারা সমর্থিত অন্যান্য প্রকার

function main() {
    var dict1 = threading.Dict()
    dict1.set("func1", function(p) {
        Log("func1 p:", p)
    })
    
    threading.Thread(function(dict1) {
        var func1 = dict1.get("func1")
        func1("test")
    }, dict1).join()
}

এটি ফাংশনগুলিতে কী-মান পাস সমর্থন করে।

{@fun/Threads/ThreadDict/get get}

নেট সেটিং ওয়েব৩