গো এত আস্তে (জাভার তুলনায়) কেন?


109

যেমনটি আমরা 2010 সালে কম্পিউটার ল্যাঙ্গুয়েজ বেঞ্চমার্কস গেম থেকে দেখতে পেলাম :

  • যান তুলনায় ধীর গড় 10x হয় সি
  • গো জাভা তুলনায় আস্তে আস্তে 3x !?

এটি কীভাবে হতে পারে, মনে রাখবেন যে গো সংকলক কার্যকর করার জন্য নেটিভ কোড তৈরি করে?
গো জন্য অপরিণত সংকলক? বা গো ভাষার সাথে কিছু অভ্যন্তরীণ সমস্যা আছে?

সম্পাদনা:
বেশিরভাগ উত্তর গো ল্যাঙ্গুজের অভ্যন্তরীণ গতি অস্বীকার করে, দাবি করে যে সমস্যাটি অপরিণত সংকলকগুলিতেই রয়েছে।
অতএব আমি ফিবোনাচি সংখ্যা গণনা করার জন্য কিছু নিজস্ব পরীক্ষা করেছি : ইটিরেটিভ অ্যালগরিদম sameসি (ও 3 বিকল্পের সাহায্যে) হিসাবে গতিতে গো (ফ্রিবিএসডি, 6 জি) তে সঞ্চালিত হয় । নিস্তেজ recursive এক 2 timesসি এর চেয়ে ধীর গতিতে চলে (-O3 বিকল্পের সাথে; -O0 - একই)। তবে আমি বেঞ্চমার্কস গেমের মতো 10x পড়তে দেখিনি।


36
সত্যি কথা বলতে, সি ছদ্মবেশে ASM, এবং জাভা এই দিনগুলিতে হুডের নীচে কিছু গুরুতর আশাবাদী।
ম্যাথু শার্লে

16
সম্ভবত বেঞ্চমার্কও গো এর শক্তি প্রতিফলিত করে না। এটি হতে পারে যে অন্যান্য মানদণ্ডগুলি এর চেয়ে আসলে দ্রুত। তদাতিরিক্ত, প্রায়শই এটি সম্পাদন নয় তবে কোডটির পাঠযোগ্যতা যা সর্বাধিক গণনা করা হয়।
এক্সারেনন

7
@ এক্সট্রেনন: আমি সম্মত মনে রাখবেন, গো গুগলের জন্য ডিজাইন করা হয়েছে এবং গুগল নিয়মিতভাবে 2 মিলিয়ন কোরে কোড চালায় । আমার বিশ্বাস, বেঞ্চমার্কস গেমটি কেবলমাত্র 4 টি কোর ব্যবহার করে।
Jörg W Mittag

4
@ এক্সট্রেনন: আমি সাধারণভাবে একমত, তবে গো নির্দিষ্টভাবে মনের সাথে গতির সাথে ডিজাইন করা হয়েছিল, "ফলস্বরূপ প্রোগ্রামগুলি তুলনীয় সি বা সি ++ কোড হিসাবে প্রায় দ্রুত চলে" "
shosti

4
আপনার প্রশ্নটি খুব বেশি ধরে নিয়েছে: "বেশিরভাগ উত্তর গো ল্যাঙ্গুজের অভ্যন্তরীণ ownিলেটি অস্বীকার করে" কোনও প্রশ্নের ক্ষেত্রে ব্যবহারের জন্য ভুল বাক্য। আপনার কাছে জিজ্ঞাসা করার প্রশ্ন রয়েছে, বা বিবৃতি দেওয়ার জন্য আপনার কাছে কি আছে? আপনার ত্রুটি বুঝতে দয়া করে c2.com/cgi/wiki?HostilStudent দেখুন ।
ক্রিস

উত্তর:


102

6 জি এবং 8 জি সংকলকগুলি বিশেষত অপ্টিমাইজ করছে না, তাই তারা উত্পন্ন কোডটি বিশেষত দ্রুত নয়।

তারা নিজেরাই দ্রুত চালানোর জন্য এবং ঠিক আছে এমন কোড তৈরি করার জন্য ডিজাইন করা হয়েছে (কিছুটা অপ্টিমাইজেশান রয়েছে)। gccgoজিসিসির বিদ্যমান অপটিমাইজেশন পাসগুলি ব্যবহার করে এবং এটি সি এর সাথে আরও বেশি গুরুত্বপূর্ণ তুলনা সরবরাহ করতে পারে তবে জিসিসিগো এখনও বৈশিষ্ট্য-সম্পূর্ণ নয়।

মানদণ্ডের পরিসংখ্যানগুলি বাস্তবায়নের মানের সম্পর্কে প্রায় সম্পূর্ণ quality এই জাতীয় ভাষাটির সাথে তাদের বিশাল পরিমাণে করার দরকার নেই, বাস্তবায়নটি রানটাইম সমর্থনকারী ভাষার বৈশিষ্ট্যগুলি ব্যয় করে যা ব্যঞ্চমার্কের সত্যিই প্রয়োজন হয় না except বেশিরভাগ সংকলিত ভাষায় পর্যাপ্ত চৌকস সংকলক তত্ত্বে যা প্রয়োজন নেই তা ছিনিয়ে নিতে পারে, তবে একটি পয়েন্ট আসে যেখানে আপনি ডেমোকে জালিয়াতি করছেন, যেহেতু ভাষার খুব কম ব্যবহারকারীরাই এমন প্রোগ্রাম লিখবেন যা সেই বৈশিষ্ট্যটি ব্যবহার করে নি write । জিনিসগুলি সম্পূর্ণরূপে সরানো ছাড়াই পথ থেকে সরিয়ে নেওয়া (উদাহরণস্বরূপ জেআইটি-সংকলিত জাভাতে ভার্চুয়াল কল গন্তব্যগুলির পূর্বাভাস দেওয়া) জটিল হতে শুরু করে।

FWIW, 'যাও যখন আমি কটাক্ষপাত গ্রহণ ছিল (পূর্ণসংখ্যা উপরন্তু একটি লুপ, মূলত) সঙ্গে আমার নিজের খুব তুচ্ছ পরীক্ষা মধ্যে পরিসীমা ফাস্ট শেষ দিকে gccgo উত্পাদিত কোড gcc -O0এবং gcc -O2জন্য সমতুল্য সি যেতে না মজ্জাগতভাবে ধীর হয়, সংকলকগণ এখনও সবকিছু করেন না। 10 মিনিটের পুরানো ভাষার জন্য খুব আশ্চর্যরকম নয়।


7
তদুপরি, এটিও হতে পারে যে কম্পিউটার ল্যাঙ্গুয়েজ বেঞ্চমার্কস গেমের গো প্রোগ্রামগুলি সি এবং জাভাগুলির মতো অনুকূলিত নয়।
el.pescado

Gcc -O0 এবং gcc -O3 এর মধ্যে কী? এমনকি সংকল্পগুলি "সমস্ত কিছু" করবে এমন অভিপ্রায় কি আছে?
igouy

@ আইগোই: ভাল, আমি নিশ্চিত যে জিসিগো একটি জঞ্জাল সংগ্রহ করবে যা বর্তমানে তা করছে না। জি সংকলকগুলিতে যাওয়ার জন্য এখনও কিছু বৈশিষ্ট্য রয়েছে, উদাহরণস্বরূপ তারা বর্তমানে হোস্ট থ্রেডগুলি বিশেষত ভাল ব্যবহার করে না (বিশেষত, গোরোটিন শিডিয়ুলার প্রাক-উদ্রেককারী নয়)। এর বাইরে, আমি গুগলের পরিকল্পনাগুলি জানি না, জি সংকলকরা কখনও মারাত্মকভাবে অনুকূল হয়ে উঠবে, বা যদি কেবল জিসিসিগো হয়।
স্টিভ জেসোপ

1
@ এক্সিটরিয়াম: আমি মনে করি গো-এর উদ্দেশ্য হ'ল বাস্তবায়নের জন্য সমবায় অনুসারে সময় নির্ধারণের প্রয়োজন হবে না, তারা চাইলে প্রাক-শূন্য করতে পারে। উদাহরণস্বরূপ কোড. google.com/p/go/issues/detail?id=543 দেখুন , যা "অযৌক্তিক হিসাবে বন্ধ করা হয়নি, এই তথাকথিত বাগ সংশোধন করা গো ভাষার সংজ্ঞাটির বিরোধিতা করবে", যা হওয়া উচিত গো প্রয়োগের প্রাক-শূন্য করতে নিষেধ করা হয়েছে :-) সমস্যাটি এই বিষয়টির সাথে আরও জোরালো হয়েছিল যে ডিফল্টরূপে গো শুধুমাত্র একটি হোস্ট থ্রেড ব্যবহার করুক না কেন যতটা গোরোটাইন চলমান ছিল।
স্টিভ জেসোপ

6
উত্তরটি এখনই কিছুটা পুরানো হতে পারে। সম্প্রতি, গো 1.1 এর প্রথম বিটা প্রকাশিত হয়েছিল , তারা জানিয়েছে যে সংকলিত প্রোগ্রামগুলির পারফরম্যান্স প্রায় 30% থেকে 40% বৃদ্ধি পায়। কেউ দয়া করে এই পরীক্ষাগুলি আবার করুন।
ফুজ

51

গো এফএকিউ এর পরবর্তী প্রকাশে, নীচের মতো কিছু পাওয়া উচিত।

কর্মক্ষমতা

কেন বেঞ্চমার্ক এক্স-তে খারাপভাবে পারফর্ম করে?

তুলনামূলক কর্মসূচীর জন্য সি এর কার্যকারিতা অর্জনের লক্ষ্যে গো-এর অন্যতম লক্ষ্য হ'ল কিছু মানদণ্ডে এটি পরীক্ষার / বেঞ্চের বেশ কয়েকটি সহ বেশ খারাপভাবে কাজ করে। ধীরে ধীরে লাইব্রেরিগুলির উপর নির্ভর করে যার জন্য তুলনামূলক পারফরম্যান্সের সংস্করণগুলি গোতে পাওয়া যায় না। উদাহরণস্বরূপ, পিডিজিটগুলি একাধিক নির্ভুল গণিত প্যাকেজের উপর নির্ভর করে এবং সি সংস্করণগুলি গো এর বিপরীতে জিএমপি ব্যবহার করে (যা অনুকূলিত এসেমব্লারে লেখা থাকে)। নিয়মিত এক্সপ্রেশনগুলির উপর নির্ভরশীল বেঞ্চমার্কগুলি (উদাহরণস্বরূপ) রেগেক্স-ডিএনএ, পিসিআরএর মতো অত্যন্ত অপ্টিমাইজড নিয়মিত এক্সপ্রেশন লাইব্রেরিগুলির সাথে গো এর স্টপগ্যাপ রিজেক্সপ প্যাকেজটির তুলনা করে।

বেঞ্চমার্ক গেমগুলি বিস্তৃত সুরের দ্বারা জিতেছে এবং বেশিরভাগ মানদণ্ডের গো সংস্করণগুলিতে মনোযোগ দেওয়া দরকার। আপনি যদি তুলনীয় সি এবং গো প্রোগ্রামগুলি পরিমাপ করেন (বিপরীত পরিপূরক একটি উদাহরণ) তবে আপনি দেখতে পাবেন যে এই স্যুটটি ইঙ্গিত করবে তার চেয়ে দুটি ভাষা কাঁচা পারফরম্যান্সের অনেক কাছাকাছি রয়েছে।

তবুও উন্নতির অবকাশ আছে। সংকলকগুলি ভাল তবে আরও ভাল হতে পারে, অনেকগুলি লাইব্রেরির জন্য বড় পারফরম্যান্সের কাজ প্রয়োজন, এবং আবর্জনা সংগ্রহকারী এখনও পর্যাপ্ত পর্যায়ে নেই (এমনকি এটি হলেও, অপ্রয়োজনীয় আবর্জনা তৈরি না করার বিষয়ে যত্ন নেওয়া একটি বিশাল প্রভাব ফেলতে পারে)।

এবং সাম্প্রতিক মেলিং তালিকার থ্রেড থেকে কম্পিউটার বেঞ্চমার্কস গেমের আরও কিছু বিশদ এখানে রইল।

জিসিগোতে আবর্জনা সংগ্রহ এবং কার্য সম্পাদন (1)

জিসিগোতে আবর্জনা সংগ্রহ এবং কার্য সম্পাদন (2)

এটি লক্ষ্য করা গুরুত্বপূর্ণ যে কম্পিউটার বেঞ্চমার্কস গেমটি কেবল একটি গেম। পারফরম্যান্স পরিমাপ এবং ক্ষমতা পরিকল্পনার অভিজ্ঞতার সাথে মনোযোগ সহকারে বাস্তব ও বাস্তব কাজের চাপের মতো মিল রয়েছে; তারা গেমস খেল না।


1
এবং এখানে একই থ্রেড থেকে কিছু বিবরণ যা আপনি বাদ দিয়েছেন - গ্রুপ. google.com/group/golang-nuts/msg/2e568d2888970308
igouy

3
এটা খেয়াল করেন যে, "benchmarks একটি পেয়ালা হল" গুরুত্বপূর্ণ - না শুধু benchmarks benchmarks খেলা প্রকাশিত - shootout.alioth.debian.org/flawed-benchmarks.php
igouy

18
(এবং সবাই ...) অবশ্যই এটি একটি এর "খেলা" , কিন্তু যখন আমি দেখি যে যেতে হয় শুধুমাত্র দুই বার এই benchmarks দ্রুততম তুলনায় ধীর, আমার প্রথম ছাপ রয়েছে "বাহ, যান ফাস্ট বলে মনে হয়" , কারণ আমি জানি এই benchmarks হয় ত্রুটিযুক্ত. বিপরীতে, আমি যখন রুবিকে দ্রুততমের চেয়ে times৫ গুণ কম গতিতে দেখি তখন আমি নিজেকেই "রুবিকে আমার পরবর্তী সাম্প্রতিক-সংখ্যাগত-নিবিড় প্রচেষ্টার জন্য ব্যবহার করব না" বলে মনে করি । সুতরাং এটি একটি "গেম" হতে পারে তবে আপনি যদি লবণের দানা দিয়ে তা গ্রহণ করেন তবে এর মধ্যে কিছু সত্যতা রয়েছে।
সিনট্যাক্সটি

সক্ষমতা পরিকল্পনার একটি খুব গুরুত্বপূর্ণ দিক রয়েছে: ব্যয়। আপনার এক্স বক্সের প্রয়োজন হবে কিনা বা 2 * এক্স শেষের মধ্যে একটি বিশাল পার্থক্য করে। এবং যেহেতু কেউ ভবিষ্যতে কী চালাতে চলেছে তা অনুমান করতে পারে না, তাই বিভিন্ন কাজের চাপ একবার দেখে নেওয়া ভাল বেট at আমি এগুলির কয়েকটি বাস্তবায়ন পরীক্ষা করেছি এবং সেগুলি বেশিরভাগই ঠিক আছে। আমি মনে করি ফলাফলগুলি অনুমানের ভিত্তি হিসাবে ব্যবহার করা যেতে পারে।
আগস্টন হরভাথ

সাধারণত, আসল ওয়ার্ল্ড সিস্টেমগুলি আইপি দ্বারা সীমাবদ্ধ হয় সিপিইউ দ্বারা নয়। অতএব, গো 2x বা 5x হোক ধীরে ধীরে ফেইলওভার, লোড ব্যালেন্সিং, ক্যাশিং, ডাটাবেস টপোলজি এবং এর মতো দক্ষতার পরিকল্পনার ক্ষেত্রে পার্থক্যটি খুব কমই তৈরি করে। এ কারণেই ইউটিউবের স্কেলে অ্যাপগুলি পাইথনে তাদের বেশিরভাগ সিস্টেম চালাতে পারে।
সুজয় গুপ্ত

34

আমার উত্তরটি সবার মতোই প্রযুক্তিগত নয় তবে আমি মনে করি এটি এখনও প্রাসঙ্গিক। আমি গো শিখতে শুরু করার সিদ্ধান্ত নেওয়ার পরে আমি কম্পিউটার বেঞ্চমার্কস গেমটিতে একই মানদণ্ডগুলি দেখেছি। তবে আমি সত্যই বলেছি যে এই সমস্ত সিন্থেটিক মানদণ্ডগুলি সিদ্ধান্ত নেওয়া উচিত যে গো আপনার পক্ষে যথেষ্ট দ্রুত কিনা point

আমি সম্প্রতি টর্নেডো + টর্নেডো + জেডএমকিউ ব্যবহার করে পাইথনে একটি বার্তা সার্ভার লিখেছিলাম এবং আমার প্রথম গো প্রকল্পের জন্য আমি গোতে সার্ভারটি পুনরায় লেখার সিদ্ধান্ত নিয়েছি। এখনও অবধি, পাইথন সংস্করণটির মতো একই কার্যকারিতাটিতে সার্ভারটি অর্জন করার পরে, আমার পরীক্ষাগুলি আমাকে গো প্রোগ্রামে প্রায় 4.7x গতি বৃদ্ধি দেখায়। মনে মনে, আমি কেবল গোতে এক সপ্তাহের জন্য কোডিং করছি, এবং আমি পাইথনে কোডড করছি 5 বছরেরও বেশি সময় ধরে।

তারা কেবল এটির কাজ চালিয়ে যাওয়ায় দ্রুত গতিতে চলেছে, এবং আমি মনে করি এটি সত্যিই নেমে আসে এটি কীভাবে একটি বাস্তব বিশ্বের অ্যাপ্লিকেশনটিতে সঞ্চালিত হয় এবং ক্ষুদ্র সামান্য গণ্য মানদণ্ড নয়। আমার জন্য, গো স্পষ্টতই ফলাফল পাই যে পাইথনে আমি যা উত্পাদন করতে পারি তার থেকে বেশি দক্ষ প্রোগ্রাম। এই প্রশ্নের উত্তর আমার গ্রহণ।


3
পাইথনের চেয়ে আপনি গো কোডটি কতটা ধীর গতিতে লিখবেন বলে মনে করেন?
এরিক এনহিম

7
@ অ্যাডমস্মিথ - আমি বলব যে আমি পাইথনের চেয়ে আরও ধীরে ধীরে গো কোডটি লিখব কারণ আমি ++ বছর ধরে পাইথনকে কোডিং করছি এবং কেবলমাত্র কিছুটা গো। তবে গো বনামের তুলনায় অন্যান্য স্ট্যাটিক্যালি টাইপড, সংকলিত ভাষার তুলনায়, আমি বাজি রেখেছিলাম যে আমি অন্যের চেয়ে দ্রুত গ লিখব। ব্যক্তিগতভাবে, আমি সি এবং সি ++ এর মধ্যে গতির সাথে পাইথনের সরলতার সবচেয়ে কাছের জিনিসটি অনুভব করি
jdi

5
আমারও একই রকম গল্প আছে। আমি সবেমাত্র গো শিখতে শুরু করেছি, এবং বেঞ্চমার্কস গেম অনুসারে গো জাভাস্ক্রিপ্ট ভি 8 এর চেয়ে কম। দেখা যাচ্ছে যে বাইনারি অপারেশনগুলির সাথে আমার প্রোগ্রামটি অত্যন্ত অপ্টিমাইজড ভি 8 ভিএম এর চেয়ে নিরবিচ্ছিন্ন গো কোডের সাথে 10x দ্রুত চলে। গো অনেকগুলি ক্রিয়াকলাপের তুলনায় সি এর চেয়ে ধীর হতে পারে, তবে কোনও সি সি ওয়েবসাইটে লিখছে না গো ইতিমধ্যে কার্যকরভাবে কার্যকর বিকল্প এবং নতুন লাইব্রেরি, ফ্রেমওয়ার্ক এবং সরঞ্জামগুলি পপআপ হওয়ার কারণে এটি আরও ভাল হওয়া উচিত।
যদি_______ কোনটিই

1
@ user962247 এটি একটি ক্রেজি এবং মিথ্যা কম্বল স্টেটমেন্ট। আমি এখন কয়েক বছর ধরে গো লিখছি এবং এটি দ্রুত জ্বলছে। কেউ দাবি করেন না যে এটি প্রতিটি সিনথেটিক বেঞ্চমার্কে সি / সি ++ / জাভাটিকে পরাস্ত করবে। তবে এটি কিছুতে জয়ী হয় (বেঞ্চমার্ক গেমের সাইটটি দেখুন)। যিনি আসলে বছরের পর বছর ধরে প্রোডাকশন গো কোডটি লিখছেন তার কাছ থেকে এটি নিন। এটি দ্রুত এবং উত্পাদনশীল।
jdi


6

জিনিস পরিবর্তিত হয়েছে.

আমি মনে করি আপনার প্রশ্নের সঠিক উত্তরটি হ'ল ধীরে ধীরে এই ধারণার প্রতিযোগিতা করা। আপনার তদন্তের সময় আপনার রায় ন্যায়সঙ্গত ছিল, তবে তার পরে কার্য সম্পাদনের দিক থেকে অনেক ভিত্তি অর্জন করেছে। এখন, এটি এখনও সি হিসাবে তত দ্রুত নয়, তবে সাধারণ অর্থে 10x ধীর হওয়ার খুব কাছে নেই।

কম্পিউটার ভাষার মানদণ্ডের খেলা

এই লেখার সময়:

source  secs    KB      gz      cpu     cpu load

reverse-complement
1.167x
Go      0.49    88,320  1278    0.84    30% 28% 98% 34%
C gcc   0.42    145,900 812     0.57    0% 26% 20% 100%

pidigits
1.21x
Go      2.10    8,084   603 2.10    0% 100% 1% 1%
C gcc   1.73    1,992   448 1.73    1% 100% 1% 0%

fasta
1.45x
Go      1.97    3,456   1344    5.76    76% 71% 74% 73%
C gcc   1.36    2,800   1993    5.26    96% 97% 100% 97%

regex-dna
1.64x
Go      3.89    369,380 1229    8.29    43% 53% 61% 82%
C gcc   2.43    339,000 2579    5.68    46% 70% 51% 72%

fannkuch-redux
1.72x
Go      15.59   952 900 62.08   100% 100% 100% 100%
C gcc   9.07    1,576   910 35.43   100% 99% 98% 94%

spectral-norm
2x
Go      3.96    2,412   548 15.73   99% 99% 100% 99%
C gcc   1.98    1,776   1139    7.87    99% 99% 100% 99%

n-body
2.27x
Go      21.73   952 1310    21.73   0% 100% 1% 2%
C gcc   9.56    1,000   1490    9.56    1% 100% 1% 1%

k-nucleotide
2.40x
Go      15.48   149,276 1582    54.68   88% 97% 90% 79%
C gcc   6.46    130,076 1500    17.06   51% 37% 89% 88%

mandelbrot
3.19x
Go      5.68    30,756  894 22.56   100% 100% 99% 99%
C gcc   1.78    29,792  911 7.03    100% 99% 99% 98%

যদিও এটি বাইনারি ট্রি বেঞ্চমার্কে নির্মমভাবে ক্ষতিগ্রস্থ হয়:

binary-trees
12.16x
Go      39.88   361,208 688 152.12  96% 95% 96% 96%
C gcc   3.28    156,780 906 10.12   91% 77% 59% 83%

এটি এখন জাভার সমতুল্য, তবে গো একই জিনিস (সার্ভার সাইড নেটওয়ার্কিং অ্যাপস) ব্যবহার করার সময় জাভা থেকে দ্রুততর হওয়ার জন্য স্পষ্টভাবে তৈরি করা হয়নি?
ম্যাক্সবি

1
@ ম্যাক্সবি না এটি জাভা থেকে দ্রুত হওয়ার লক্ষ্য নিয়ে তৈরি করা হয়নি। এটি ভাল পারফরম্যান্স, সি ++ এর চেয়ে দ্রুত সংকলন এবং বিকাশকারীদের আরও উত্পাদনশীল হতে সক্ষম করার জন্য সহজ এবং নেটিভ একনতন্ত্রের লক্ষ্য নিয়ে তৈরি করা হয়েছিল। অন্যান্য ভাষার রানটাইম গতিকে প্রহার করা কোনও ড্রাইভিং ফ্যাক্টর ছিল না।
jdi

5

সিপিইউ চক্রের ব্যবহার সম্পর্কে গোয়ের এতটা দক্ষতা না থাকা সত্ত্বেও গো সংক্ষিপ্ত মডেল জাভাতে থ্রেড মডেলের তুলনায় অনেক দ্রুত, উদাহরণস্বরূপ, এবং সি ++ থ্রেড মডেলের সাথে তুলনীয় হতে পারে।

নোট করুন যে থ্রেড-রিং বেঞ্চমার্কে জা জাভা থেকে 16x দ্রুত ছিল। একই দৃশ্যে গো সিএসপি সি ++ এর সাথে প্রায় তুলনীয় ছিল, তবে 4x কম মেমরি ব্যবহার করে।

গো ভাষার প্রচুর শক্তি হ'ল এটির একযোগের মডেল, 70 এর দশকে টনি হোয়ের দ্বারা নির্দিষ্ট করা সিকোয়েন্সিয়াল প্রসেসেস যোগাযোগ, সিএসপি, যা বাস্তবায়নের পক্ষে সহজ এবং অত্যন্ত সহকারী প্রয়োজনের জন্য উপযুক্ত।


2

দুটি মূল কারণ রয়েছে যে জাভা গো এবং সি ++ এর চেয়ে দ্রুত এবং অনেক ক্ষেত্রে সি এর চেয়েও দ্রুত হতে পারে:

1) জেআইটি সংকলক। এটি রানটাইম প্রোফাইলের উপর ভিত্তি করে ওও ক্লাস সহ একাধিক স্তরের মাধ্যমে ভার্চুয়াল ফাংশন কলগুলিকে ইনলাইন করতে পারে। স্থিতিশীলভাবে সংকলিত ভাষায় এটি সম্ভব নয় (যদিও রেকর্ডকৃত প্রোফাইলের উপর ভিত্তি করে নতুন নতুন সংকলন সাহায্য করতে পারে)। এটি বেশিরভাগ মাপদণ্ডের জন্য অত্যন্ত গুরুত্বপূর্ণ যা পুনরাবৃত্তিমূলক আলগোরিদিমগুলিকে জড়িত।

2) জিসি। ম্যালোকের তুলনায় জিসি ভিত্তিক মেমরির বরাদ্দ প্রায় বিনামূল্যে। এবং 'ফ্রি' জরিমানা পুরো রানটাইম জুড়ে সূক্ষ্ম করা যেতে পারে - প্রায়শই এড়িয়ে যায় কারণ সমস্ত আবর্জনা সংগ্রহ করার আগে প্রোগ্রামটি সমাপ্ত হয়।

এখানে অত্যন্ত প্রতিভাবান বিকাশকারী শত শত (হাজার?) জিসি / জেভিএমকে দক্ষ করে তুলেছেন। আপনি "তাদের সবার চেয়ে কোড আরও ভাল" করতে পারেন তা ভাবাই বোকামি। এটি তার অন্তরে একটি মানব অহংকার সমস্যা humans প্রতিভাধর মানুষ দ্বারা যথাযথ প্রশিক্ষণের মাধ্যমে কম্পিউটার এটি প্রোগ্রাম করা মানুষের চেয়ে আরও ভাল পারফরম্যান্স করতে চলেছে তা মানুষ স্বীকার করতে খুব কষ্ট করে।

বিটিডাব্লু, সি ++ সি হিসাবে তত দ্রুত হতে পারে যদি আপনি ও ও ও বৈশিষ্ট্যগুলি ব্যবহার না করেন তবে আপনি সি এর সাথে কেবল প্রোগ্রামিং শুরু করার জন্য বেশ কাছাকাছি।

সবচেয়ে বড় কথা, এই পরীক্ষাগুলিতে "গতির পার্থক্য" সাধারণত অর্থহীন। আইও ব্যয় হ'ল পারফরম্যান্স পার্থক্যের চেয়ে আরও বেশি মাত্রার অর্ডার এবং তাই যথাযথ ডিজাইন যা IO ব্যয়কে হ্রাস করে সর্বদা জয়লাভ করে - এমনকি কোনও অনুবাদিত ভাষায়ও। খুব কম সিস্টেম সিপিইউ আবদ্ধ।

চূড়ান্ত নোট হিসাবে, লোকেরা "কম্পিউটার ভাষার বেনমার্কস গেম" কে "বৈজ্ঞানিক পরিমাপ" হিসাবে উল্লেখ করে। পরীক্ষাগুলি সম্পূর্ণ ত্রুটিযুক্ত, উদাহরণস্বরূপ, যদি আপনি কারও জন্য জাভা পরীক্ষাগুলি দেখেন। আমি যখন একই ওএস / হার্ডওয়্যারগুলিতে পরীক্ষা চালাই তখন আমি জাভার পক্ষে মোটামুটি .6..6 সেকেন্ড এবং সি এর জন্য ৪.7 সেকেন্ড পাই - যা যুক্তিসঙ্গত - পরীক্ষাগুলির প্রতিবেদনে 4x আস্তে আস্তে নয়। এটি ক্লিক-টোপ, জাল সংবাদ, সাইটের ট্রাফিক তৈরির জন্য ডিজাইন করা।

একটি চূড়ান্ত, চূড়ান্ত নোট হিসাবে ... আমি গো ব্যবহার করে পরীক্ষা চালিয়েছি এবং এটি ছিল 7.9 সেকেন্ড। আপনি যখন Go তে ক্লিক করেন তখন এটি এটি জাভার সাথে তুলনা করে এবং আপনি যখন জাভাতে ক্লিক করেন তখন এটি সি এর সাথে তুলনা করে, কোনও গুরুতর প্রকৌশলের সাথে একটি লাল পতাকা হওয়া উচিত।

জাভা, গো এবং সি ++ এর প্রকৃত বিশ্বের তুলনা করার জন্য https://www.biorxiv.org/content/10.1101/558056v1 স্পোলার সতর্কতা দেখুন, জাভা কাঁচা পারফরম্যান্সে শীর্ষে চলে আসে, সম্মিলিত মেমরির ব্যবহারের সাথে শীর্ষে আসে এবং প্রাচীর সময়।


ভুল। সি ++ সি হিসাবে দ্রুততর হয়, বিশেষত যখন আপনি ওওপি ব্যবহার করেন, এটিই তার জন্ম শংসাপত্রের পেল। আরও বিমূর্ততা (ক্লাসে যেমন) কোনও শংসাপত্রের পারফরম্যান্স ডিগ্রেশন ছাড়া, জিরো এক্সট্রা বাই মেমরির মাধ্যমে। যদি আপনি এটি জানেন না, জাভা, সি #, যান, অজগর, এবং

// বিটিডব্লিউ, সি ++ সি এর মতো দ্রুত হতে পারে যদি আপনি এবং ওও বৈশিষ্ট্যগুলি ব্যবহার না করেন তবে আপনি সি // তে কেবল প্রোগ্রামিংয়ের খুব কাছাকাছি থেকে শুরু করতে পারেন। যদি আপনি এটি বলেন, আপনার নিজের জন্য সি ++ সম্পর্কে খুব সামান্য ধারণা রয়েছে তবে এটি ব্যবহার করবেন না। সি এবং সি ++ যাদু এবং মধ্যযুগীয় মনকে ঘৃণা করে, প্রকৃতির কুসংস্কারের মতো, ওহ আমি শুনেছি যে এটি ইন্টারনেটে পড়েছি, এটা অবশ্যই সত্য ... সি এবং সি ++ থেকে দূরে থাক, তারা আপনাকে আমার বন্ধুকে ফিরে দেবে (সৎ পরামর্শ)

সি সি ++ এর পূর্বপুরুষ। এখনও অনেক লোক এটি ব্যবহার করে ... সি ++ একটি ভাল সি, যেখানে আপনি দাম না দিয়ে আরও কিছু করতে পারেন more জাভা, সি # এবং গো লেখকরা এটি পায় নি, ভাল, অবশ্যই তারা পেয়েছিল তবে তারা কি করতে পারে?!?! বিদ্যমান (সি) কোডের সাথে সামঞ্জস্যপূর্ণ হওয়ার বিষয়ে একই। সি কোডের বাস্তব জীবনের মহাসাগর! অজগর একটি সুন্দর খেলনা, উপভোগ করুন, আমি আশা করি তারা এটি সঠিকভাবে পেয়েছে, তবে না, পাইথনের

>> জাভা প্রোগ্রামের জন্য সিপিইউ ব্যবহার 30% এ দেখায় << না 1 "1% 0% 0% 100%"।
igouy

1
@ আইগোই আমি স্বীকার করেছিলাম যে এটি সম্ভবত আমি তৈরি একটি ত্রুটি - যখন আমি লোড দেখি, তখন আমি 'সিস্টেম লোড' পদগুলিতে ব্যাখ্যা করছিলাম এবং ধরে নিচ্ছিলাম, ব্যবহারকারী / সিস্টেম / আইও / নিষ্ক্রিয় - আমার ভুল, এবং এটি ছিল যথেষ্ট পরিমাণে।
রবার্ট

1

আমি মনে করি প্রায়শই অবহেলিত সত্যটি হল, জেআইটি সংকলন> স্থির সংকলন বিশেষত (রানটাইম) দেরীতে আবদ্ধ ফাংশন বা পদ্ধতির জন্য হতে পারে। হটস্পট জেআইটি রন্টিনটাইমে সিদ্ধান্ত নিয়েছে যে পদ্ধতিগুলি ইনলাইন করা যায়, এটি বর্তমানে চালানো সিপিইউর ক্যাশে আকার / আর্কিটেকচারের সাথে ডেটা বিন্যাসকে সামঞ্জস্য করতে পারে। সি / সি ++ সাধারণভাবে হার্ডওয়্যারটিতে সরাসরি অ্যাক্সেস পেয়ে মেক আপ করতে পারে (এবং সামগ্রিকভাবে এখনও আরও ভাল সম্পাদন করবে) will সি-এর তুলনায় গো জিনিসগুলি আরও উচ্চ-স্তরের হিসাবে আলাদা হতে পারে তবে বর্তমানে রানটাইম অপ্টিমাইজেশন সিস্টেম / সংকলক নেই। আমার অন্ত্রে আমাকে বলেন, গো দ্রুততর হতে পারে জাভা হিসাবে গো পয়েন্টারটিকে তাড়া করে না যা আরও ভাল ডেটা কাঠামোর লোকালিকে উত্সাহ দেয় + কম বরাদ্দ প্রয়োজন।


1

প্রকৃতপক্ষে, গো কেবল ডিজাইনের সময় মার্জিত এবং দক্ষই নয়, রান-টাইমে সুপার পারফরম্যান্টও। কীটি হ'ল সঠিক অপারেটিং সিস্টেম অর্থাৎ লিনাক্স ব্যবহার করা। উইন্ডোজ এবং ম্যাক ওএসের অধীনে পারফরম্যান্স প্রোফাইলিং ফলাফল, আরও ভাল শব্দের অভাবে, মাত্রার নিকৃষ্টতার এক বা দুটি আদেশ।


0

লিনাক্সের অধীনে গো রানটাইমটি সুপার দ্রুত, সি / সি ++ এর সাথে পুরোপুরি তুলনাযোগ্য। উইন্ডোজ এবং ইউনিক্সের নীচে গো রানটাইম একই লিগে নেই

জাভা এর সাথে তুলনা তাত্পর্যপূর্ণ নয়, গো সিস্টেম এবং অ্যাপ্লিকেশন বিকাশের উভয়ের জন্যই রয়েছে (যেহেতু জাভা কেবলমাত্র অ্যাপ্লিকেশন বিকাশের জন্য নীল কলারের মতো)। বিশদে সন্নিবেশ করানো হবে না, তবে যখন কুবেরনেটসের মতো জিনিসগুলি যখন লেখা হয় তখন আপনি বুঝতে পারবেন যে কোনও এন্টারপ্রাইজ পরামর্শদাতা বন্ধুত্বপূর্ণ খেলনা নয়

গুগল আপনি যে সমঝোতা উল্লেখ করেছেন তা সম্পর্কে একবার উল্লেখ করার কথা মনে নেই। গো, হ'ল ডিজাইন সিস্টেম এবং অ্যাপ্লিকেশন স্তরের প্রোগ্রামগুলির ডিজাইনিংয়ের জন্য সহজ, মার্জিত এবং দক্ষ, পয়েন্টার রয়েছে, দক্ষ মেমরি বরাদ্দ এবং ক্ষয়িষ্ণুতা, ওহ থেকে উদ্ভূত জটিলতাগুলি এড়াতে সহজেই মিস-ব্যবহার প্রয়োগের উত্তরাধিকার থেকে বেরিয়ে আসে, আপনাকে সহ-রুটিন এবং অন্যান্য আধুনিক দেয় সময় এবং বাজেটে উচ্চ কার্যকারিতা অ্যাপ্লিকেশন লেখার উপায় write আবার, গো লিনাক্সের নীচে সুপার দ্রুত, এটি ঠিক এটির জন্য ডিজাইন করা হয়েছিল (এটি খুব খুশি যে)


-4

জাভা এবং সি উভয়ই তাদের ডেটা এবং পদ্ধতি (ফাংশন) সংজ্ঞা দিয়ে আরও স্পষ্ট। সিটি স্ট্যাটিকালি টাইপ করা হয়েছে, এবং জাভা এর উত্তরাধিকারের মডেলের সাথে কম। এর অর্থ হ'ল সংকলনের সময় ডেটা যেভাবে পরিচালনা করা হবে সেটি বেশ সংজ্ঞায়িত।

গো এর ডেটা এবং ফাংশন সংজ্ঞা সাথে আরও জড়িত। বিল্ট ইন ফাংশনগুলি সাধারণভাবে প্রকৃতির হয় এবং টাইপ হায়ারার্কির অভাব (জাভা বা সি ++ এর মতো) গতির অসুবিধা দেয়।

মনে রাখবেন যে গো ভাষার জন্য গুগলের লক্ষ্যটি কার্যকরকরণের গতি এবং কোডিংয়ের গতির মধ্যে একটি গ্রহণযোগ্য সমঝোতা হওয়া। আমি মনে করি তারা তাদের প্রারম্ভিক প্রয়াসে একটি ভাল মিষ্টি স্পট হিট করছে, এবং আরও কাজ শেষ হওয়ায় বিষয়গুলি কেবল উন্নতি করবে।

আপনি যদি আরও ডায়নামিকালি টাইপ করা ভাষার সাথে Go এর তুলনা করেন যার মূল সুবিধা কোডিংয়ের গতি, আপনি Go এর সম্পাদন গতির সুবিধা দেখতে পাবেন। পার্লের তুলনায় গো 8 গুণ বেশি দ্রুত এবং আপনি যে সমস্ত মানদণ্ড ব্যবহার করেছেন তা রুবি 1.9 এবং পাইথন 3 এর চেয়ে 6 গুণ বেশি দ্রুত।

যাইহোক আরও ভাল প্রশ্ন জিজ্ঞাসা করা হয় কার্যকর করার গতি বনাম প্রোগ্রামিং স্বাচ্ছন্দ্যে একটি ভাল সমঝোতা? আমার উত্তর হ্যাঁ হচ্ছে এবং এটি আরও ভাল হওয়া উচিত।


20
"কোনও ধরণের শ্রেণিবিন্যাসের অভাব (জাভা বা সি ++ এর মতো) Go কে গতির অসুবিধা দেয়" - তবে?
এরিক কাপলুন

6
"গো এর ডেটা এবং ফাংশন সংজ্ঞা দিয়ে আরও জড়িত" " ত্রুটিপূর্ণ. আপনি কী বোঝাতে চেয়েছেন যে কীভাবে ধরণের পদ্ধতিগুলি এটিকে ব্যাখ্যা না করেই প্রয়োগ করা যায়? সংকলক ইন্টারফেসের সদস্যতা - ধরণ সনাক্ত করে। এটি দ্রুত। "বিল্ট ইন ফাংশনগুলি প্রকৃতিতে আরও সাধারণ" না, বিল্টিনগুলি অন্য সমস্ত কিছুর মতো সংকলিত হয়। সি ++ টেম্পলেটগুলির সাথে একই জিনিস ঘটে। "একটি ধরণের শ্রেণিবিন্যাসের অভাব (জাভা বা সি ++ এর মতো) গো কে একটি গতির অসুবিধা দেয়" - ভুল, টাইপ শ্রেণিবিন্যাসের রানটাইম কার্যকরকরণের সাথে কোনও সম্পর্ক নেই।
ম্যালকম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.