অ্যাসিঙ্ক্রোনাস বনাম মাল্টিথ্রেডিং - কোনও পার্থক্য আছে কি?


133

একটি অ্যাসিঙ্ক্রোনাস কল সবসময়ই নতুন থ্রেড তৈরি করে? এই দুটির মধ্যে পার্থক্য কী?

একটি অ্যাসিঙ্ক্রোনাস কল কি সর্বদা একটি নতুন থ্রেড তৈরি বা ব্যবহার করে?

উইকিপিডিয়া বলেছেন :

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

আমি জানি অ্যাসিঙ্ক কলগুলি কি একক থ্রেডে করা যায়? এটা কিভাবে সম্ভব?



1
জাভাস্ক্রিপ্টের থ্রেড নেই তবে এতে অ্যাসিক্রোনাস পদ্ধতি কল রয়েছে।
Ajedi32

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

উত্তর:


82

এই প্রশ্নের উত্তর দেওয়া খুব সাধারণের নিকটবর্তী arn

সাধারণ ক্ষেত্রে, অ্যাসিনক্রোনাস কলটি অগত্যা কোনও নতুন থ্রেড তৈরি করে না। এটি প্রাক-বিদ্যমান থ্রেড পুল বা বহিরাগত প্রক্রিয়া সহ অন্যান্য উপায়ে এটি বাস্তবায়নের এক উপায়। এটি ভাষা, বস্তুর মডেল (যদি থাকে) এবং রান টাইম পরিবেশের উপর নির্ভর করে on

অ্যাসিঙ্ক্রোনাসের অর্থ হ'ল কলিং থ্রেড বসে না এবং প্রতিক্রিয়াটির জন্য অপেক্ষা করে না, বা কলিং থ্রেডে অ্যাসিঙ্ক্রোনাস ক্রিয়াকলাপ ঘটে না।

এর বাইরেও আপনাকে আরও নির্দিষ্ট করে নেওয়া দরকার।


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

6
@ মিশেল - আপনি কি দয়া করে ব্যাখ্যা করতে পারেন যে উদাহরণ হিসাবে একক থ্রেডে কীভাবে অ্যাসিনক্রোনাস প্রোগ্রামিং হতে পারে?
কুমার বৈভব

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

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

কোন থ্রেড প্রতীক্ষিত কার্য সম্পাদন করে? কোনও-সিঙ্কের সাথে চিহ্নিত পদ্ধতিটি অপেক্ষার কীওয়ার্ড না পৌঁছা পর্যন্ত সমকালীনভাবে কার্যকর করা হবে, এই মুহুর্তে কোন থ্রেড এই অপেক্ষমান-সক্ষম টাস্কটি সম্পাদন করে?

102

যখনই অপারেশনটি অ্যাসিঙ্ক্রোনসিভভাবে হওয়া দরকার তখনই সিপিইউয়ের কাজ করার প্রয়োজন হয় না, সেই অপারেশন অন্য থ্রেড তৈরি না করেই করা যেতে পারে। উদাহরণস্বরূপ, যদি অ্যাসিঙ্ক অপারেশনটি I / O হয়, সিপিইউতে I / O সম্পূর্ণ হওয়ার জন্য অপেক্ষা করতে হবে না। এটি কেবল অপারেশন শুরু করতে হবে এবং I / O হার্ডওয়্যার (ডিস্ক নিয়ামক, নেটওয়ার্ক ইন্টারফেস ইত্যাদি) I / O কাজ করার সময় অন্য কাজে যেতে পারে। হার্ডওয়্যার সিপিইউতে বাধা দিয়ে সিপিইউটি শেষ হওয়ার পরে জানতে দেয় এবং ওএস তার পরে আপনার অ্যাপ্লিকেশনটিতে ইভেন্টটি সরবরাহ করে।

প্রায়শই উচ্চ-স্তরের বিমূর্ততা এবং API গুলি ওএস এবং অন্তর্নিহিত হার্ডওয়্যার থেকে অন্তর্নিহিত অ্যাসিনক্রোনাস এপিআইয়ের উপলব্ধ প্রকাশ করে না। এই ক্ষেত্রে অ্যাসিক্রোনাস অপারেশনগুলি করতে সাধারণত থ্রেড তৈরি করা সহজ, এমনকি স্পাডড থ্রেড কেবলমাত্র I / O অপারেশনটির জন্য অপেক্ষা করে থাকে।

যদি অ্যাসিঙ্ক্রোনাস অপারেশনটির সিপিইউয়ের কাজ করার প্রয়োজন হয়, তবে সাধারণভাবে সেই অপারেশনটি সত্যিকারের অ্যাসিনক্রোনাস হওয়ার জন্য অন্য থ্রেডে ঘটতে হয়। তারপরেও, যদি একাধিক এক্সিকিউশন ইউনিট থাকে তবে এটি সত্যই অ্যাসিক্রোনাস হবে।


1
ভালভাবে ব্যাখ্যা করা হয়েছে, আপনাকে ধন্যবাদ; তবে আমার এখানে একটি প্রশ্ন আছে। আপনি উল্লেখ করেছেন যে "উদাহরণস্বরূপ, যদি অ্যাসিঙ্ক অপারেশন I / O হয়, সিপিইউতে I / O সম্পূর্ণ হওয়ার জন্য অপেক্ষা করতে হবে না। এটি কেবল অপারেশন শুরু করা দরকার"। আমার প্রশ্নটি হল যখন প্রোগ্রামটি একক থ্রেডেড থাকে এবং কোড লাইন 3 তে আপনি যখন আই / ও অপারেশন কল করেন, তখন আপনি কীভাবে 3 লাইনে অপারেশন শুরু করতে পারেন এবং I / O অপারেশনটি সম্পন্ন হওয়ার অপেক্ষায় না রেখে 4 লাইনটি কার্যকর করতে পারেন? ? আমার জন্য, আমি ইনপুট / আউটপুট অপারেশন শেষ হওয়ার জন্য অপেক্ষা না করেই চালানো লাইন 4 অর্জনে একটি নতুন থ্রেড লাইন 3 কোড দিতে হবে [জাভা PGM দৃষ্টিকোণ]।
স্পাইডারম্যান

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

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

@ স্পিডারম্যান হতে পারে ... ওএসের অ্যাসিঙ্ক ফাংশনটি কেবল মিথ্যা বা সরাসরি কিছু ফিরিয়ে দেয়।
বায়ংগিন ইউন

18

না, অ্যাসিঙ্ক্রোনাস কলগুলি সর্বদা থ্রেডগুলিতে জড়িত না।

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


12

জাভাস্ক্রিপ্ট একক থ্রেডেড এবং অ্যাসিনক্রোনাস। আপনি যখন এক্সএমএলএইচটিপিআরকেস্ট ব্যবহার করেন, উদাহরণস্বরূপ, আপনি এটিকে একটি কলব্যাক ফাংশন সরবরাহ করেন যা প্রতিক্রিয়া ফিরে আসার সময় অযৌক্তিকভাবে কার্যকর করা হবে।

জন রেসিগ জাভাস্ক্রিপ্টে টাইমারগুলি কীভাবে কাজ করে সে সম্পর্কিত সম্পর্কিত বিষয়ে একটি ভাল ব্যাখ্যা রয়েছে ।


12

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


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

11

আসল থ্রেড সমর্থন করার আগে মেসেজ লুপ ব্যবহার করে উইন্ডোজ সর্বদা অ প্রিম্পিটিভ সময় (সংস্করণ 2.13, 3.0, 3.1, ইত্যাদি) থেকে অ্যাসিনক্রোনাস প্রসেসিং করে। সুতরাং আপনার প্রশ্নের উত্তর দেওয়ার জন্য, না, অ্যাসিনক্রোনাস প্রসেসিংয়ের জন্য কোনও থ্রেড তৈরি করার প্রয়োজন নেই।


@ ডিএমকেই - এটি আকর্ষণীয় যে কীভাবে একই পদ্ধতিতে বিভিন্ন সিস্টেমের বিকাশ ঘটে।
ওটিভিও ডাসিও

8

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

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

নোট করুন যে আন্ত: প্রক্রিয়া (বা ইন্টারপ্রসেস) যোগাযোগ (আইপিসি) সাধারণত আন্তঃ-প্রক্রিয়া যোগাযোগ অন্তর্ভুক্ত করার জন্য সাধারণ করা হয়, যেহেতু লক করার কৌশলগুলি এবং ডেটা সিঙ্ক্রোনাইজ করার পদ্ধতি সাধারণত কার্যকর হয় নির্ধারণের পৃথক থ্রেড যে প্রক্রিয়াটিতে চলছে তা নির্বিশেষে are


7

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

এই ধরণের থ্রেড ছাড়াই আপনার প্রোগ্রামটি "ইন" আপনার একযোগে সম্পাদনের স্ট্রিম রয়েছে ।


5

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

একক থ্রেডযুক্ত অ্যাসিনক্রোনাস প্রোগ্রামগুলির উদাহরণ রয়েছে। কিছুটা এইরকম:

...do something
...send some async request
while (not done)
    ...do something else
    ...do async check for results

2

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

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


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

উইন্ডোজে এটিও সত্য নয়। ওভারল্যাপ করা I / O উদাহরণস্বরূপ, অ্যাসিনক্রোনাস।
জেসন ওরেডরফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.