ایف ایم زیڈ میں جاوا اسکرپٹ زبان کا استعمال کرتے ہوئے حکمت عملی تیار کرتے وقت ، حکمت عملی کی ساخت کی وجہ سے مشورہ کیا جاتا ہے۔ اگر ہم آہنگ ڈیزائن والے منظرنامے ہیں تو ، اس کے ذریعہ منظور کیا جاتا ہے۔exchange.Go
فنکشنز کو کچھ انٹرفیسز کو بیک وقت کال کرنے کی ضرورت ہوتی ہے تاکہ کچھ بیک وقت منظرنامے کی ضرورت پوری کی جاسکے۔ لیکن اگر آپ چاہتے ہیں کہ واقعی ایک تھریڈ کو علیحدہ علیحدہ طور پر بنایا جاسکے تو اس میں ایک سلسلہ کارروائیوں کو انجام دینے کے لئے یہ ممکن نہیں ہے ، مثال کے طور پر ، جیسا کہ پائتھون زبان میں ،threading
میں نے اس کے بارے میں سوچا کہ میں اس کے بارے میں کیا سوچ رہا ہوں؟
FMZ پلیٹ فارم نے اس ضرورت کی بنیاد پر سسٹم کے بنیادی ڈھانچے کو اپ گریڈ کیا ہے۔ اس میں جاوا اسکرپٹ زبان کے لئے بھی حقیقی ملٹی تھریڈ سپورٹ شامل ہے۔ مزید خصوصیات میں شامل ہیں:
اس کے علاوہ، آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہے کہ کس طرح آپ کو اس کے بارے میں جاننے کی ضرورت ہے.
__Thread
فنکشن ایک تھریڈ بنا سکتا ہے اور ایک فنکشن کو بیک وقت انجام دے سکتا ہے۔ مثال کے طور پر ، ایک متوازی فنکشن بنانا ضروری ہے۔func1
,func1
فنکشن کیا کام کرتا ہے؟ ہم اسے 0 سے 9 تک جمع کر سکتے ہیں، اور اس کے ساتھ ساتھ اس عمل کو دیکھنے کے لئے، فنکشن func1 میں for loop کا استعمال کرتے ہوئے ہر بار روک دیا جاتا ہے.
function func1(sleepMilliseconds) {
var sum = 0
for (var i = 0 ; i < 10 ; i++) {
sum += i
Sleep(sleepMilliseconds)
Log("sum:", sum)
}
return sum
}
function main() {
// 使用__Thread函数并发创建一个线程,参数200即为func1函数的参数,
// 如果func1函数有多个参数,这里就具体传对应的参数
var thread1Id = __Thread(func1, 200)
// 这里需要等待线程Id为thread1Id的线程执行结果,否则main函数执行完就直接释放所有线程
var ret = __threadJoin(thread1Id)
Log("ret:", ret)
}
اگر آپ کے پاس ایک HTTP درخواست ہے تو ، آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہے۔
function main() {
let threads = [
"https://www.baidu.com",
"https://www.163.com"
].map(function(url) {
return __Thread(function(url) {
Log("GET", url)
return HttpQuery(url)
}, url)
})
threads.forEach(function(tid) {
Log(__threadJoin(tid))
})
}
اور اس مثال میں ہم نے آخری بار استعمال کیا ہے__threadJoin
ایک تقریب متوازی دھاگہ پر عملدرآمد مکمل ہونے کے لئے انتظار کر رہا ہے، متغیرret
وصول کریں__threadJoin
فنکشن کی واپسی کی قیمت، ہم نے اس کی واپسی کی قیمت کو پرنٹ کیا ہے، اور ہم اس متوازی تار پر عملدرآمد کے مخصوص نتائج کو دیکھ سکتے ہیں.
// id:线程ID,terminated:是否被强制停止,elapsed:耗时(纳秒),ret:线程执行函数的返回值
ret: {"id":1,"terminated":false,"elapsed":2004884301,"ret":45}
function func1(sleepMilliseconds) {
var sum = 0
for (var i = 0 ; i < 10 ; i++) {
sum += i
Sleep(sleepMilliseconds)
Log("sum:", sum)
}
return sum
}
function main() {
var thread1Id = __Thread(func1, 200)
Sleep(1000)
retThreadTerminate = __threadTerminate(thread1Id)
Log(retThreadTerminate) // true
}
یا مثال کے طور پر، ایک تھریڈ بنانے کے بعد، ایک سیکنڈ کے انتظار کے بعد تھریڈ کو ختم کرنے پر مجبور کیا جا سکتا ہے۔
بنیادی طور پر تاروں کے درمیان مواصلات کے لئے استعمال کیا جاتا ہے__threadPostMessage
افعال اور__threadPeekMessage
فنکشن۔ آئیے اس کی ایک سادہ مثال دیکھتے ہیں:
function func1() {
var id = __threadId()
while (true) {
var postMsg = "来自id:" + id + "的线程函数func1的消息"
__threadPostMessage(0, postMsg) // 发送消息到主线程
var peekMsg = __threadPeekMessage() // 接收来自其它线程的消息
Log(peekMsg)
Sleep(5000)
}
}
function main() {
var threadId = __Thread(func1)
while (true) {
var postMsg = "来自主线程的main函数的消息"
__threadPostMessage(threadId, postMsg)
var peekMsg = __threadPeekMessage()
Log(peekMsg, "#FF0000") // #FF0000 , 设置日志为红色用于区分
Sleep(5000)
}
}
__threadPostMessage
فنکشن کسی تھریڈ کو پیغام بھیجنے کے لئے استعمال ہوتا ہے ، پہلی پیرامیٹر اس بات کی نشاندہی کرتی ہے کہ کس تھریڈ کو بھیجا گیا ہے ، دوسری پیرامیٹر پیغام بھیجنے والی ہے ، یہ سٹرنگ ، عددی قیمت ، صف ، JSON آبجیکٹ وغیرہ ہوسکتی ہے۔ یہ متوازی تھریڈ فنکشن میں مین تھریڈ کو پیغام بھیج سکتا ہے ، جس کی شناخت کی تعریف 0 ہے۔
__threadPeekMessage
یہ فنکشن کسی تھریڈ کے ذریعے بھیجے گئے پیغامات کی نگرانی کے لیے استعمال ہوتا ہے۔ اس میں ٹائم ٹائم (ملی سیکنڈ) یا بلاک کرنے کے لیے 0 مقرر کیا جا سکتا ہے۔
یقینا، ہم آہنگ دھاگوں اور اہم دھاگوں کے علاوہ، ہم آہنگ دھاگوں کے درمیان بھی براہ راست بات چیت کی جا سکتی ہے۔
اس مثال میں، یہ استعمال کیا جاتا ہےvar id = __threadId()
,__threadId()
فنکشن موجودہ تھریڈ کا آئی ڈی حاصل کرسکتا ہے۔
تھریڈ کے مابین مواصلات کے علاوہ ، مشترکہ متغیرات کا استعمال کرکے بات چیت کی جاسکتی ہے۔
function testFunc() {
__threadSetData(0, "testFunc", 100) // 储存在当前线程环境,键值对 testFunc : 100
Log("testFunc执行完毕")
}
function main() {
// threadId为1 ,创建的threadId为1的线程会先执行完,只要线程资源没有被回收,线程本地储存的变量就有效
var testThread = __Thread(testFunc)
Sleep(1000)
// 输出 in main, get testFunc: 100
Log("in main, get testFunc:", __threadGetData(testThread, "testFunc")) // 取出键名为testFunc的值
}
یہ تمام خصوصیات کا ایک مختصر مظاہرہ ہے۔
ہڈیوں کا چاقواس حکمت عملی کو چلانے کے لئے نقل کریں: غلطی ReferenceError: '__Thread' is not defined at main (__FILE__:5)
ہڈیوں کا چاقوجمع کرنا سیکھنا
ایجاد کنندہ کوانٹائزیشناپ گریڈ ٹاسٹر