resume और yield
resume/yield से कॉलर और कोरूटीन के बीच डेटा का आदान-प्रदान करें।
resume और yield, CoddyKit पर Lua Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Lua Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
कॉरूटीन में मान भेजना
पहले coroutine.resume को दिए गए तर्क कॉरूटीन के मुख्य फ़ंक्शन के पैरामीटर बन जाते हैं। बाद में किए गए resume कॉल के तर्क उस coroutine.yield() कॉल से लौटाए जाते हैं, जिसने कॉरूटीन को रोका था।
local co = coroutine.create(function(a, b)
print("received:", a, b) -- 10 20
local c = coroutine.yield() -- pauses
print("after yield:", c) -- 30
end)
coroutine.resume(co, 10, 20) -- first call: passes a,b
coroutine.resume(co, 30) -- subsequent: passed to yieldyield से मिलने वाले मान
coroutine.yield(val1, val2) को दिए गए मान उस coroutine.resume() कॉल के लौटाए गए मान बन जाते हैं, जो yield पर रुकी थी। इसलिए yield कॉल करने वाले को मान "लौटाती" है।
local co = coroutine.create(function()
coroutine.yield(1, "hello")
coroutine.yield(2, "world")
return 3, "done"
end)
local ok, a, b = coroutine.resume(co)
print(ok, a, b) -- true 1 hello
ok, a, b = coroutine.resume(co)
print(ok, a, b) -- true 2 world
ok, a, b = coroutine.resume(co)
print(ok, a, b) -- true 3 doneदोतरफ़ा संचार
कॉरूटीन वास्तविक दोतरफ़ा संचार संभव बनाती हैं: कॉल करने वाला resume के ज़रिए डेटा भेजता है, कॉरूटीन उसे संसाधित करके परिणाम वापस yield करती है। प्रत्येक resume/yield एक समकालिक आदान-प्रदान होता है।
local co = coroutine.create(function(x)
while true do
x = coroutine.yield(x * x) -- yield x^2, get next x
end
end)
coroutine.resume(co) -- start (x=nil initially)
local ok, sq
ok, sq = coroutine.resume(co, 3); print(sq) -- 9
ok, sq = coroutine.resume(co, 5); print(sq) -- 25
ok, sq = coroutine.resume(co, 7); print(sq) -- 49उत्पादक-उपभोक्ता
कॉरूटीन का पारंपरिक पैटर्न: उत्पादक एक-एक करके आइटम yield करता है; उपभोक्ता को अगला आइटम चाहिए होने पर उत्पादक को फिर से चलाता है। दोनों में से कोई भी दूसरे से आगे नहीं चलता — यह पूर्ण समकालिकता है।
local function producer(items)
return coroutine.create(function()
for _, item in ipairs(items) do
coroutine.yield(item)
end
end)
end
local pro = producer({"apple","banana","cherry"})
-- Consumer drives the loop
while true do
local ok, item = coroutine.resume(pro)
if not ok or item == nil then break end
print("consumed:", item)
endकॉरूटीन के साथ पाइपलाइन
कई कॉरूटीन को एक पाइपलाइन की तरह जोड़ें। प्रत्येक चरण पिछले चरण से पढ़ता है और अगले चरण को yield करता है। अंतिम चरण आखिरी चरण को फिर से चलाकर पाइपलाइन को संचालित करता है, जिससे यह प्रक्रिया पूरी शृंखला में पीछे की ओर फैलती है।
local function source(items)
return coroutine.wrap(function()
for _, v in ipairs(items) do coroutine.yield(v) end
end)
end
local function filter(iter, pred)
return coroutine.wrap(function()
for v in iter do
if pred(v) then coroutine.yield(v) end
end
end)
end
local function map(iter, fn)
return coroutine.wrap(function()
for v in iter do coroutine.yield(fn(v)) end
end)
end
local pipeline = map(filter(source({1,2,3,4,5,6}),
function(n) return n%2==0 end),
function(n) return n*n end)
for v in pipeline do io.write(v.." ") end
print() -- 4 16 36अतुल्यकालिक अनुकरण के लिए कॉरूटीन
OS थ्रेड के बिना भी कॉरूटीन अतुल्यकालिक कार्रवाइयों का अनुकरण कर सकती हैं: "प्रतीक्षा" करते समय yield करें और जब "परिणाम" तैयार हो जाए, तब फिर से चलाएँ। एक शेड्यूलर परिणाम के साथ कॉरूटीन को फिर से चलाता है।
local scheduler = {}
local current = nil
local function await(key)
coroutine.yield(key) -- tell scheduler what we need
return coroutine.yield() -- wait for result
end
local co = coroutine.create(function()
local data = await("fetch:users")
print("Got users:", data)
end)
-- Start coroutine
local ok, want = coroutine.resume(co)
print("Coroutine wants:", want) -- fetch:users
-- Simulate delivering the result:
coroutine.resume(co, {{name="Alice"},{name="Bob"}})किसी फ़ंक्शन के अंदर yield
आप केवल सबसे बाहरी फ़ंक्शन से ही नहीं, बल्कि कॉरूटीन द्वारा बुलाए गए किसी भी फ़ंक्शन के अंदर से yield कर सकते हैं। yield सभी नेस्टेड कॉल के ज़रिए ऊपर जाती हुई resume तक पहुँचती है। इसे "निलंबित कॉल स्टैक" कहा जाता है।
local function yieldTwice(label)
coroutine.yield(label .. ":1")
coroutine.yield(label .. ":2")
end
local co = coroutine.create(function()
yieldTwice("A")
yieldTwice("B")
end)
for i = 1, 4 do
local ok, v = coroutine.resume(co)
print(v)
end
-- A:1, A:2, B:1, B:2कॉरूटीन थ्रेड नहीं हैं
Lua की कॉरूटीन OS थ्रेड नहीं हैं। एक समय में केवल एक कॉरूटीन चलती है; इनमें प्रीएम्प्शन या समानांतरता नहीं होती। सभी कॉरूटीन एक ही OS थ्रेड साझा करती हैं। वास्तविक समानांतरता के लिए अलग-अलग OS थ्रेड में कई Lua स्टेट चाहिए।
-- This is NOT parallel - interleaved execution
local function task(name, n)
for i = 1, n do
print(name, i)
coroutine.yield()
end
end
local t1 = coroutine.create(function() task("A", 3) end)
local t2 = coroutine.create(function() task("B", 3) end)
-- Must explicitly schedule:
for _ = 1, 3 do
coroutine.resume(t1)
coroutine.resume(t2)
end
-- A1, B1, A2, B2, A3, B3 (interleaved, NOT parallel)resume के बाद स्थिति
फिर से चलाना है या नहीं, यह तय करने के लिए कॉरूटीन की स्थिति जाँचें। जो कॉरूटीन अपना काम पूरा कर चुकी है (अपने मुख्य फ़ंक्शन से लौट चुकी है), वह "समाप्त" होती है — उसे फिर से चलाने पर false और एक त्रुटि मिलती है। लूप में फिर से चलाने से पहले हमेशा स्थिति जाँचें।
local co = coroutine.create(function()
for i = 1, 3 do coroutine.yield(i) end
end)
while coroutine.status(co) ~= "dead" do
local ok, val = coroutine.resume(co)
if ok and val ~= nil then
print("val:", val)
end
end
-- val: 1, val: 2, val: 3एक resume में कई yield
coroutine.resume की एक कॉल कॉरूटीन को अगले yield तक या उसके समाप्त होने तक चलाती है। आप एक ही resume में कॉरूटीन से कई बार yield नहीं करा सकते — प्रत्येक yield कॉरूटीन को रोककर अगले resume की प्रतीक्षा करती है।
local co = coroutine.create(function()
local x = coroutine.yield("first")
print("got:", x)
local y = coroutine.yield("second")
print("got:", y)
end)
local _, v1 = coroutine.resume(co) -- starts, yields "first"
print("yielded:", v1) -- first
local _, v2 = coroutine.resume(co, "a") -- passes "a", yields "second"
print("yielded:", v2) -- second
coroutine.resume(co, "b") -- passes "b", coroutine endsत्वरित जाँच
coroutine.yield(v1, v2) को दिए गए मान किस रूप में बदल जाते हैं?
पुनरावलोकन: resume और yield
सारांश:
- पहले resume के तर्क → कॉरूटीन के मुख्य फ़ंक्शन के पैरामीटर
- बाद के resume के तर्क → पिछले yield() द्वारा लौटाए गए मान
- yield के तर्क → उस resume() द्वारा लौटाए गए मान जिसने yield को सक्रिय किया
- दोतरफ़ा संचार: प्रत्येक resume/yield एक आदान-प्रदान है
- किसी भी नेस्टेड फ़ंक्शन से yield करना संभव है
- कॉरूटीन: सहकारी, समानांतर नहीं
एआई शिक्षक के साथ Lua सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 40
- पाठ
- 159
अक्सर पूछे जाने वाले प्रश्न
क्या “resume और yield” पाठ निःशुल्क है?
हाँ — Lua Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “resume और yield” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“resume और yield” में मैं क्या सीखूँगा?
resume/yield से कॉलर और कोरूटीन के बीच डेटा का आदान-प्रदान करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Lua Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Lua Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Lua Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“resume और yield” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Lua Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Lua Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- कोरूटीन बनाना
- resume और yield
- कोरूटीन की स्थिति
- उत्पादक-उपभोक्ता पैटर्न