নোড.জেএস-তে হাস্কেল প্রতিক্রিয়া কী?


217

আমি বিশ্বাস করি যে এরলং সম্প্রদায়টি নোড.জেসের প্রতি viousর্ষান্বিত নয় কারণ এটি আই / ওকে স্থানীয়ভাবে অ-ব্লক করে এবং একাধিক প্রসেসরের (সহজেই নোড.জেএস-তে অন্তর্নির্মিত নয়) সহজে মোতায়েন করার উপায় রয়েছে। আরও বিশদ http://j Journal.dedasys.com/2010/04/29/erlang-vs-node-js এবং নোড.জেএস বা এরলং এ

হাস্কেলের কী হবে? হাস্কেল নোড.জেএস এর কিছু সুবিধা দিতে পারে, যেমন মাল্টি-থ্রেড প্রোগ্রামিংয়ের আশ্রয় না করে I / O ব্লক করা এড়াতে একটি পরিষ্কার সমাধান?


নোড.জেএস এর সাথে আকর্ষণীয় এমন অনেকগুলি জিনিস রয়েছে

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

17
আমি মনে করি পরিবর্তে প্রোগ্রামারদের উপর আপনার এই প্রশ্নটি করা উচিত ।
জোনাস

47
কোনও কোডের টুকরো অন্তর্ভুক্ত না করা এটিকে বিষয়গত প্রশ্ন করে না।
গাভি

20
আমি নোড.জেএস সম্পর্কে খুব বেশি জানি না, তবে আপনার প্রশ্ন সম্পর্কে একটি জিনিস আমাকে আঘাত করেছিল: আপনি কেন থ্রেডের সম্ভাবনাটিকে এত অপ্রীতিকর মনে করেন? থ্রেডগুলি হ'ল মাল্টিপ্লেক্সিং I / O এর সঠিক সমাধান হওয়া উচিত। আমি এখানে থ্রেড শব্দটি ব্যাপকভাবে ব্যবহার করি যার মধ্যে রয়েছে এরলংয়ের প্রক্রিয়াগুলি। সম্ভবত আপনি লক এবং পরিবর্তনীয় অবস্থা সম্পর্কে উদ্বিগ্ন? আপনাকে সেভাবে কোনও কাজ করতে হবে না - বার্তা-পাসিং বা লেনদেনগুলি ব্যবহার করুন যদি এটি আপনার অ্যাপ্লিকেশনটির জন্য আরও অর্থবোধ করে।
সাইমন মার্লো

9
@ গাউই আমি মনে করি না যে এটি প্রোগ্রাম করা খুব সহজ বলে মনে হচ্ছে - প্রিম্পশন ছাড়াই আপনাকে অনাহার এবং দীর্ঘ বিলম্বের সম্ভাবনা নিয়ে কাজ করতে হবে। মূলত থ্রেডগুলি হ'ল ওয়েব সার্ভারের জন্য সঠিক বিমূর্ততা - অ্যাসিঙ্ক্রোনাস আই / ও এবং এর সাথে যে সমস্ত সমস্যা রয়েছে তার মোকাবিলা করার দরকার নেই, কেবল এটি থ্রেডে করুন। : ঘটনাক্রমে, আমি মধ্যে Haskell ওয়েব সার্ভার যা আপনাকে আকর্ষণীয় হতে পারে সম্পর্কে একটি কাগজ লিখেছে haskell.org/~simonmar/papers/web-server-jfp.pdf
সাইমন মধ্যে Marlow

3
"কলব্যাকগুলি একক থ্রেডে চালানোর গ্যারান্টিযুক্ত: কোনও রেসের শর্ত সম্ভব নয়" " ভুল। আপনার সহজেই নোড.জেজে রেস শর্ত থাকতে পারে; কেবল ধরে নিন যে একটি আই / ও অ্যাকশন অন্য একটি এবং বোম এর আগে সম্পন্ন হবে। কি হল প্রকৃতপক্ষে অসম্ভব জাতি অবস্থার একটি বিশেষ ধরনের, মেমরি একই বাইট থেকে যথা সমবর্তী unsynchronised এক্সেস আছে।
রাইটফোল্ড

উত্তর:


219

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

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

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

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


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

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

10
হাঁ! এবং জিএইচসি 7-তে ব্র্যান্ডের নতুন আই / ও মাল্টিপ্লেক্সিং হাস্কেলের লেখার সার্ভারকে আরও ভাল করে তুলেছে।
andreypopp

3
আপনার প্রথম পয়েন্টটি আমাকে (বহিরাগত হিসাবে) খুব বেশি বোঝায় না ... নোড.জেজে কোনও অনুরোধ প্রক্রিয়া করার সময় আপনার কলব্যাকটি একক ক্লায়েন্টের সাথে ডিল করে। একাধিক প্রক্রিয়াতে স্কেলিংয়ের সময় শুধুমাত্র পরিস্থিতি পরিচালনা করা উদ্বেগের কিছু হয়ে যায় এবং তারপরেও উপলব্ধ গ্রন্থাগারগুলি ব্যবহার করা বেশ সহজ।
রিকার্ডো তোমাসি

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

154

হাস্কেল নোড.জেএস এর কিছু সুবিধা দিতে পারে, যেমন মাল্টি-থ্রেড প্রোগ্রামিংয়ের আশ্রয় না করে I / O ব্লক করা এড়াতে একটি পরিষ্কার সমাধান?

হ্যাঁ, প্রকৃতপক্ষে ইভেন্ট এবং থ্রেডগুলি হাসকেলে একত্রিত।

  • আপনি সুস্পষ্ট লাইটওয়েট থ্রেডগুলিতে প্রোগ্রাম করতে পারেন (উদাহরণস্বরূপ একক ল্যাপটপে কয়েক মিলিয়ন থ্রেড)।
  • অথবা; আপনি স্কেলযোগ্য ইভেন্ট বিজ্ঞপ্তির উপর ভিত্তি করে একটি অ্যাসিঙ্ক ইভেন্ট-চালিত স্টাইলে প্রোগ্রাম করতে পারেন।

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

যেমন

একযোগে সংগ্রহ 32 টি কোরে

বিকল্প পাঠ

হাসকেলে আপনার ইভেন্ট এবং থ্রেড উভয়ই রয়েছে এবং এটি হুডের নীচে সমস্ত ইভেন্ট।

বাস্তবায়ন বর্ণনা কাগজ পড়ুন


2
ধন্যবাদ। আমাকে এই সব হজম করা দরকার ... এটি জিএইচসি-নির্দিষ্ট বলে মনে হচ্ছে। আমার ধারণা ঠিক আছে। হ্যাশেল ভাষা হ'ল জিএইচসি সংকলন করতে পারে এমন কিছু বিষয়। একইভাবে, হাস্কেল "প্ল্যাটফর্ম" কমপক্ষে জিএইচসি রান-টাইম।
গাভি

1
@ গাওবি: এটি এবং অন্যান্য প্যাকেজগুলি যে এর মধ্যে বান্ডিল হয়ে যায় সেগুলি হ'ল এটি বাক্সের বাইরেই কার্যকর useful এবং এটি একই চিত্র যা আমি আমার সিএস কোর্সে দেখেছি; এবং সর্বোত্তম অংশটি হসকেলে আপনার নিজের প্রোগ্রামগুলিতে অনুরূপ দুর্দান্ত ফলাফল অর্জন করা কঠিন নয়।
রবার্ট ম্যাসাওলি

1
হাই ডন, আপনি কি মনে করেন যে এই জাতীয় প্রশ্নের উত্তর দেওয়ার সময় আপনি হ্যাশেল ওয়েব সার্ভারের সাথে লিঙ্ক করতে পারেন যা সেরা (ওয়ার্প) সম্পাদন করে? এখানে নোড.জেএস এর বিরুদ্ধে যথেষ্ট প্রাসঙ্গিক মানদণ্ড রয়েছে: Yesodweb.com/blog/2011/03/…
গ্রেগ ওয়েবার

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

3
এছাড়াও: নতুন আইও ম্যানেজার (সিএইচসি) একটি শিডিয়ুলিং অ্যালগরিদম ব্যবহার করে যার মধ্যে (এম লগ এন) জটিলতা রয়েছে (যেখানে এম চলমান থ্রেডের সংখ্যা এবং এন থ্রেডের মোট সংখ্যা)। এপোলের জটিলতা কে (কে পঠনযোগ্য / লিখিত এফডি'র সংখ্যা।। সুতরাং সমস্ত জটিলতার তুলনায় জিএইচসি এর ও (কে * এম লগ এন) রয়েছে যা আপনি যদি উচ্চ ট্র্যাফিক সংযোগের মুখোমুখি হন তবে খুব ভাল নয় N নোড.জেজেসের ক্ষেত্রে কেবল লিনিয়ার জটিলতা রয়েছে এপল দ্বারা এবং আর আমরা উইন্ডোজ পারফরম্যান্স সম্পর্কে কথা বলি না ... নোড.জেএস অনেক দ্রুত কারণ এটি আইওসিপি ব্যবহার করে
Kr0e

20

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

ইভেন্টগুলি: কোনও থ্রেড ম্যানিপুলেশন নেই, প্রোগ্রামার কেবল কলব্যাক সরবরাহ করে (স্ন্যাপ ফ্রেমওয়ার্কের মতো)

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

কলব্যাকগুলি একক থ্রেডে চালানোর গ্যারান্টিযুক্ত: কোনও রেসের শর্ত সম্ভব নয়।

আপনার এখনও নোড.জেএস এ রেস শর্ত থাকতে পারে তবে এটি আরও কঠিন।

প্রতিটি অনুরোধ এর নিজস্ব থ্রেডে রয়েছে। আপনি যখন অন্য থ্রেডের সাথে যোগাযোগ করতে হবে এমন কোডটি লেখেন, তখন হ্যাশেলের সম্মিলিত আদিমতার জন্য থ্রেডসফ করে নেওয়া খুব সহজ।

দুর্দান্ত এবং সাধারণ ইউনিক্স-বান্ধব এপিআই। বোনাস: দুর্দান্ত এইচটিটিপি সমর্থন। ডিএনএসও উপলব্ধ।

হ্যাকেজ একবার দেখুন এবং নিজের জন্য দেখুন।

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

আপনার কোনওরকম সমস্যা নেই, জিএইচসি আপনার কাজটি বাস্তব ওএস থ্রেডের মধ্যে বিতরণ করবে।

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

হাস্কেল সম্ভবত এখানে জিততে পারে না ... তাই না? আবার চিন্তা করুন , http://www.haskell.org/haskellwiki/Haskell_in_web_browser

এই সমস্ত একটি একক পণ্য মধ্যে প্যাকেজ।

জিসিসি ডাউনলোড করুন, ক্যাবল ফায়ার করুন। প্রতিটি প্রয়োজনের জন্য একটি প্যাকেজ আছে।


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

আসল জয়টি হ'ল আপনি সার্ভার এবং ক্লায়েন্ট উভয় পৃষ্ঠায় রিয়েল-টাইম পৃষ্ঠাগুলি তৈরি করা আরও সহজ করে দিতে পারেন।
ড্যান_ওয়াটারওয়ার্থ

@ উদ্যান_ ওয়াটারওয়ার্থ হুবহু, উল্কার বা derby.js দেখুন
এমবি 21

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

8

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

এরই মধ্যে, জিএইচসি রানটাইম ব্যাপকভাবে উন্নতি করেছে: এটিতে এখন এমআইও নামে একটি "নতুন নতুন আইও পরিচালক" রয়েছে যেখানে আমি বিশ্বাস করি "এম" মাল্টিকোরের জন্য দাঁড়িয়েছে। এটি বিদ্যমান আইও ম্যানেজারের ভিত্তিতে তৈরি করে এবং এর মূল লক্ষ্য 4+ কোরের কার্যকারিতা অবনতির কারণটি অতিক্রম করা। এই কাগজে প্রদত্ত পারফরম্যান্স নম্বরগুলি বেশ চিত্তাকর্ষক। নিজেকে দেখো:

মিওর সাথে, হাস্কেল স্কেলটিতে 20 টি সিপিইউ স্কেলের বাস্তবসম্মত এইচটিটিপি সার্ভারগুলি জিএইচসি এর পূর্ববর্তী সংস্করণগুলি ব্যবহার করে একই সার্ভারের তুলনায় 6.5x ফ্যাক্টর পর্যন্ত শীর্ষের পারফরম্যান্স অর্জন করে। হাস্কেল সার্ভারগুলির সুদূরতরতাও উন্নত হয়েছে: [...] একটি মাঝারি লোডের অধীনে, জিএইচসি এর পূর্ববর্তী সংস্করণগুলির সাথে তুলনা করলে প্রত্যাশিত প্রতিক্রিয়া সময়টি 5.7x হ্রাস করে

এবং:

আমরা আরও দেখিয়েছি যে মিয়োর সাথে, ম্যাকনেটল (হাস্কেলের লিখিত একটি এসডিএন নিয়ামক) কার্যকরভাবে স্কেল করতে পারে 40+ কোর, একক মেশিনে প্রতি সেকেন্ডে 20 মিলিয়নেরও বেশি নতুন অনুরোধের একটি পুরোপুরি পৌঁছতে পারে এবং তাই বর্তমানের সমস্ত এসডিএন নিয়ন্ত্রণকারীগুলির মধ্যে দ্রুততম হয়ে ওঠে ।

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


6

আইএমএইচও ইভেন্টগুলি ভাল, তবে কলব্যাকের মাধ্যমে প্রোগ্রামিং হয় না।

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

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

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


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

তুমি ঠিক. এটির উত্তর পেতে তিন বছর সময় লেগেছিল যে, আমি আশা করি, আপনার আপত্তিগুলি পূরণ করুন: github.com/transient-haskell
অ্যাগ্রোকোরোনা

নোড এখন অ্যাসিঙ্ক ফাংশন সমর্থন করে, যার অর্থ আপনি অত্যাবশ্যক-শৈলীর কোড লিখতে পারেন যা আসলে অ্যাসিনক্রোনাস। এটি ফণা অধীনে প্রতিশ্রুতি ব্যবহার করে।
এরিক এলিয়ট

5

প্রশ্নটি বেশ হাস্যকর কারণ 1) হাস্কেল ইতিমধ্যে আরও অনেক ভাল উপায়ে এবং 2) এরলংয়ের মতো একইভাবে সমাধান করেছেন। নোডের বিপরীতে এখানে মাপদণ্ড রয়েছে: http://www.yesodweb.com/blog/2011/03/preimar-warp-cross-language-benchmark

হাস্কেলকে 4 টি কোর দিন এবং এটি একক প্রয়োগে প্রতি সেকেন্ডে 100k (সাধারণ) অনুরোধ করতে পারে। নোড তত বেশি করতে পারে না এবং কোর জুড়ে একটি অ্যাপ্লিকেশন স্কেল করতে পারে না। এবং এটি কাটার জন্য আপনাকে কিছু করতে হবে না কারণ হাস্কেল রানটাইমটি অবরুদ্ধ। রানটাইমের মধ্যে অ-ব্লকিং আইও থাকা কেবলমাত্র অন্য একটি (তুলনামূলকভাবে সাধারণ) ভাষা হ'ল এরলং।


14
হাস্যকর? প্রশ্নটি "হাস্কেলের কোনও প্রতিক্রিয়া আছে" তা নয়, বরং "হাস্কেলের প্রতিক্রিয়া কী"। যে সময় প্রশ্নটি জিজ্ঞাসা করা হয়েছিল, জিএইচসি 7 এমনকি প্রকাশ করা হয়নি তাই হাস্কেল এখনও "গেমটিতে" ছিল না (স্ন্যাপের মতো লিডভ ব্যবহারের ফ্রেমওয়ার্ক ছাড়াও)। তা ছাড়া আমিও একমত।
গাভি

1
আপনি এই উত্তরটি পোস্ট করার সময় এটি সত্য ছিল কিনা তা আমি জানি না, তবে এখন আসলে নোড মডিউল রয়েছে যা নোড অ্যাপ্লিকেশনগুলি সহজেই কোর জুড়ে স্কেল করতে দেয়। এছাড়াও, সেই লিঙ্কটি একটি কোরতে চলমান নোড.জেএসকে 4 কোরে চলমান হ্যাশেল থেকে তুলনা করছে। আমি এটিকে আবারও আরও সুন্দর কনফিগারেশনে চালিত হতে দেখতে চাই তবে হায়, গিথুব রেপো চলে গেছে।
টিম গৌটিয়ার

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

এই উত্তরটি দেখছেন এমন যে কেউ সচেতন হওয়া উচিত যে নোড সহজেই একটি একক কোরতে 100k সহজ অনুরোধগুলি প্রক্রিয়া করতে পারে এবং অনেকগুলি কোর জুড়ে স্টেটলেস নোড অ্যাপ্লিকেশনটি স্কেল করা তুচ্ছভাবে সহজ। pm2 -i max path/to/app.jsউপলব্ধ কোরগুলির ভিত্তিতে স্বয়ংক্রিয়ভাবে উদাহরণের সর্বোত্তম সংখ্যায় স্কেল হবে will অতিরিক্তভাবে, নোড ডিফল্টরূপে অবরুদ্ধও নয়।
এরিক এলিয়ট

1

1
কিভাবে এই প্রশ্নের উত্তর দেয়?
dfeuer

1
@ ডিফিউয়ার লিঙ্কটি অবশ্যই পড়তে হবে, স্ন্যাপ হাস্কেল ওয়েব ফ্রেমওয়ার্কটি মুক্ত হয়েছে, কেন জানি না কেন ফর্ম্যাটিং ব্যর্থ হচ্ছে। নোড সার্ভারের রানটাইমটি শুরু হয়েছিল লিনাক্স লিবভ সম্পর্কে, এবং স্ন্যাপ ওয়েব ফ্রেম ওয়ার্কটি ছিল। স্ন্যাপের সাথে হাস্কেল নোডেজ সহ ইসিএমএসক্রিপ্টের মতো, সুতরাং নোডেজের সাথে কীভাবে স্ন্যাপটি বিকশিত হয় হাস্কেলের তুলনায় এটি আরও প্রাসঙ্গিক, যা এই প্রসঙ্গে ECMAscript এর সাথে আরও সঠিকভাবে তুলনা করতে পারে।
চাওহে ভিপুল এস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.