কত দ্রুত যেতে পারে?


39

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

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


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

1
আমি এটি বুঝতে পারি, তবে আমি ভাবছিলাম যে এটির গতির গতি মেলে / ওভারটেকের যেমন জাভা এর সংকলক পরিপক্ক হওয়ার সাথে প্রত্যাশা করা যুক্তিসঙ্গত কিনা if
গ্রেগ স্লডকাওইচজ

17
প্রোগ্রামিং ভাষাগুলির গতি নেই। উভয়ই ভাষা বাস্তবায়ন করে না। প্রদত্ত ভাষা প্রয়োগের কিছু প্রদত্ত ইনপুটটির গতি থাকে এবং এই গতিটি ইনপুটটির উপর নির্ভর করে খুব বেশি পরিমাণে করতে পারে।

8
আমাকে জাগো .. তুমি যাওয়ার আগে ... হুম! । দুঃখিত, আমি প্রতিহত করতে পারি না। এখানে পতাকাগুলি আসুন .. এখানে পতাকা আসুন ..
টিম পোস্ট

2
@ ডেলানান - "জাভা (টিএম) এসই রানটাইম এনভায়রনমেন্ট (বিল্ড 1.6.0_25-বি06) জাভা হটস্পট (টিএম) 64-বিট সার্ভার ভিএম (20.0-বি 11 তৈরি করুন) এর চেয়ে" জাভা "বলা পুরোপুরি সহজ? , মিশ্র মোড) ":-)
igouy

উত্তর:


46

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

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

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

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

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

আমি যখন জিসিসিগো (জিসিসি কোডজেন ব্যবহার করে একটি গো সংকলক) পরিপক্ক হওয়ার অপেক্ষায় রয়েছি; এটি সি এর সাথে অনেক ধরণের কোডের সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত যা আকর্ষণীয় হবে।


2
ভাল হয়েছে, বোঝার জন্য উত্স কোডটি সন্ধান করা এবং যা করা হচ্ছে তা যাচাই করা সর্বদা প্রয়োজন!
igouy

1
এই প্রোগ্রামগুলির জন্য জাভা স্টার্ট আপের সময়, শ্যুটআউট.অালিথ.ডিবিয়ান.আর.
শেল্প.এফপি#

2
আমি ঠিক এই ধরনের উত্তরটির জন্য আশা করছিলাম, ধন্যবাদ!
গ্রেগ স্লডকাওইচজ

অনেক কম কোড এবং মেমরির ব্যবহার, মেশিন কোডে সংকলিত, আরও ভাল ডিজাইন করা। এই সমস্ত গতির অসুবিধা গ্রহণ করে।
মোশে রেভাঃ

22
  1. কোন সমস্যাগুলি সমাধান করা হয়েছে তা না বলেও পুরো মানদণ্ডটি অর্থহীন।
  2. জেভিএম এবং সিএলআর উভয়ই মেশিন কোড উত্পাদন করতে জেআইটি ব্যবহার করে। এটি ধীর হওয়ার কোনও কারণ নেই। এটি বুট করতে আপনার বয়সগুলি ব্যয় করে।
  3. গো দ্রুত তৈরির জন্য ডিজাইন করা হয়েছিল । আপনার কাছে প্রচুর সংকলন সময় এবং বুট সময় অপ্টিমাইজেশন নেই। কোনও জাভা অ্যাপ্লিকেশন বুট হওয়ার পরে গো তার নিজস্ব স্ট্যান্ডার্ড লাইব্রেরি সংকলন করে।

রানটাইম এ দ্রুত হতে পারে? হ্যাঁ. রানটাইমের সময় কি কখনও দ্রুত হবে? আমি জানি না। সম্ভবত সংকলক নির্মাতারা সংকলনের সময় ব্যয় করে alচ্ছিক অপ্টিমাইজেশন যুক্ত করবে। তবে আমি মনে করি না যে এতে তাদের খুব আগ্রহ আছে। তারা গুগলে কাজ করে।
তারা যা চায় তা হ'ল এমন ভাষা যা দ্রুত বিকাশের অনুমতি দেয় এবং এটি তারা যা করে তাতে ভাল অভিনয় করে। জাহান্নাম, এমনকি যদি সেই মানদণ্ডটি বিশ্বাসযোগ্য ছিল, তবে এর অর্থ হ'ল তারা সি এর চেয়ে অর্ধেক দ্রুত এবং পাইথনের চেয়ে 14 গুণ গতিযুক্ত। এটি যথেষ্ট ভাল চেয়ে বেশি।
হার্ডওয়্যার সস্তা, কোড ব্যয়বহুল। আপনার অর্থ বিনিয়োগের সাথে কোডটি বড় এবং ধীর হয়ে যায়, হার্ডওয়্যারটি সস্তা এবং আরও ছোট হয়। আপনি একটি ভাষা চান, এর জন্য দরকারী কিছু অর্জনের জন্য 4 ফ্রেমওয়ার্ক এবং 2000 ক্লাসের প্রয়োজন হয় না।
গো এর নকশায় অন্তর্নিহিত কিছু নেই যা এটিকে ধীর করে দেয়। তবে গো এর ডিজাইনারদের মধ্যে অন্তর্নিহিত কিছু রয়েছে যা এটি সমাবেশের চেয়ে ধীর করে তোলে: সাধারণ জ্ঞান।


1
বেশিরভাগ (সব?) জেআইটি রানটাইম চলাকালীন সংকলন করে, কোডটি প্রথম লোড হওয়ার সময় নয়। এই মেশিন কোড কিছু কোডের জন্য এ সব তৈরী করা যায় করতে এবং সহজে invalidated করা যেতে পারে, যেমন যদি objsমধ্যে for (obj : objs) { obj.meth() }বিভিন্ন বাস্তবায়নের আছে methপ্রত্যেক সময় এবং জে আই টি JIT চেষ্টা এটা ইনলাইন করতে। অবশ্যই, এই সবগুলি সাধারণ ক্ষেত্রে একটি উপকারী তবে এখনও উল্লেখযোগ্য।

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

3
>> কোন সমস্যাগুলি সমাধান করা হয়েছে তা না বলেও << দেখুন এবং আপনি দেখতে পাবেন যে সেই ওয়েব পৃষ্ঠাগুলি বলে যে কোন সমস্যার সমাধান হয়েছিল। আসলে, আপনি প্রোগ্রামের সোর্স কোড খুঁজে পাবেন, কমান্ডগুলি তৈরি করবেন, কমান্ডগুলি পরিচালনা করবেন, ভাষা প্রয়োগের সংস্করণ, ইয়া দা ইয়া দা ইয়া
igouy

10

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

অবশেষে কম্পিউটার ল্যাঙ্গুয়েজ বেঞ্চমার্কস গেমটিতে মাইক্রো-বেঞ্চমার্ক রয়েছে যা মাপা ভাষার অনেকগুলি বৈশিষ্ট্য সঠিকভাবে প্রতিবিম্বিত করতে পারে না এবং এমনকি ভুল ছাপগুলির মধ্যস্থতা করতে পারে না। গুগল দ্বারা সম্প্রতি প্রকাশিত এই গবেষণা পত্রটি গো, স্কেলা, জাভা এবং সি ++ এর বিভিন্ন ভাষার বৈশিষ্ট্যগুলির আরও নিখুঁত সংক্ষিপ্ত বিবরণ দেয় - বিশেষত "ভি। পারফরম্যান্স অ্যানালাইসিস" অংশটি। সুতরাং শেষের দিকে গোটা জাভা হিসাবে প্রায় স্মৃতি-ক্ষুধার্ত (জাভার স্মৃতির ৮১%) এবং স্কালার মতো ১ 170০% বেশি স্মৃতি গ্রহণ করে (জেভিএমের মেমরির ব্যবহার বিবেচনা করা হয়েছিল কিনা তা কাগজে পাওয়া যায়নি)।

তবে আবার, গো তরুণ এবং এখনও ভারী বিকাশের অধীনে (এপিআই পরিবর্তন)! অনেক উন্নতি শীঘ্রই আসছে।


3
>> গুগল দ্বারা সম্প্রতি প্রকাশিত এই গবেষণা পত্র << এটি কোনও গবেষণা পত্র নয় এবং এটি গুগল প্রকাশ করেনি। এটি গুগলের এক কর্মচারীর একটি অভিজ্ঞতার রিপোর্ট যা "স্কাল দিনগুলি 2011" স্কাল কর্মশালায় উপস্থাপিত হয়েছিল।
igouy

>> মাপা ভাষার অনেকগুলি বৈশিষ্ট্য যথাযথভাবে প্রতিফলিত করতে পারে না এবং ভুল ছাপগুলির মধ্যস্থতাও করতে পারে না << এটি ঠিক "লুপ স্বীকৃতি" প্রোগ্রামগুলির মতোই সত্য এবং বিভিন্ন প্রোগ্রামিং ভাষার মধ্যে প্রতিটি পারফরম্যান্সের তুলনার ক্ষেত্রেও সত্য হতে পারে। প্রকৃতপক্ষে লেখক আপনাকে বলেছিলেন - "আমরা মাল্টি-থ্রেডিং, বা উচ্চ স্তরের ধরণের প্রক্রিয়াগুলির কোনও দিক ঘুরে দেখি না ... আমরা ভারী
সংখ্যামূলক গণনাও

@igouy প্রচ্ছদে আপনি "গুগল" পড়তে পারেন এবং প্রাসঙ্গিক সবকিছু সম্পর্কিত রেফারেন্সের সাথে আচ্ছাদিত। তাহলে গুগলের সদর দফতরের ঠিকানা দিয়ে যদি এটি উল্লেখ করা হয় তবে এটি গুগল দ্বারা প্রকাশিত কোনও "গবেষণা কাগজ" নয় কেন? গবেষণা কাগজপত্র কেবল একাডেমিয়া ডোমেন নয়।
অ্যালেক্স

প্রচ্ছদে আপনি মেলিং ঠিকানাটি পড়তে পারেন যেখানে লেখকের সাথে যোগাযোগ করা যেতে পারে, এবং লেখকের ইমেল ঠিকানা। আপনার পোস্ট করা পিডিএফের URL টি পরীক্ষা করুন Check Day2011.scala-lang.org - ডোমেনটি নোট করুন - স্কাল দিনগুলি 2011 "স্কালার কর্মশালা
igouy

1

গো পাইথনের চেয়ে দ্রুত এবং জাভা থেকে কিছুটা ধীর। আমার মোটামুটি অভিজ্ঞতা পাইথনের চেয়ে আরও দ্রুত (মাত্রার 1-2 ক্রমান্বয়ে) হতে এবং জাভা থেকে প্রায় 10-20% ধীর হয়ে গেছে। যাইহোক, জা জাভা-এর তুলনায় গো কিছুটা দ্রুত used মেমরি র‌্যামের ক্ষেত্রে গোও অনেক বেশি দক্ষ।

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

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

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

যাইহোক, এটি কেবলমাত্র একজন বিকাশকারীর অভিজ্ঞতা।


4
এটি একটি 8 বছরের পুরানো প্রশ্ন এবং সস্তা কম্পিউটিং শক্তি এটিকে বেশ অপ্রাসঙ্গিক করে তুলেছে। আপনার উত্তরটি হার্ড ডেটার পরিবর্তে "আপনার অনুভূতি" এর উপর ভিত্তি করে। আমি আপনাকে নিরুৎসাহিত করতে চাইছি না, তবে ...
কেয়ামান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.