স্বজ্ঞাত সমকালীন প্রোগ্রামিং বিমূর্ততা সহ আধুনিক প্রোগ্রামিং ভাষা [বন্ধ]


40

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

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

আপনার অভিজ্ঞতার ভিত্তিতে আপনি কী সুপারিশ করবেন এবং কেন?

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


21
To give an example, I don't consider a good option writing multithreaded code in C, C++, or Java। কেন? On the other hand, Python and the multiprocessing module, Erlang, Clojure, Scala, etc. are some of my options.আবার কেন? আপনি আসলে যা খুঁজছেন তা আরও নির্ধারণ করতে আপনার প্রশ্নকে প্রসারিত করুন।
ইয়ানিস

2
সুতরাং আপনি কি সমস্ত গোটের সাথে সমান্তরাল প্রোগ্রামিং শিখতে চান বা আপনি এর জটিলতা কিছু আড়াল করতে এবং উত্পাদনশীলতার দিকে ফোকাস রাখতে চান?
মার্চ

@ এমআর উত্পাদনশীলতার উপর ফোকাস করুন এবং জটিলতাটি লুকান :)
সাকিস্ক

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

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

উত্তর:


33

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

মূল বৈশিষ্ট্য:

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

সম্মতিসূচক স্লেন্ট সহ কিছু মিনি কোড নমুনা:

;; define and launch a future to execute do-something in another thread
(def a (future (do-something)))

;; wait for the future to finish and print its return value
(println @a)

;; call two functions protected in a single STM transaction
(dosync
  (function-one)
  (function-two))

বিশেষত, এই ভিডিওগুলির একটি বা একাধিকটি দেখার মতো:


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

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

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

2
@ ম্যাসন আমি কখনও বলিনি যে স্থির ধরণের ঘোষণার অন্যান্য সুবিধা ছিল না। প্রকৃতপক্ষে আমি ঠিক কারণগুলির কারণেই স্থির প্রকারের ঘোষণাগুলি পছন্দ করি। তবে আমি গতিশীল টাইপিংয়ের উত্পাদনশীলতা লাভও পছন্দ করি। এটি একটি বাণিজ্য বন্ধ। আপনার যদি একটি ভাল টেস্ট স্যুট থাকে তবে আমি সাধারণত দেখতে পাই যে এইটি সঠিকভাবে নিশ্চিতকরণ এবং সঠিক ব্যবহার বুঝতে সহায়তা করার জন্য উদাহরণ কোড সরবরাহ করার ক্ষেত্রে উভয়ই গতিশীল টাইপিংয়ের ডাউনসাইডকে হ্রাস করে। YMMV।
মাইক্রা

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

27

আপনি ডি চেষ্টা করতে পারেন এটি তিনটি মডেল সরবরাহ করে। আমি প্রথম বা দ্বিতীয় হয় সুপারিশ।

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

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

  3. কোর.থ্রেড হ'ল ওএস-নির্দিষ্ট থ্রেডিং এপিআইয়ের উপর একটি নিম্ন-স্তরের মোড়ক। উভয়ই std.concurrency এবং std.parallelism হুডের নীচে এটি ব্যবহার করে তবে আমি কেবলমাত্র এটি ব্যবহার করার পরামর্শ দিচ্ছি যদি আপনি নিজের সম্মতিযুক্ত গ্রন্থাগারটি লিখছেন বা এমন কিছু হাস্যকর কর্নার কেস খুঁজে পান যা স্টাড.প্যারালালিজম বা স্টাডিতে ভালভাবে করা যায় না if .concurrency। প্রতিদিনের কাজের জন্য কারও এই নিম্ন-স্তরের কিছু ব্যবহার করা উচিত নয়।


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

@ ডিডালনিক্স: আমার কাছে বেশিরভাগের কাছে স্টডি কোডকেন্সি মডেলের বিবরণ (বিচ্ছিন্নতা কীভাবে প্রয়োগ করা হয়)। আমি এই পোস্টটি সংক্ষিপ্ত রাখতে চেয়েছিলাম।
dsimcha

আসলে আসলে না। কনক্যুরেন্সির জন্য লাইব্রেরি এবং ভাষা সমর্থন উভয়ই প্রয়োজন।
ডেডালনিক্স

@ ডেডালনিক্স: ঠিক আছে তবে std.concurrency সমর্থন করার জন্য এগুলিকে মূলত স্থান দেওয়া হয়েছিল।
dsimcha

23

এরলং অবশ্যই একটি দুর্দান্ত বিকল্প, তবে গুগলের নতুন ভাষা গো , আরও কিছুটা ব্যবহারিক কিছু হতে পারে ।

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


@ ফাইফ অ্যাপ্লিকেশন / ব্যবহারকারী স্তর সম্পর্কে জিজ্ঞাসা করছে, সিস্টেমগুলি সমবর্তী প্রোগ্রামিং নয় not এরলং কীভাবে এটি ফিট করে?
চিরন

@ রায়নস: সম্প্রদায়টির উপর নির্ভর করে।
ডোনাল ফেলো

@ ডোনালফেলস আপনার অধিকারটি প্রকাশ করে, আমার ধারণা আমার বক্তব্যটি খুব সংকীর্ণ ছিল
রায়নস

1
@ চিরন: এরলং একটি প্রোগ্রামিং ভাষা, এটি অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়। সাধারণত, মাল্টিটপ্রসেসিং অ্যাপ্লিকেশন। আমি জানি না যে এটি 'সিস্টেমস কনট্রেন্ট প্রাম্মিং' হিসাবে কোথায় ফিট করে, আমি এর্লাং-তে লেখা কোনও ওএসের কথা শুনিনি।
জাভিয়ের

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

23

কটাক্ষপাত .net জন্য মাইক্রোসফট এর সমান্তরাল প্রোগ্রামিং। এটা খুব স্বজ্ঞাত।

অনেকগুলি ব্যক্তিগত কম্পিউটার এবং ওয়ার্কস্টেশনে দুটি বা চারটি কর (যা সিপিইউ) থাকে যা একসাথে একাধিক থ্রেড সম্পাদন করতে সক্ষম করে। অদূর ভবিষ্যতে কম্পিউটারগুলির উল্লেখযোগ্যভাবে আরও বেশি কোর থাকবে বলে আশা করা হচ্ছে। আজ এবং আগামীকালকের হার্ডওয়্যারটির সুবিধা নিতে, আপনি একাধিক প্রসেসরের জুড়ে কাজ বিতরণের জন্য আপনার কোডটিকে সমান্তরাল করতে পারেন। অতীতে, সমান্তরালতার জন্য থ্রেড এবং লকগুলি নিম্ন স্তরের কারসাজির প্রয়োজন। ভিজুয়াল স্টুডিও 2010 এবং .NET ফ্রেমওয়ার্ক 4 একটি নতুন রানটাইম, নতুন শ্রেণির লাইব্রেরির ধরণ এবং নতুন ডায়াগনস্টিক সরঞ্জাম সরবরাহ করে সমান্তরাল প্রোগ্রামিংয়ের জন্য সমর্থন বাড়ায়। এই বৈশিষ্ট্যগুলি সমান্তরাল বিকাশকে সহজতর করে যাতে আপনি থ্রেড বা থ্রেড পুলের সাথে সরাসরি কাজ না করে প্রাকৃতিক প্রতিমাগুলিতে দক্ষ, সূক্ষ্ম দানযুক্ত এবং স্কেলযোগ্য সমান্তরাল কোড লিখতে পারেন। http://i.msdn.microsoft.com/dynimg/IC292903.png


+1 এটি হ'ল তিনি যা চাইছেন তা ঠিক। যদিও, সমস্যাগুলি দেখা দিলে, নিম্ন স্তরে সম্মতি না জেনে তাদের ডিবাগ করা কঠিন হবে। উল্লেখ করার মতো নয়, একে সি # শিক্ষানবিস হিসাবে গ্রহণ করা ... আকর্ষণীয় প্রমাণ করতে পারে।
P.Brian.Mackey

@ পি। ব্রায়ান.ম্যাকি - আমি সম্মত। তবে এটি অস্বাভাবিক নয়, ওআরএম ব্যবহারের সাথে এটি তুলনা করা খুব সহজ হবে না, যখন কেউ রিলেশনাল মডেল এবং এসকিউএল পুরোপুরি বুঝতে না পারে ...
অটোভিও ডেসিও

1
বিশেষত প্লিনকিউ। এটি কেবলমাত্র কাজের একটি ছোট উপসেটের জন্য দরকারী, এটি ব্যবহার করা খুব সহজ হতে পারে।
নভিক

21

এরলং এবং স্কেলা উভয়েরই অভিনেতাভিত্তিক সম্মতি রয়েছে , যা আমি খুব স্বজ্ঞাত এবং শিখতে পেলাম।

কম্পিউটার বিজ্ঞানের অভিনেতা মডেল হ'ল সমকালীন গণনার একটি গাণিতিক মডেল যা "অভিনেতা" কে সমবর্তী ডিজিটাল গণনার সর্বজনীন আদিম হিসাবে বিবেচনা করে: এটি প্রাপ্ত একটি বার্তার প্রতিক্রিয়ায় একজন অভিনেতা স্থানীয় সিদ্ধান্ত নিতে পারে, আরও অভিনেতা তৈরি করতে পারে, আরও বার্তা প্রেরণ করতে পারে , এবং পরবর্তী বার্তা প্রাপ্তির প্রতিক্রিয়া কীভাবে নির্ধারণ করবেন তা নির্ধারণ করুন ... এটি উভয়ই গণনার একটি তাত্ত্বিক বোঝার কাঠামো হিসাবে এবং সমবর্তী সিস্টেমগুলির বেশ কয়েকটি ব্যবহারিক বাস্তবায়নের জন্য তাত্ত্বিক ভিত্তি হিসাবে ব্যবহৃত হয়েছে ।


19

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


7

গুগলের জিও ল্যাঙ্গুয়েজে সামঞ্জস্যের জন্য কিছু আকর্ষণীয় সরঞ্জাম রয়েছে - এটি চেষ্টা করার মতো আরও মজাদার জিনিস। দেখুন: http://golang.org/doc/effective_go.html#concurrency এবং উদাহরণগুলির জন্য কিছুটা পড়ুন।

সমকালীন প্রোগ্রামিং একটি বড় বিষয় এবং এখানে কেবলমাত্র কয়েকটি গো-নির্দিষ্ট হাইলাইটের জন্য জায়গা রয়েছে।

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

মেমরি ভাগ করে যোগাযোগ করবেন না; পরিবর্তে, যোগাযোগ করে মেমরি ভাগ করুন।

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

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


6

পরবর্তী সংস্করণে, সি # চিত্রটি দেখানোর চেয়েও সহজ করে তুলেছে। দুটি নতুন কীওয়ার্ড আসিঙ্ক এবং অ্যাওয়েট রয়েছে।

অ্যাসিঙ্কটি একটি ফাংশন সংশোধক হিসাবে ব্যবহৃত হয় এবং বলে যে "এই অপারেশনটি অন্য থ্রেডে এর কাজ সম্পাদন করে।

অ্যাওয়েট একটি অ্যাসিঙ্ক ফাংশনটির মধ্যে ব্যবহৃত হয় এবং যাদুটি এখানে ঘটে। মূলত ওয়েত সংকলককে পৃথক থ্রেডে মূলশব্দটি অনুসরণ করে অপারেশন চালিয়ে যেতে এবং ফলাফলগুলির জন্য অপেক্ষা করতে বলে। অপেক্ষার কলের পরে যে কোনও কোড অপারেশন শেষে চলে runs

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


নোট করুন যে কোনও শালীন ওএস সি # সংকলক ইতিমধ্যে সি # 5 সমর্থন করে, অ্যাসিঙ্ক এবং অপেক্ষা করুন।
রায়নস

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

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

6

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

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


1
বুস্ট.ট্রেডস বা সি ++ 0x std::thread(বা std::tr1::thread) দেখুন। এটি আসলে খুব ভাল বিমূর্ততা, আইএমও।
গ্রেফেইড

1
@ গ্রেফ্যাড: পিপিএল বা টিবিবিতে তাদের পুরোপুরি কিছুই নেই। boost::threadসামান্য RAII সহ কেবল একটি ওএস র‍্যাপার। পিপিএল এবং টিবিবি
হ'ল

6

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


5

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

গ্রুভি এবং জিপিএস-এর সহযোগী হিসাবে অবশ্যই আমাকে পক্ষপাতদুষ্ট হিসাবে দেখা যেতে পারে। অন্যদিকে আমি সিএসপি এবং পাইথন, সিএফ সহ কাজ করি। পাইথন-সিএসপি।

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

(হোস্ট সাইটের স্প্যামিং সম্পর্কে কিছুটা আতঙ্কের কারণে কিছু পুরোপুরি যুক্তিসঙ্গত URL লিঙ্কগুলি সরিয়ে ফেলতে হয়েছিল))


রাসেল, আপনি চাইলে চ্যাট রুমে আপনি কী লিঙ্ক করতে চান তা আমাকে বলতে পারেন এবং আমি এগুলি আপনার জন্য যুক্ত করব: chat.stackexchange.com/rooms/21/programmers
ড্যান ম্যাকগ্রা

4

ক্লোজুরে কি হবে? আপনি উদাহরণস্বরূপ সুইং ব্যবহার করতে পারেন তবে ক্লোজার একযোগে প্রোগ্রামিং সুবিধা উপভোগ করছেন? ক্লোজারে বেশ ভাল জাভা ইন্টিগ্রেশন রয়েছে।

এছাড়াও, আপনি জাভা 7 কাঁটাচামচ / জোড় কাঠামো বিবেচনা করেছেন ?


2

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


0

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


এই উত্তরটিতে কি দোষ? অন্য কোনও উত্তর আক্কার উল্লেখ করা হয়নি, এবং আক্কা সমবর্তী প্রোগ্রামিংয়ের জন্য একটি উচ্চ-স্তরের বিমূর্তি প্রয়োগ করে।
জর্জিও

-1

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


-1

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

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

পাইথনের দূত হিসাবে একটি ভাল সাবপ্রসেস লাইব্রেরি সন্ধান করুন । অথবা আপনি কেবল সি তে বেশ কয়েকটি পৃথক প্রোগ্রাম লিখতে পারেন এবং উপপরিবর্তনগুলি স্প্যান করতে এবং যোগাযোগের জন্য কাঁটাচামচ এবং পাইপ ব্যবহার করতে অন্য একটি "মাস্টার" প্রোগ্রাম লিখতে পারেন ।


3
এটি ওপি স্পষ্টতই যা চায় তার বিপরীত ... একটি প্রক্রিয়া তৈরি হ'ল ম্যানুয়ালি থ্রেড তৈরি করার মতোই নিম্ন-স্তরের। ওপিতে সম্মতিতে উচ্চ-স্তরের বিমূর্তিতে আগ্রহী ।
কনরাড রুডলফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.