2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
गोरूटीन्स् एकस्मिन् एव पतास्थाने चाल्यन्ते, अतः साझास्मृतेः अभिगमनं समन्वयितं भवितुमर्हति ।गोरूटीनः स्मृतिसाझेदारी न कृत्वा, संचारद्वारा स्मृतिं साझां कुर्वन्ति ।
सन्दर्भप्रकारचैनलः CSP मोडस्य विशिष्टं कार्यान्वयनम् अस्ति तथा च बहुविधगोरूटीनसञ्चारार्थं उपयुज्यते । समवर्तीसुरक्षां सुनिश्चित्य आन्तरिकरूपेण समन्वयनं कार्यान्वितं करोति ।
map इव channel इत्येतत् make इत्यनेन निर्मितस्य अन्तर्निहितस्य data structure इत्यस्य सन्दर्भः अपि अस्ति ।
यदा वयं कञ्चन चैनल् प्रतिलिपिं कुर्मः अथवा फंक्शन् पैरामीटर् पासिंग् कृते तस्य उपयोगं कुर्मः तदा वयं केवलं चैनल् सन्दर्भं प्रतिलिखयामः, अतः कॉलरः आह्वानकर्ता च समानं चैनल् ऑब्जेक्ट् सन्दर्भयिष्यन्ति । अन्येषां सन्दर्भप्रकारानाम् इव चैनलस्य शून्यमूल्यं शून्यम् अस्ति ।
यदा भवन्तः चैनल् परिभाषयन्ति तदा भवन्तः चैनल् प्रति प्रेषितानां मूल्यानां प्रकारं अपि परिभाषितुं अर्हन्ति । अन्तर्निर्मित make() फंक्शन् इत्यस्य उपयोगेन चैनल्स् निर्मातुं शक्यन्ते:
make (chan Type)
make (chan Type,capacity)
channel<-value //发送value 到channel
<-channel //接收并将其丢弃
x:=<-channel //从 channel 中接收数据,并賦偵给x
x,ok:=<-channel //功能同上,同时检查通道是否已关闭或者是否为空
पूर्वनिर्धारितरूपेण, दत्तांशं प्राप्य प्रेषयन् च चैनलः अवरुद्धः भवति, यावत् अन्यः अन्तः सज्जः नास्ति, येन स्पष्टतालानां आवश्यकतां विना goroutine समन्वयनं सरलं भवति
अबफरयुक्तः चैनलः एकः चैनलः अस्ति यस्य प्राप्तेः पूर्वं किमपि मूल्यं रक्षितुं क्षमता नास्ति ।
एतादृशस्य चैनलस्य आवश्यकता अस्ति यत् प्रेषण-ग्राहक-कार्यक्रमं पूर्णं कर्तुं प्रेषक-गोरूटीन्-ग्राहक-गोरूटीन् च एकस्मिन् समये सज्जाः भवेयुः । यदि एकस्मिन् समये द्वौ गोरूटीनौ सज्जौ न स्तः तर्हि चैनल् प्रथमं प्रेषणं वा प्राप्तुं वा कार्यं कुर्वन्तं गोरूटीन् अवरुद्ध्य प्रतीक्षां कर्तुं प्रेरयिष्यति ।
चैनल् प्रति प्रेषणस्य ग्रहणस्य च एषः अन्तरक्रियाः स्वभावतः समकालिकः भवति । न कश्चित् क्रियायाः अन्यस्मात् स्वतन्त्रतया अस्तित्वं प्राप्तुं शक्नोति ।
निम्नलिखितचित्रं दर्शयति यत् कथं द्वौ गोरूटीनौ अबफर-चैनेल्-उपयोगेन मूल्यं साझां कर्तुं शक्नुवन्ति:
make (chan Type)//等价于make (chan Type,0)
यदि बफर आकारः निर्दिष्टः नास्ति तर्हि चैनल् समकालिकः भवति अतः प्रेषकः प्रेषयितुं सज्जः न भवति तथा ग्राहकः प्राप्तुं सज्जः न भवति तावत् यावत् अवरुद्धः भवति ।
बफरयुक्तः चैनलः एकः चैनलः अस्ति यः प्राप्तेः पूर्वं एकं वा अधिकं वा मूल्यं संग्रहीतुं शक्नोति ।
एतादृशस्य चैनलस्य आवश्यकता नास्ति यत् goroutine इत्यनेन प्रेषणं प्राप्तुं च एकस्मिन् समये पूर्णं कर्तव्यम् । चैनल्-मध्ये अपि भिन्नाः शर्ताः भविष्यन्ति ये प्रेषण-प्राप्ति-क्रियाः अवरुद्धयन्ति । receive क्रिया केवलं तदा एव अवरुद्धं करिष्यति यदा प्राप्तुं चैनले मूल्यं नास्ति । प्रेषणक्रिया केवलं तदा एव अवरुद्धा भविष्यति यदा प्रेषितं मूल्यं समायोजयितुं चैनले उपलब्धं बफरं नास्ति ।
एतेन बफर-अनबफर-चैनेल्-योः मध्ये महत् अन्तरं भवति: अनबफर-चैनेल्-इत्यनेन गारण्टी भवति यत् गोरूटीन्-प्रेषण-प्राप्तिः च एकस्मिन् समये आँकडानां आदान-प्रदानं करिष्यति: बफर-चैनेल्-मध्ये तादृशी गारण्टी नास्ति
make (chan Type,capacity)
यदि बफरक्षमता दत्ता भवति तर्हि चैनल् अतुल्यकालिकः भवति । यावत् बफरमध्ये दत्तांशप्रेषणार्थं अप्रयुक्तं स्थानं भवति अथवा प्राप्तुं शक्यमाणं दत्तांशं भवति तावत् संचारः अवरोधं विना प्रचलति ।
चैनल् ok इत्यस्य उपयोगं कर्तुं शक्नोति यत् चैनल् अद्यापि उद्घाटितः अस्ति वा यदि चैनल् बन्दः अस्ति तर्हि दत्तांशः न पठितः भविष्यति ।
num ,ok:=<-ch
यदि कश्चन चैनलः बन्दः अस्ति तर्हि ज्ञातुं शक्नोति।पूर्वनिर्धारितरूपेण, चैनल् द्वय-प्रश्ना अस्ति, अर्थात् भवान् तस्मै दत्तांशं प्रेषयितुं तस्मात् दत्तांशं प्राप्तुं च शक्नोति ।
परन्तु वयं प्रायः एकं चैनलं पैरामीटर् रूपेण पारितं पश्यामः तथा च मूल्यस्य उपयोगः एकस्मिन् दिशि अपेक्षितः भवति, केवलं दत्तांशं प्रेषयितुं वा केवलं दत्तांशं प्राप्तुं वा अस्मिन् समये वयं चैनलस्य दिशां निर्दिष्टुं शक्नुमः एकदिशायाः chamel चरस्य घोषणा अतीव सरलं भवति, यथा ।
var ch1 chan int //ch1双向
var ch2 chan<-float64 //ch2单向,只能用于写float64数据
var ch3 <-chan int //ch3单向,只能用于读int数据
chan<- इत्यस्य अर्थः अस्ति यत् दत्तांशः पाइप् मध्ये प्रविशति, दत्तांशः च पाइप् मध्ये लिखितः भवति, यत् आह्वानकर्त्रे निर्गच्छति ।
<-chan इत्यनेन सूचितं यत् दत्तांशः पाइपतः बहिः आगच्छति ।
एकं चैनलं अन्तर्निहितरूपेण एकदिशायां पङ्क्तौ परिवर्तयितुं शक्यते, केवलं प्राप्य केवलं प्रेषयितुं वा, परन्तु एकदिशायाः चैनलं सामान्यचैनलरूपेण परिवर्तयितुं न शक्यते;