Go Academy · पाठ

सुव्यवस्थित शटडाउन

वर्कर को साफ़-सुथरे ढंग से रोकें

पाठ 4, कुल 4 में से13 चरण

सुव्यवस्थित शटडाउन, CoddyKit पर Go Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Go Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

सुचारु समापन क्यों

लंबे समय तक चलने वाली गोरोरूटीन को यह बताना आवश्यक है कि कब रुकना है। सुचारु समापन worker को वर्तमान कार्य पूरा करने, संसाधन छोड़ने और बिना रिसाव या डेटा-हानि के बाहर निकलने देता है।

  • गोरोरूटीन का कोई रिसाव नहीं
  • आधे-अधूरे लेखन नहीं
  • प्रक्रिया का स्वच्छ समापन

done चैनल पैटर्न

एक पारंपरिक तरीका done चैनल है। इसे बंद करने पर इस पर सुन रही सभी गोरोरूटीन को रुकने का संकेत मिल जाता है, क्योंकि बंद चैनल से पढ़ना तुरंत लौटता है।

done := make(chan struct{})
// ... later
close(done)

रुकने के संकेतों के लिए select

worker select का उपयोग करके या तो कोई कार्य करता है या done चैनल का संकेत देखता है। जब done बंद होता है, तो संबंधित स्थिति सक्रिय हो जाती है और worker लौट जाता है।

for {
    select {
    case <-done:
        return
    case j := <-jobs:
        process(j)
    }
}

context.Context

आधुनिक और प्रचलित साधन context है। context.WithCancel आपको एक संदर्भ और रद्द करने वाला फ़ंक्शन देता है। cancel को कॉल करने पर संदर्भ का Done चैनल बंद हो जाता है।

ctx, cancel := context.WithCancel(context.Background())
defer cancel()

ctx.Done() पर सुनना

worker ctx.Done() पर select करते हैं। cancel को कॉल करने या समय-सीमा बीतने पर चैनल बंद हो जाता है और worker बाहर निकल जाता है।

select {
case <-ctx.Done():
    return ctx.Err()
case j := <-jobs:
    process(j)
}

worker की प्रतीक्षा करना

रुकने का संकेत देना पर्याप्त नहीं है; आपको worker के वास्तव में पूरा होने की प्रतीक्षा भी करनी चाहिए। एक sync.WaitGroup उनका हिसाब रखता है, ताकि main तब तक रुक सके जब तक गिनती शून्य न हो जाए।

var wg sync.WaitGroup
wg.Add(1)
go func() {
    defer wg.Done()
    runWorker(ctx)
}()
// ... later
cancel()
wg.Wait()

संदर्भ के साथ समय-सीमा

context.WithTimeout एक अवधि के बाद अपने-आप रद्द हो जाता है। इससे यह सीमा तय होती है कि जबरन बाहर निकलने से पहले समापन में कितना समय लग सकता है।

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()

एक पूर्ण सुचारु समापन

यह प्रोग्राम दो worker चलाता है, संदर्भ रद्द करता है और done प्रिंट करने से पहले दोनों के साफ़ तौर पर बाहर निकलने की प्रतीक्षा करता है।

package main

import (
    "context"
    "fmt"
    "sync"
    "time"
)

func worker(ctx context.Context, id int, wg *sync.WaitGroup) {
    defer wg.Done()
    for {
        select {
        case <-ctx.Done():
            fmt.Printf("worker %d stopping\n", id)
            return
        case <-time.After(50 * time.Millisecond):
        }
    }
}

func main() {
    ctx, cancel := context.WithCancel(context.Background())
    var wg sync.WaitGroup
    for i := 1; i <= 2; i++ {
        wg.Add(1)
        go worker(ctx, i, &wg)
    }
    time.Sleep(120 * time.Millisecond)
    cancel()
    wg.Wait()
    fmt.Println("all workers stopped")
}

चल रहे कार्य को पूरा होने देना

समापन के समय आप अक्सर चाहते हैं कि worker वह कार्य पूरा करें जिसे उन्होंने पहले ही शुरू कर दिया है। अंतिम लूप में बचे हुए कार्य पढ़िए, या नए कार्य लेना बंद करके वर्तमान कार्यों को पूरा होने दीजिए।

OS संकेत पकड़ना

वास्तविक सर्वर में, signal.NotifyContext रद्द करने की प्रक्रिया को SIGINT और SIGTERM से जोड़ता है। Ctrl+C दबाने पर वही सुचारु प्रक्रिया शुरू होती है जो मैन्युअल रद्द करने पर होती है।

ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
defer stop()

cancel() कभी न भूलें

WithTimeout का उपयोग करते समय भी हमेशा defer cancel() कीजिए। cancel को कॉल न करने पर संदर्भ की आंतरिक गोरोरूटीन और टाइमर, समय-सीमा समाप्त होने तक, रिसते रहते हैं।

त्वरित जाँच

समापन की अपनी समझ जाँचिए।

पुनरावलोकन

आपने सुचारु समापन सीखा:

  • रुकने का संकेत देने के लिए context.WithCancel या done चैनल का उपयोग करें
  • worker ctx.Done() पर select करते हैं
  • WaitGroup यह सुनिश्चित करता है कि सभी worker वास्तव में बाहर निकलें
  • वास्तविक सर्वर में रद्द करने की प्रक्रिया को OS संकेतों से जोड़ें
  • हमेशा defer cancel() करें
शुरुआत निःशुल्क

एआई शिक्षक के साथ Go सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “सुव्यवस्थित शटडाउन” पाठ निःशुल्क है?

हाँ — Go Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “सुव्यवस्थित शटडाउन” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“सुव्यवस्थित शटडाउन” में मैं क्या सीखूँगा?

वर्कर को साफ़-सुथरे ढंग से रोकें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Go Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Go Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Go Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“सुव्यवस्थित शटडाउन” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Go Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Go Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Worker Pool पैटर्न
  2. Fan-Out Fan-In
  3. Pipeline चरण
  4. सुव्यवस्थित शटडाउन
← Go Academy पर वापस जाएँ