وسائل لوڈ ہو رہے ہیں... لوڈنگ...

گھسائی ہوئی

کےthreadingobject ایک گلوبل ملٹی تھریڈنگ مینجمنٹ ٹول ہے جو بیک وقت تھریڈز ، تھریڈ لاکس ، اور حالت اشیاء بنانے جیسے افعال مہیا کرتا ہے۔ یہ سیکشن رکن افعال کا تعارف کراتا ہےthreadingاعتراض. یہ اعتراض صرف کی طرف سے حمایت کی ہےJavaScriptزبان کی حکمت عملی.

تار

کےThread()تقریب متوازی موضوعات تخلیق کرنے کے لئے استعمال کیا جاتا ہے.

کےThread()فنکشن a لوٹاتا ہےThreadآبجیکٹ، جو تخلیق کردہ متوازی تھریڈز، تھریڈ مواصلات وغیرہ کا انتظام کرنے کے لئے استعمال ہوتا ہے۔

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()متوازی عملدرآمد کے لئے فنکشن الگ تھلگ ماحول میں چلتا ہے ، لہذا تھریڈ کے باہر متغیرات کا براہ راست حوالہ نہیں دیا جاسکتا ہے ، اور جب حوالہ دیا جائے تو تالیف ناکام ہوجائے گی۔ اسی وقت ، تھریڈ کے اندر دوسرے بند ہونے والے افعال کے حوالہ جات کی حمایت نہیں کی جاتی ہے۔ پلیٹ فارم کے ذریعہ فراہم کردہ تمام API کو تھریڈ کے اندر بلایا جاسکتا ہے ، لیکن دوسرے صارف کے ذریعہ بیان کردہ افعال کو بلایا نہیں جاسکتا ہے۔

یہ بیک ٹسٹنگ سسٹم اور براہ راست تجارتی ماحول کی حمایت کرتا ہے۔ بیک ٹسٹنگ سسٹم میں صرف بیک وقت تھریڈ سے متعلق تمام افعال کوڈ کی مطابقت کے طور پر تعاون یافتہ ہیں اور بیک وقت تھریڈز کے ذریعہ واقعتا execute انجام نہیں دیئے جائیں گے ، لہذا وہ اس باب میں دہرائے نہیں جائیں گے۔

{@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 حاصل کریں

کےgetThread()تقریب مخصوص موضوع ID کی بنیاد پر موضوع اعتراض حاصل کرنے کے لئے استعمال کیا جاتا ہے.

کےgetThread()فنکشن واپس کرتا ہےThreadپیرامیٹر کی طرف سے مخصوص threadId کے ساتھ اعتراض

Threadچیز

getThread ((threadId) حاصل کریں

پیرامیٹر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)حاصل کرنے کے لئے thread کے موضوع.

{@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/threading/Dict Dict}، {@fun/Threads/threading/currentThread currentThread}، {@fun/Threads/threading/threading/Lock Lock}، {@fun/Threads/threading/eventLoop eventLoop}، {@fun/Threads/threads/threading/eventLoop}

مرکزی تھریڈ

کےmainThread()فنکشن مرکزی موضوع کے موضوع کو حاصل کرنے کے لئے استعمال کیا جاتا ہے، یعنی موضوع جہاںmain()حکمت عملی میں فنکشن واقع ہے.

کےmainThread()فنکشن مرکزی موضوع کے موضوع کو واپس کرتا ہے.

Threadچیز

اہم تھریڈ ((()

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/threads/threading/event Dict}، {@fun/Threads/threading/threading/threading/threading}، {@fun/Threads/threads/threading/threading/Look eventLoop}، {@fun/Threads/threading/eventLoop}، {@fun/Threads/threads/threading/eventLoop}

قفل

کے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/threads/mainThread mainThread}، {@fun/Threads/threading/currentThread currentThread}، {@fun/Threads/threads/threading/Lock Lock}، {@fun/Threads/threads/threading/thread Thread}، {@fun/Threads/threads/threading/event Event}، {@fun/Threads/threads/threading/Dict Dict}، {@fun/Threads/threading/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/threads/threading/Lock Lock}، {@fun/Threads/threads/threading/Condition Condition}، {@fun/Threads/threads/threading/Thread Thread}، {@fun/Threads/threads/threading/Dict Dict}، {@fun/Threads/threads/threading/pending pending}، {@fun/Threads/threads/threading/eventLoop}

ڈکٹ

کے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/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/threading/Thread Thread}، {@fun/Threads/threading/threading/pending pending}، {@fun/Threads/threading/eventLoop}، {@fun/Threads/threading/eventLoop}، {@fun/Threads/threading/threading/eventLoop}،

زیر التوا

کے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}،

نیٹ سیٹنگز تار