Tài nguyên đang được tải lên... tải...

sợi

Cácthreadingobject là một công cụ quản lý đa luồng toàn cầu cung cấp các chức năng như tạo các luồng đồng thời, khóa luồng và đối tượng điều kiện.threadingđối tượng này chỉ được hỗ trợ bởi cácJavaScriptchiến lược ngôn ngữ.

Sợi

CácThread()chức năng được sử dụng để tạo các chủ đề đồng thời.

CácThread()hàm trả về aThreadđối tượng, được sử dụng để quản lý các chủ đề đồng thời được tạo, giao tiếp chủ đề, v.v.

Threadđối tượng

Thread ((func,...args) Thread ((... item)

Các thông sốfunclà một hàm để thực thi đồng thời (được truyền qua tham chiếu), và hỗ trợ truyền vào các hàm ẩn danh.funccó thể chấp nhận nhiều tham số, mà sẽ được truyền qua...argsDo đó, danh sách tham số củafunccần phải phù hợp với...args.

chức đúng chức năng Các thông sốarglà tham số thực tế được truyền đếnfunc(tức là chức năng thực thi chuỗi đồng thời) khi callback được thực hiện; có thể có nhiều tham sốarg, và danh sách tham số củafunccần phải phù hợp với...args.

arg sai chuỗi, số, bool, đối tượng, mảng, hàm, giá trị null và các loại khác được hỗ trợ bởi hệ thống Các thông sốitemlà một mảng chứa các tham chiếu hàm và các tham số của chúng để được thực hiện đồng thời.itemcác tham số có thể được truyền vào khi gọiThread function.

mục đúng mảng

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()
}

Tạo các chủ đề đồng thời cho cả hàm tùy chỉnh và hàm ẩn danh.

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()
}

Sử dụngThread(...items)hình thức để tạo các chủ đề đồng thời và thực hiện nhiều chức năng liên tục.

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()
}

Nó hỗ trợ truyền tham số đến các chức năng được thực hiện đồng thời.

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

Nó hỗ trợ truyền các chuỗi hàm và có thể nhập thư viện bên ngoài một cách năng động để tính toán đồng thời.

Chức năng sợifuncđã đi vàoThread()Function for concurrent execution runs in an isolated environment, so variables outside the thread cannot be directly referenced, and compilation will fail when referenced. Đồng thời, các tham chiếu đến các hàm đóng khác không được hỗ trợ trong thread. Tất cả các API được cung cấp bởi nền tảng có thể được gọi trong thread, nhưng các hàm được người dùng xác định khác không thể được gọi.

Nó hỗ trợ hệ thống backtesting và môi trường giao dịch trực tiếp. Tất cả các chức năng liên quan đến luồng đồng thời chỉ được hỗ trợ như khả năng tương thích mã trong hệ thống backtesting và sẽ không thực sự được thực hiện bởi luồng đồng thời, vì vậy chúng sẽ không được lặp lại trong chương này.

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

CácgetThread()hàm được sử dụng để lấy đối tượng thread dựa trên ID thread được chỉ định.

CácgetThread()hàm trả vềThreadđối tượng với threadId được chỉ định bởi tham số

Threadđối tượng

getThread ((ThreadId)

Các thông sốthreadIdlà ID đối tượng thread. Nhận đối tượng thread tương ứng bằng cách chỉ định tham số.

ThreadId đúng số

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())
}

Đưa đối tượng chủ đề được chỉ định quathreadId.

Nó hỗ trợ hệ thống backtesting và môi trường giao dịch trực tiếp.

Nếu chủ đề bạn muốn lấy đã được thực hiện và phát hành, bạn không thể sử dụngthreading.getThread(threadId)để có được đối tượng của sợi.

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

mainThread

CácmainThread()chức năng được sử dụng để có được đối tượng sợi của sợi chính, đó là sợi màmain()chức năng trong chiến lược được đặt.

CácmainThread()hàm trả về đối tượng thread của thread chính.

Threadđối tượng

mainThread()

function main() {
    Log("The threadId of the main thread:", threading.mainThread().id())
}

Lấy cáiThreadđối tượng của dây chính và đầu rathreadIdcủa chủ đề.

function test() {
    Log("Output the main thread ID in the test function:", threading.mainThread().id())
}

function main() {
    var t1 = threading.Thread(test)
    t1.join()
}

Đối tượng sợi của sợi chính cũng có thể được lấy trong các sợi song song.

Nó hỗ trợ hệ thống backtesting và môi trường giao dịch trực tiếp.

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

CurrentThread (đề tài hiện tại)

CáccurrentThread()chức năng được sử dụng để có được đối tượng thread của thread hiện tại.

CáccurrentThread()hàm trả về đối tượng thread của thread hiện tại.

Threadđối tượng

CurrentThread (()

function test() {
    Log("Id of the current thread:", threading.currentThread().id())
}

function main() {
    var t1 = threading.Thread(test)
    t1.join()
}

Lấy cáiThreadđối tượng của dòng dây và đầu rathreadIdcủa dòng hiện tại.

Nó hỗ trợ hệ thống backtesting và môi trường giao dịch trực tiếp.

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

Khóa

CácLock()chức năng được sử dụng để tạo ra một đối tượng khóa thread.

CácLock()hàm trả về một đối tượng khóa thread.

ThreadLockđối tượng

Khóa khóa.

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()
}

Hai chủ đề đồng thời truy cập một tài nguyên chung.

Nó hỗ trợ hệ thống backtesting và môi trường giao dịch trực tiếp.

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

Điều kiện

CácCondition()function được sử dụng để tạo một đối tượng biến điều kiện, được sử dụng để đạt được đồng bộ hóa và giao tiếp giữa các luồng trong một môi trường đồng thời đa luồng.Condition(), một chuỗi có thể chờ khi một số điều kiện nhất định không được đáp ứng cho đến khi một chuỗi khác thông báo cho nó rằng điều kiện đã được đáp ứng.

CácCondition()hàm trả về aThreadCondition object.

ThreadConditionđối tượng

Tình trạng

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()
}

Hai chủ đề đồng thời truy cập một tài nguyên chung.

Hệ thống backtesting không thực hiện chức năng này, nó chỉ xác định nó.

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

Sự kiện

CácEvent()chức năng được sử dụng để tạo ra mộtsự kiện threadđối tượng, được sử dụng để đồng bộ hóa giữa các luồng, cho phép một luồng chờ thông báo hoặc tín hiệu từ luồng khác.

CácEvent()hàm trả về aThreadEvent object.

ThreadEventđối tượng

Sự kiện

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()
}

Hai chủ đề đồng thời truy cập một tài nguyên chung.

Nó hỗ trợ hệ thống backtesting và môi trường giao dịch trực tiếp.

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

Đề tài

CácDict()function được sử dụng để tạo một đối tượng từ điển để chuyển sang các luồng đồng thời.

CácDict()hàm trả về aThreadDict object.

ThreadDictđối tượng

Định nghĩa

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()    
}

Chuyển một đối tượng bình thường sang chức năng thực thi luồng đồng thời để kiểm tra xem việc sửa đổi giá trị khóa của đối tượng sẽ gây ra thay đổi giá trị khóa của đối tượng trong các luồng khác.

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()    
}

Đưa qua.ThreadDictđối tượng được tạo ra bởiDict()chức năng với chức năng thực thi luồng đồng thời, và kiểm tra xem việc sửa đổi giá trị khóa của đối tượng sẽ làm cho giá trị khóa của đối tượng trong các luồng khác thay đổi hay không.

Khi một đối tượng chung được truyền đến một hàm luồng đồng thời, nó được truyền như một bản sao sâu.

Nó hỗ trợ hệ thống backtesting và môi trường giao dịch trực tiếp.

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

đang chờ

Cácpendinghàm được sử dụng để lấy số lượng các chủ đề đồng thời chạy trong chương trình chiến lược hiện tại.

Cácpending()hàm trả về số lượng các chủ đề đồng thời mà chương trình chiến lược hiện tại đang chạy.

số

đang chờ ((()

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())
}

Tạo hai chủ đề chạy đồng thời và gọipending()hoạt động tại các nút thời gian khác nhau.

Khi chiến lượcmain()hàm bắt đầu chạy, gọi hàmpending()trực tiếp sẽ trả về 1, bởi vì các chủ đề mà chiến lượcmain()chức năng được đặt cũng là một chủ đề đang chờ.

Nó hỗ trợ hệ thống backtesting và môi trường giao dịch trực tiếp.

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

NetSettings Sợi