Go Academy · पाठ

सेमाफ़ोर प्रतिरूप

चैनल सेमाफ़ोर द्वारा समवर्तीता सीमित करना

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

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

सेमाफ़ोर क्या है?

सेमाफ़ोर किसी कार्य को एक साथ करने वाली गोरूटीन की संख्या सीमित करता है। यह संसाधनों की कमी होने से रोकता है (जैसे, बहुत अधिक खुले हुए DB कनेक्शन या बाहर भेजे जाने वाले HTTP अनुरोध)।

सेमाफ़ोर के रूप में बफ़र किया गया चैनल

N क्षमता वाला बफ़र किया गया चैनल गणना-आधारित सेमाफ़ोर की तरह काम करता है। Acquire करने पर चैनल में भेजा जाता है (चैनल भरने पर यह रुकता है); Release करने पर चैनल से प्राप्त किया जाता है।

sem := make(chan struct{}, 10)

func withSem(f func()) {
    sem <- struct{}{} // acquire
    defer func() { <-sem }() // release
    f()
}

सेमाफ़ोर के साथ प्रत्येक कार्य के लिए एक गोरूटीन

हर कार्य के लिए एक गोरूटीन शुरू करें, लेकिन सेमाफ़ोर से समवर्ती कार्यों की संख्या सीमित करें:

sem := make(chan struct{}, 5)
for _, job := range jobs {
    sem <- struct{}{}
    go func(j Job) {
        defer func() { <-sem }()
        process(j)
    }(job)
}

अंत में सेमाफ़ोर को खाली करना

सभी गोरूटीन शुरू करने के बाद सेमाफ़ोर को खाली करें, ताकि लौटने से पहले सभी के समाप्त होने की पुष्टि हो जाए:

// After the loop, acquire all N slots (blocks until all goroutines release)
for i := 0; i < cap(sem); i++ {
    sem <- struct{}{}
}

golang.org/x/sync/semaphore

भारित सेमाफ़ोर के लिए (जैसे, अलग-अलग संसाधन भार वाली गोरूटीन), semaphore.Weighted प्रकार का उपयोग करें:

s := semaphore.NewWeighted(100)
// acquire 10 units
if err := s.Acquire(ctx, 10); err != nil { return err }
defer s.Release(10)
// do work

संदर्भ-सचेत Acquire

भारित सेमाफ़ोर का Acquire संदर्भ का सम्मान करता है और सेमाफ़ोर उपलब्ध होने से पहले संदर्भ रद्द होने पर त्रुटि लौटाता है।

TryAcquire

s.TryAcquire(n) केवल तभी n इकाइयाँ प्राप्त करता है जब वे तुरंत उपलब्ध हों; अन्यथा false लौटाता है। यह बिना रुके जाँच करने के लिए उपयोगी है।

सेमाफ़ोर और वर्कर पूल में अंतर

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

HTTP समवर्तीता सीमित करना

बहुत अधिक समवर्ती रूप से भेजे जाने वाले अनुरोधों या आने वाले हैंडलर गोरूटीन को रोकने के लिए HTTP हैंडलर या क्लाइंट को सेमाफ़ोर से लपेटें।

डेटाबेस कनेक्शन सीमित करना

सेमाफ़ोर के बजाय db.SetMaxOpenConns(n) और db.SetMaxIdleConns(m) सेट करें — sql पैकेज कनेक्शन-पूल की समवर्तिता को आंतरिक रूप से संभालता है।

सेमाफ़ोर की निष्पक्षता

बफ़र किए गए चैनल के सेमाफ़ोर लगभग निष्पक्ष होते हैं (भेजने पर रुकी गोरूटीन के लिए FIFO), लेकिन इसकी सख्त गारंटी नहीं होती। भारित सेमाफ़ोर पैकेज अधिक सख्त निष्पक्षता गारंटी प्रदान करता है।

त्वरित जाँच

बफ़र्ड चैनल सेमाफोर को कैसे लागू करता है?

पुनरावलोकन: सेमाफोर पैटर्न

मुख्य बातें:

  • सरल सेमाफोर के लिए बफ़र्ड चैनल sem := make(chan struct{}, N)
  • अधिग्रहण करने के लिए भेजें; छोड़ने के लिए प्राप्त करें; छोड़ने की क्रिया हमेशा defer करें
  • भारित और संदर्भ-सचेत रूप के लिए golang.org/x/sync/semaphore
  • प्रत्येक समूह की समवर्तीता सीमा तय करने के लिए errgroup.SetLimit का उपयोग करें
शुरुआत निःशुल्क

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

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

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

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

क्या “सेमाफ़ोर प्रतिरूप” पाठ निःशुल्क है?

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

“सेमाफ़ोर प्रतिरूप” में मैं क्या सीखूँगा?

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

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

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

“सेमाफ़ोर प्रतिरूप” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

  1. Pipeline और Stage प्रतिरूप
  2. समवर्ती त्रुटि प्रबंधन के लिए errgroup
  3. सेमाफ़ोर प्रतिरूप
  4. लीक पहचान और रद्दीकरण
← Go Academy पर वापस जाएँ