-----The root function of the co-process multiplexingLocal function routine(fun, args) while(fun) DoFun, args =Coroutine. Yield (Table.Unpack(args));EndEnd-----Demo 1: Use a co-process to invoke different parameters and different functionsLocalSum = function(...) Localsum =0; forI=1,Select("#", ...) Dosum = sum +Select(i, ...);End returnSumEndLocalAVG = function(...) LocalN =Select("#", ...);if 0==n Then return 0;Else returnSum (...)/N;EndEndLocalCO =Coroutine. Create (routine);Print(Coroutine. Resume (Co, Sum, {}));Print(Coroutine. Resume (Co, Sum, {1}));Print(Coroutine. Resume (Co, Sum, {1,2}));Print(Coroutine. Resume (Co, Sum, {1,2,3}));Print(Coroutine. Resume (Co, AVG, {}));Print(Coroutine. Resume (Co, AVG, {1}));Print(Coroutine. Resume (Co, AVG, {1,2}));Print(Coroutine. Resume (Co, AVG, {1,2,3}));Print();Print();-----Demo 2: Create a and b two threads, repeat calls with different users-----Multi-stage Login functionsLocalLogin = function(user, pass) Print(User:"Step1");Coroutine. yield ();Print(User:"Step2");Coroutine. yield ();Print(User:"Step3");Coroutine. yield ();Print(User:"Step4");Coroutine. yield ();if(user = = pass) Then Print(User:"SUCC");Else Print(User:"Fail");EndEnd-----Create two co-processes: A and BLocalCoA =Coroutine. Create (routine);LocalCoB =Coroutine. Create (routine);-----Pass the USER1,USER2 information to the login login function and simulate the event succession distribution function callPrint();Coroutine. Resume (CoA, Login, {"user1","user1"});Coroutine. Resume (CoB, Login, {"User2","Test2"});Print();Coroutine. Resume (CoA);Coroutine. Resume (CoA);Print();Coroutine. Resume (CoB);Coroutine. Resume (CoB);Print();Coroutine. Resume (CoB);Coroutine. Resume (CoA);Print();Coroutine. Resume (CoB);Coroutine. Resume (CoA);Print();Print();-----Multiplexing A and B, calling User3,user4Print();Coroutine. Resume (CoA, Login, {"User3","Test3"});Coroutine. Resume (CoB, Login, {"User4","User4"});Print();Coroutine. Resume (CoA);Coroutine. Resume (CoA);Print();Coroutine. Resume (CoB);Coroutine. Resume (CoB);Print();Coroutine. Resume (CoB);Coroutine. Resume (CoA);Print();Coroutine. Resume (CoB);Coroutine. Resume (CoA);
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
LUA co-process multiplexing