জাথার চেয়ে পাইথন ধীরে ধীরে তবে পিএইচপি এর চেয়ে দ্রুত [বন্ধ]


17

আমি বহুবার বিভিন্ন মানদণ্ড দেখেছি যা দেখায় যে কোনও ভাষাতে একটি নির্দিষ্ট কাজ কীভাবে সম্পাদন করে।

এই মানদণ্ডগুলি সর্বদা প্রকাশ করে যে পাইথন জাভার চেয়ে ধীর এবং পিএইচপি থেকে দ্রুত এবং আমি কেন অবাক হয়েছি তা অবাক করি।

  • ভার্চুয়াল মেশিনের ভিতরে জাভা, পাইথন এবং পিএইচপি চলে
  • তিনটি ভাষাই তাদের প্রোগ্রামগুলিকে ওএস শীর্ষে চলমান তাদের কাস্টম বাইট কোডগুলিতে রূপান্তর করে - তাই কোনও স্থানীয়ভাবে চলমান নয় running
  • জাভা এবং পাইথন উভয়ই "সংকলিত" ( .pycপাইথনের জন্য) করা যেতে পারে তবে __main__পাইথনের মডিউলটি সংকলিত হয়নি

পাইথন এবং পিএইচপি গতিশীলভাবে টাইপ করা হয়, এবং জাভা স্থিতিশীল - এই কারণেই জাভা দ্রুততর হয় এবং যদি তাই হয় তবে দয়া করে এটি কীভাবে গতিকে প্রভাবিত করে তা ব্যাখ্যা করুন।

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

আপনি কিছু benchmarks দেখতে পারেন এখানে এবং এখানে , এবং এখানে


পাইথন বনাম পিএইচপি সম্পর্কিত: এটি সম্ভবত বাস্তবায়নের সমস্যার একটি গুণমান, সম্ভবত।
চার্লস সালভিয়া

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

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

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

উত্তর:


26

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

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

পাইথন এবং পিএইচপি-র মধ্যে পার্থক্য হিসাবে, পরবর্তীটি কেবলমাত্র অনেক কম মানের। এটি তত্ত্বের দিক দিয়ে দ্রুত চালাতে পারে, তবে এটি কখনই চলবে না।


1
গতিশীল ভাষার জন্য কেন জেআইটি "ব্যতিক্রমী" শক্ত? জাভাস্ক্রিপ্ট বিশ্বে ভি 8 বা ট্রেসমনকি দেখুন - সেখানে জেআইটি ঠিকঠাক কাজ করে।
বিশ্বাসঘাতক

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

2
ওরাকলের হটস্পট সংকলক দলের অভ্যন্তরে সম্ভবত একশত ইঞ্জিনিয়ার
জার্গ ডব্লু মিট্টাগ 3:32

1
@ জার্গডব্লিউমিটাগ অবশ্যই, হটস্পট এতটা সোজা নয়, এটি কিছুটা স্থির বিশ্লেষণ করে, এটি রানটাইম প্রোফাইলিং ফলাফলগুলি ব্যবহার করে, তবে এখনও এটি সঠিক ট্রেসিং জেআইটির চেয়ে অনেক সহজ। এবং আমি বলব, হটস্পট অত্যধিক জটিল and
এসকে-যুক্তি

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

21

এই প্রশ্নটিতে একটি সাধারণ সমস্যা রয়েছে যে এটি অত্যন্ত পরম। "ভাষা এক্স ভাষা ওয়াইয়ের চেয়ে দ্রুত গতিতে" বলার অর্থ নেই। একটি কম্পিউটার ভাষা নিজেই "দ্রুত" বা "ধীর" নয় কারণ এটি কেবলমাত্র একটি অ্যালগরিদম প্রকাশের উপায়। আসল প্রশ্নটি "এই বিশেষ সমস্যার ডোমেনের জন্য ভাষা Y এর Y1 প্রয়োগকরণের চেয়ে ভাষা X এর বাস্তবায়ন এক্স 1 কেন দ্রুত?" এর আদেশে কিছু হওয়া উচিত?

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

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

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

উদাহরণস্বরূপ, এই জাভা কোডটি নিন:

for(int i=0;i<10;i++) {
    Object o = new Object;
    doSomething(o);
}

এটি সি ++ এ "পুনরায় লেখার" জন্য প্ররোচিত হবে এবং রান সময়গুলি তুলনা করবে:

for(int i=0;i<10;i++) {
    Object *o = new Object;
    doSomething(o);
    delete(o);
}

জিনিসটি হ'ল যে কোনও দক্ষ সি ++ প্রোগ্রামার সাথে সাথেই দেখতে পাবে যে সি ++ তে এটি কোনও কাজ করার দ্রুততম উপায় নয়। আপনি বিষয়গুলিকে C ++ এর সাথে আরও উপযুক্ত বলে পরিবর্তন করে সহজেই গতি বাড়িয়ে তুলতে পারেন:

for(int i=0;i<10;i++) {
    Object o;
    doSomething(&o);
}

মুল বক্তব্যটি এই নয় যে সি ++ দ্রুত হতে পারে তবে ভাষার তুলনা করার জন্য মাপদণ্ড লিখার চেয়ে সত্যই কঠিন। এটি যথাযথভাবে করতে, আপনাকে উভয় ভাষায় বিশেষজ্ঞ হতে হবে এবং উভয় ভাষায় স্ক্র্যাচ থেকে লিখতে হবে। তারপরেও আপনি সহজেই সেই অঞ্চলে যেতে পারেন যেখানে একটি ভাষা নির্দিষ্ট কাজে দক্ষতা অর্জন করে। উদাহরণস্বরূপ, আমি সি ++ তে টাওয়ার্স অফ হ্যানয়ের একটি সংস্করণ লিখতে পারি যা যেকোন যুক্তিসঙ্গত সংকলকটিতে জাভার চেয়ে দ্রুত চলবে। সংকলনের সময় মূল্যায়ন করে সি ++ টেম্পলেট ব্যবহার করে মূলত প্রতারণা করেই আমি এটি করতে পারি (http://forums.devshed.com/c-pogramming-42/c-towers-of-hanoi-used-templates-424148.html)

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

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

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


6

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


8
কেন এই নিম্নমানের ছিল? এটি ঠিক উত্তর: কর্মক্ষমতা নিখুঁতভাবে গবেষণা এবং প্রকৌশল প্রচেষ্টা এবং এইভাবে চূড়ান্তভাবে অর্থের বিষয়। জাভা বাস্তবায়ন উত্পাদনকারী সংস্থাগুলি পাইথন বা পিএইচপি বাস্তবায়নকারীগুলির চেয়ে সমৃদ্ধ হতে পারে। এখানেই শেষ.
জার্গ ডব্লু মিটাগ

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

2
+ জর্গ ডাব্লু মিটাগ: আমি একমত নই। কিছু ভাষার বৈশিষ্ট্যগুলি সম্পাদনযোগ্যভাবে কার্যকর করা খুব কঠিন হতে পারে, সুতরাং তারা দক্ষ প্রয়োগকরণের সৃষ্টিটিকে খুব কঠিন বা অসম্ভবের পরে তৈরি করে। অন্যদিকে, "এসেম্ব্লার" ভাষার একটি "দক্ষ" বাস্তবায়ন তৈরি করা তুচ্ছভাবে সহজ।
ব্যবহারকারী 281377

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

1
@ ডোনালফেলো ঠিক আমার চিন্তাভাবনা সংকলনের সময় কম জানা যায়, রানটাইমের সময় আরও বেশি খুঁজে বের করতে হয়।
ব্যবহারকারী 281377

4

কেন জাভা সবচেয়ে দ্রুত:

স্ট্র্যাটিচ্যালি টাইপ + জেআইটি সংকলন + - সার্ভার পতাকাটি আক্রমণাত্মকভাবে চলমান কোডটি পুনরায় সংযোগ করতে।

পাইথন পিএইচপি এর চেয়ে দ্রুত কেন:

পাইথন একটি গতিশীল ভাষা হতে পারে তবে এটি এখনও দৃ strongly়ভাবে টাইপ করা আছে। এর অর্থ হ'ল আপনার কাঠামোগত স্ট্রাকচারগুলি রানটাইম অপ্টিমাইজেশনে সক্ষম।

পিএইচপি কেন সফল হয়:

এটি সার্ভারে মূলত জাভাস্ক্রিপ্ট (কোনও মাল্টিথ্রেডিং সমর্থন নয়, সম্পূর্ণ গতিময়, আলগাভাবে টাইপ করা হয়নি)।

সংক্ষেপে, সংকলকটি আপনার কোড সম্পর্কে যত বেশি জানে, তত এটি অপ্টিমাইজ করতে পারে। এটি চালানোর আগে জাভা সম্পূর্ণ অপটিমাইজড এবং এটি চলমান অবস্থায় while পাইথন চলমান অবস্থায় এটি অপটিমাইজড এবং পিএইচপি ভাল, ভয়ঙ্কর। ফেসবুক সার্ভারে আসার আগে প্রকৃতপক্ষে তাদের পিএইচপি স্থানান্তর করে।
https://developers.facebook.com/blog/post/2010/02/02/hiphop-for-php--move-fast/


প্রকৃতপক্ষে সার্ভারে জাভাস্ক্রিপ্ট হ'ল নোড.জেএস এবং যা আমি বুঝতে পেরেছি (যদিও আমি এটি বোঝাতে চাই না) ভি 8 ইঞ্জিন পিএইচপিকে সাধারণভাবে (যদিও সম্ভবত কোনও টনের দ্বারা নয়) আউটফর্ম করে। আরও আপনার উল্লেখ করা উচিত পাইথনকে স্থানীয় ভাষায় সংকলন করা যেতে পারে (তখন জাভার তুলনায় এটি কীভাবে সম্পাদন করে?)
জিমি হোফা

আপনাকে সেখানে সাহায্য করার জন্য আমি অজগরটি যথেষ্ট পরিমাণে ব্যবহার করি নি, তবে আমি বলতে পারি যে ভি 8 চালিত নোডেজগুলির দেশীয় সি এক্সটেনশনের পক্ষে সমর্থন রয়েছে (যদিও জেএস / সি সীমানা অতিক্রম করা অনুমিত ধীর), এবং এটি গুগলের জেআইটি সংকলকটির সুবিধা নিতে পারে। .. নোড পাইথন এবং পিএইচপি উভয়ের চেয়ে দ্রুত হলে আমি অবাক হব না। এখানে একটি বেঞ্চমার্ক রয়েছে (বেশিরভাগ ক্ষেত্রে ত্রুটিযুক্ত) ব্লগ.ফ্যামজাহ.नेट / ২০০০/০/0/২০১৮ / দ্রষ্টব্য যে জাভা জেএসের চেয়ে ধীর মনে হয়েছিল যতক্ষণ না একজন মন্তব্যকারী বেঞ্চমার্কে আমাদের ত্রুটিগুলি নির্দেশ করে ... সুতরাং, এটি শস্যের সাথে নিয়ে যান লবণ. :)
আজাক্স

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

1

মাপদণ্ডগুলি বরং ভারী গাণিতিক প্রোগ্রামিংয়ের পক্ষে বদ্ধ হয়।

এটি আশ্চর্যজনক নয় যে পাইথন জটিল গণিতে খুব ভাল, যদি আপনি বিবেচনা করেন তবে এটি কোথায় এবং কেন প্রথম লেখা হয়েছিল

অন্যদিকে পিএইচপি ওয়েব পৃষ্ঠাগুলি পরিবেশন করার জন্য লেখা হয়েছিল, এটি অন্যান্য জিনিসগুলি করতে পারে তবে ওয়েব পৃষ্ঠাগুলি যা এই কাজটিতে জাভার চেয়ে সর্বোত্তম বা এটি সর্বোত্তম বা সর্বোত্তম

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.