用JS生成器函数(协程)模拟一个简单的销售票务的并发系统。
let TICKET_NUM = 0;
let TICKET_TOTAL = 0;
function* sale(name){
const saleName = name;
while (true) {
if ( TICKET_NUM <= 0 ) {
console.log(`${saleName} => No ticket`);
return;
}else {
TICKET_TOTAL++;
console.log(`${saleName} => sales the No.${TICKET_TOTAL} ticket`);
TICKET_NUM--;
}
yield;
}
}
let thread = async() => {
let pool = [sale("A"), sale("B"), sale("C"), sale("D")];
let len = pool.length;
let moniter = len;
TICKET_NUM = 2000;
while( true ) {
let id = parseInt( Math.random() * len );
let status = pool[id].next().done;
if ( status ) moniter--;
if ( moniter == 0 ) {
console.log("All tickets saled done...");
break;
}
}
}
thread();