class Scheduler {
constructor() {
this.tasks = [], // 待執行的任務
this.usingTask = [] // 正在執行的任務
}
// promiseCreator 是一個非同步函式,return Promise
add(promiseCreator) {
return new Promise((resolve, reject) => {
promiseCreator.resolve = resolve
if (this.usingTask.length < 2) {
this.usingRun(promiseCreator)
} else {
this.tasks.push(promiseCreator)
}
})
}
usingRun(promiseCreator) {
this.usingTask.push(promiseCreator)
promiseCreator().then(() => {
promiseCreator.resolve()
this.usingMove(promiseCreator)
if (this.tasks.length > 0) {
this.usingRun(this.tasks.shift())
}
})
}
usingMove(promiseCreator) {
let index = this.usingTask.findIndex(promiseCreator)
this.usingTask.splice(index, 1)
}
}
const timeout = (time) => new Promise(resolve => {
setTimeout(resolve, time)
})
const scheduler = new Scheduler()
const addTask = (time, order) => {
scheduler.add(() => timeout(time)).then(() => console.log(order))
}
addTask(400, 4)
addTask(200, 2)
addTask(300, 3)
addTask(100, 1)
// 2, 4, 3, 1
複製程式碼
javascript 實現一個帶併發限制的非同步排程器,保證同時最多執行2個任務
相關文章
- 實現一個併發任務執行框架框架
- laravel框架任務排程(定時執行任務)Laravel框架
- Android如何保證一個執行緒最多隻能有一個LooperAndroid執行緒OOP
- celery 與 flask 實現非同步任務排程Flask非同步
- Java併發程式設計(二)如何保證執行緒同時/交替執行Java程式設計執行緒
- 深入 Java Timer 定時任務排程器實現原理Java
- 使用Java實現定時任務排程Java
- Appium 最多能夠同時併發多少個手機APP
- 封裝一個阻塞佇列,輕鬆實現排隊執行任務功能!封裝佇列
- 如何在Java中實現非同步任務排程?Java非同步
- crontab+shell 實現每秒執行一個任務
- 基於Hyperf開發的任務排程系統.支援任務投遞,DAG任務編排(多個任務使用同一個事務).
- AsyncTask實現非同步任務執行非同步
- 一個簡單的基於 Redis 的分散式任務排程器 —— Java 語言實現Redis分散式Java
- 23行程式碼實現一個帶併發數限制的fetch請求函式行程函式
- Aloha:一個分散式任務排程框架分散式框架
- 【c#】分享一個簡易的基於時間輪排程的延遲任務實現C#
- Flink - Task 任務排程執行流程
- linux實現一個定時任務Linux
- 怎樣實現一個非阻塞的超時重試任務佇列佇列
- 實現一個任務排程系統,看這篇文章就夠了
- CloseableHttpClient 連線超時導致XxlJob排程阻塞,影響排程任務的執行HTTPclient
- Linux 中 Laravel 任務排程不執行LinuxLaravel
- PHP定時執行任務的實現PHP
- Java併發實戰(六) 任務執行Java
- 今天,總監說要一個任務排程的列表。
- goroutine併發執行多個任務並依次返回結果2——sync.WaitGroupGoAI
- 一個輕量級的分散式定時任務排程平臺-Cloudtask分散式Cloud
- goroutine併發執行多個任務並依次返回結果Go
- 什麼?一個核同時執行兩個執行緒?執行緒
- 程式執行緒、同步非同步、阻塞非阻塞、併發並行執行緒非同步並行
- Linux 定時任務排程Linux
- 任務排程並行演算法的Java簡單實現並行演算法Java
- 任務排程並行演算法的Python簡單實現並行演算法Python
- Nachos實驗實現執行緒id、限制執行緒數和更改排程演算法(按優先順序排程)執行緒演算法
- 基於Azkaban的任務定時排程實踐
- LeetCode 621 任務排程器LeetCode
- 資料排程元件:基於Azkaban協調時序任務執行元件