[उत्तर] जाओ stdout बफ़र नहीं होता। एक बफर किए गए संस्करण पर स्विच करना और मैन्युअल रूप से फ़्लश करना आपको इसकी अपेक्षा के करीब लाता है। एफएमटी से बचने से आप जितनी जल्दी चाहें उतनी तेजी से दौड़ सकते हैं।FizzBuzz प्रोग्राम धीमा लगता है: क्यों?
मैं जाओ में FizzBuzz प्रोग्राम लिखने के लिए कोशिश कर रहा हूँ।
func main() {
for i := 1; i <= 1000000; i++ {
fmt.Println(fizzbuzz(i))
}
}
func fizzbuzz(n int) string {
fizzy := n%3 == 0
buzzy := n%5 == 0
switch {
case fizzy && buzzy:
return "FizzBuzz"
case fizzy:
return "Fizz"
case buzzy:
return "Buzz"
default:
return fmt.Sprint(n)
}
}
जब मैं इसे 1 से दस लाख तक के लिए चलाता हूं तो इसे पूरा करने के लिए केवल एक सेकंड के भीतर लगते हैं। जब मैं सी, जंग, हास्केल या अजगर में बराबर प्रोग्राम लिखने इसे शून्य सेकंड (जंग और हास्केल) के आधे सेकंड (अजगर) से कहीं भी ले जाता है।
यह अपेक्षित है करने के लिए हो सकता है, या मैं कुछ जाओ फू याद आ रही है? दूसरी भाषाओं की तुलना में जाना धीमा क्यों लगता है?
[संपादित करें]
प्रोफाइलर साथ चल रहा है के रूप में रॉबर्ट हार्वे ने सुझाव दिया।
ऐसा लगता है कि 100% समय एफएमटी (* एफएमटी) .fmt_complex में बिताया जाता है, जिसे मैं अनुमान लगा रहा हूं Println (?) से संबंधित है। इसके अलावा strconv.Itoa बजाय fmt.Sprint के साथ कार्यक्रम की कोशिश की और मैं मामूली प्रदर्शन वृद्धि (~ 0.2s), लेकिन एक ही मूल परिणाम प्राप्त।
यह मुद्रण है कि धीमी है और यदि ऐसा है तो क्यों है?
[संपादित करें]
jgritty बराबर अजगर कार्यक्रम और समय के लिए। मुझे दिलचस्पी है कि प्रिंटिंग धीमी क्यों है? उन दृश्यों के पीछे कुछ कर रहा हूं जिनके बारे में मुझे पता नहीं है?
$ cat fizzbuzz.py
def fizzbuzz(n):
fizzy = n%3 == 0
buzzy = n%5 == 0
if fizzy and buzzy:
return "FizzBuzz"
elif fizzy:
return "Fizz"
elif buzzy:
return "Buzz"
else:
return ("%u" % n)
def main():
for i in range(1, 10**6):
print(fizzbuzz(i))
main()
$ time pypy3 fizzbuzz.py >/dev/null
real 0m0.579s
user 0m0.545s
sys 0m0.030s
http://blog.golang.org/profiling-go-programs –
ध्यान दें कि हास्केल एक आलसी भाषा है; यह संभवतः आपके परिणामों का मूल्यांकन नहीं कर रहा है जब तक कि आप वास्तव में आउटपुट के लिए नहीं पूछते। जंग की सबसे अधिक संभावना है। –
शायद उन अन्य भाषाओं की तुलना में शुरू होने में अधिक समय लगता है? क्या होगा यदि आपने प्रोग्राम प्रक्रिया को अधिक डेटा बनाने का प्रयास किया है तो इसे चलाने में लगभग 10 सेकंड लगते हैं? –