2013-10-27 9 views
40

गो भाषा भाषा, प्रभावी गो और गो मेमोरी मॉडल की समीक्षा करने के बाद (संक्षेप में), मैं अभी भी थोड़ा अस्पष्ट हूं कि गो चैनल कैसे काम करते हैं।गो चैनल कैसे कार्यान्वित किए जाते हैं?

वे किस तरह की संरचना हैं? वे एक थ्रेड-सुरक्षित कतार/सरणी की तरह काम करते हैं।

क्या उनका कार्यान्वयन आर्किटेक्चर पर निर्भर करता है?

उत्तर

56

/src/pkg/runtime/chan.go में चैनलों के लिए स्रोत फ़ाइल (आपके जाने स्रोत स्रोत रूट से) है।

hchan एक चैनल के लिए केंद्रीय डेटा संरचना है, जो लिंक्ड सूचियां भेजती है और प्राप्त करती है (उनके गोरौटाइन और डेटा तत्व में पॉइंटर धारण करती है) और closed ध्वज। एक Lock एम्बेडेड संरचना है जिसे runtime2.go में परिभाषित किया गया है और यह ओएस के आधार पर म्यूटेक्स (फूटेक्स) या सेमफोर के रूप में कार्य करता है। लॉकिंग कार्यान्वयन बिल्ड टैग के आधार पर lock_futex.go (लिनक्स/ड्रैगनफ्लाई/कुछ बीएसडी) या lock_sema.go (विंडोज़/ओएसएक्स/प्लान 9/कुछ बीएसडी) में है।

चैनल ऑपरेशन सभी इस chan.go फ़ाइल में लागू किए गए हैं, ताकि आप मेकचन देख सकें, संचालन भेज सकें और प्राप्त कर सकें, साथ ही चुनिंदा निर्माण, बंद, लेन और कैप बिल्ट-इन्स।

चैनलों के आंतरिक कार्यों पर एक महान गहराई से स्पष्टीकरण के लिए, आपको दिमित्री व्याकोव द्वारा स्वयं Go channels on steroids पढ़ना होगा (गो कोर देव, goroutines, शेड्यूलर और अन्य चीजों के साथ चैनल)।

संबंधित मुद्दे