Thread()
函数用于创建并发线程。
Thread()
函数返回一个Thread
对象,用于管理创建的并发线程、线程通信等。
Thread
对象
Thread(func, …args) Thread(…items)
参数func
是用于并发执行的函数(通过引用传递),支持传入匿名函数。func
可接受多个参数,这些参数将在并发执行时通过...args
传入。因此,func
的参数列表需要与...args
保持一致。
func
true
function
参数arg
是在回调执行时传递给func
(即并发线程执行函数)的实际参数;参数arg
可以有多个,func
的参数列表需要与...args
保持一致。
arg
false
string / number / bool / object / array / function / any (系统支持的所有类型)
参数item
是一个数组,包含待并发执行的函数引用及其参数。调用Thread
函数时,参数item
可以传入多组。
item
true
array
”`javascript function test1(a, b, c) { Log(“test1:”, a, b, c) }
function main() { var t1 = threading.Thread(test1, 1, 2, 3) var t2 = threading.Thread(function (msg) { Log(“msg:”, msg) }, “Hello thread2”)
t1.join()
t2.join()
}
同时创建一个自定义函数和一个匿名函数的并发线程。
javascript
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)形式创建并发线程,按顺序执行多个函数。
javascript
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()
}
支持向并发执行函数的参数中传入函数。
javascript
function ml(input) {
const net = new brain.NeuralNetwork()
net.train([
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] },
])
return net.run(input)
}
function main() { var ret = threading.Thread([ml, [1, 0]], [HttpQuery(”https://unpkg.com/brain.js”)]).join()
// ret: {"id":1,"terminated":false,"elapsed":337636000,"ret":{"0":0.9339330196380615}}
Log(ret)
}“` 支持传入函数字符串,可动态导入外部库进行并发计算。
传入Thread()
函数用于并发执行的线程函数func
运行在隔离环境中,因此无法直接引用线程外部的变量,引用时会导致编译失败。同时,线程内不支持引用其他闭包函数。线程内部可以调用平台提供的所有API,但不能调用用户自定义的其他函数。
当线程执行完毕且没有被持续引用时,系统底层会自动回收线程相关的资源,无需显式调用join()
函数来释放资源。如果存在持续引用导致无法释放资源,当并发数量超过2000个时会报错:InternalError: too many routine wait, max is 2000
。
支持回测系统、实盘环境。所有并发线程相关的函数在回测系统中仅作为代码兼容性支持,实际不会真正执行并发线程,本章不再赘述。
{@fun/Threads/threading/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/Condition Condition}, {@fun/Threads/threading/Event Event}, {@fun/Threads/threading/Dict Dict}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threading/eventLoop eventLoop}