Khi phát triển chính sách trên FMZ sử dụng ngôn ngữ JavaScript, vì kiến trúc chính sách được đặt ra. Nếu có kịch bản được thiết kế song song, nó được thông quaexchange.Go
Tuy nhiên, việc thực hiện một loạt các hoạt động nếu muốn thực sự tạo ra một chuỗi chủ đề riêng biệt là không thể thực hiện được, ví dụ như sử dụng ngôn ngữ Python.threading
Tôi đã có một số người làm việc cùng với tôi.
FMZ đã nâng cấp nền tảng hệ thống dựa trên nhu cầu này. Nó cũng bổ sung hỗ trợ nhiều luồng thực sự cho ngôn ngữ JavaScript. Các tính năng chi tiết bao gồm:
Sau đây là những đoạn văn nhỏ để giúp bạn hiểu từng chức năng một cách chi tiết.
chức năng 1 (đêm ngủ) {
var sum = 0
cho (var i = 0 ; i < 10 ; i++) {
tổng += i
Giấc ngủ (giấc ngủ)
Log ((
return sum
}
function main (() { // Sử dụng hàm__Thread để tạo một chuỗi cùng lúc với tham số 200 là tham số của hàm func1, // Nếu hàm func1 có nhiều tham số, đây là tham số tương ứng cụ thể var thread1Id = __Thread ((func1, 200)
// 这里需要等待线程Id为thread1Id的线程执行结果,否则main函数执行完就直接释放所有线程
var ret = __threadJoin(thread1Id)
Log("ret:", ret)
}
实际应用场景中,我们可以这样并发进行http请求:
chức năng chính (() {
để các chủ đề = [
### 等待线程执行结束回收资源并返回执行结果
以上例子中我们在main函数中最后使用了```__threadJoin```函数来等待并发的线程执行完毕,变量```ret```接收```__threadJoin```函数的返回值,我们打印了这个返回值,可以观察这个并发的线程执行的具体结果。
// id: Thread ID,terminated: có bị ép dừng,elapsed: mất thời gian ((nác giây),ret: giá trị trả về của hàm thực thi của thread
ret: {
### 强制结束线程,并回收资源
chức năng 1 (đêm ngủ) {
var sum = 0
cho (var i = 0 ; i < 10 ; i++) {
tổng += i
Giấc ngủ (giấc ngủ)
Log ((
return sum
}
chức năng chính (() { var thread1Id = __Thread ((func1, 200) Giấc ngủ ((1000) retThreadTerminate = __threadTerminate ((thread1Id) Log ((retThreadTerminate) // đúng }
还是以刚才的例子,在创建线程后,可以在等待1秒之后就强制终止线程执行。
### 线程间通信
线程间通信主要使用```__threadPostMessage```函数和```__threadPeekMessage```函数。我们来看以下简单例子:
function1 ((() {
var id = __threadId ((()
while (true) {
var post Msg = Message bar của function function func1 từ id: id + id +
__threadPostMessage ((0, postMsg) // Gửi tin nhắn đến chủ đề
var peekMsg = __threadPeekMessage() // Nhận tin nhắn từ các chủ đề khác
Log ((peekMsg)
Sleep ((5000)
chức năng chính (() { var threadId = __Thread ((func1)
while (true) {
var postMsg = "来自主线程的main函数的消息"
__threadPostMessage(threadId, postMsg)
var peekMsg = __threadPeekMessage()
Log(peekMsg, "#FF0000") // #FF0000 , 设置日志为红色用于区分
Sleep(5000)
}
}
```__threadPostMessage```函数用于向某个线程发送消息,第一个参数是具体发送到哪个线程的ID,第二个参数是发送的消息,可以是字符串、数值、数组、JSON对象等。可以在并发的线程函数中向主线程发送消息,主线程的ID定义为0。
```__threadPeekMessage```函数用于监听某个线程发送来的消息, 可以设置超时时间(毫秒数),也可以设置为0表示阻塞,一直监听到有消息才返回。
当然,除了并发的线程和主线程通信。并发的线程之间也可以直接相互通信。
### 在并发的线程执行函数中获取当前线程ID
在上面的例子中,使用了```var id = __threadId()```,```__threadId()```函数可以获取当前线程的ID。
### 共享线程间储存的变量
除了线程间的通信,还可以使用共享变量进行交互。
function test Func ((() {
__threadSetData ((0,
function main (() { //ThreadId là 1, các thread được tạo với threadId là 1 sẽ được thực hiện trước, và các biến được lưu trữ cục bộ của các thread sẽ có hiệu lực miễn là các tài nguyên của các thread không được thu hồi var testThread = __Thread ((testFunc))
Sleep(1000)
// 输出 in main, get testFunc: 100
Log("in main, get testFunc:", __threadGetData(testThread, "testFunc")) // 取出键名为testFunc的值
} “`
Đây là một bản trình bày ngắn gọn về tất cả các chức năng.
Dao xươngNhập mã này để chạy mẹo: Error ReferenceError: '__Thread' is not defined at main (__FILE__:5)
Dao xươngThu thập và học hỏi
Nhà phát minh định lượngTrình quản lý nâng cấp