অ্যাসিনক্রোনাস প্রোগ্রামিং এবং মাল্টিথ্রেডিংয়ের মধ্যে পার্থক্য কী?


234

আমি ভেবেছিলাম যে এগুলি মূলত একই জিনিস - প্রসেসরের মধ্যে বিভক্ত কর্মসূচী লেখার (2+ প্রসেসরযুক্ত মেশিনে) writing তারপর আমি পড়া করছি এই , যা বলে:

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

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

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

এখন আমি পিসিতে উদাহরণ হিসাবে অ্যাসিক্রোনাস টাস্কগুলির ধারণাটি বুঝতে পারি। জোন স্কিটের সি # এর 467 , তৃতীয় সংস্করণের গভীরতায়

async void DisplayWebsiteLength ( object sender, EventArgs e )
{
    label.Text = "Fetching ...";
    using ( HttpClient client = new HttpClient() )
    {
        Task<string> task = client.GetStringAsync("http://csharpindepth.com");
        string text = await task;
        label.Text = text.Length.ToString();
    }
}

asyncশব্দ মানে হলো " এই ফাংশনটি, যখনই এটা বলা হয়, একটি প্রেক্ষাপটে যা তার সমাপ্তির সব কিছুর জন্য প্রয়োজন বোধ করা হয় তার কল বলা হবে পরে বলা হয় না হবে।"

অন্য কথায়, এটি কোনও কাজের মাঝখানে লিখতে হবে

int x = 5; 
DisplayWebsiteLength();
double y = Math.Pow((double)x,2000.0);

যেহেতু DisplayWebsiteLength()সঙ্গে কিছুই করার আছে xবা y, কারণ হবে DisplayWebsiteLength()"পটভূমিতে" নিষ্পন্ন করা হবে, মত

                processor 1                |      processor 2
-------------------------------------------------------------------
int x = 5;                                 |  DisplayWebsiteLength()
double y = Math.Pow((double)x,2000.0);     |

অবশ্যই এটি একটি মূর্খ উদাহরণ, তবে আমি কি সঠিক বা আমি সম্পূর্ণ বিভ্রান্ত বা কি?

(এছাড়াও, আমি উপরের ফাংশনটির শরীরে কেন senderএবং eকখনই ব্যবহৃত হয় না সে সম্পর্কে আমি বিভ্রান্ত


13
এটি একটি দুর্দান্ত ব্যাখ্যা: ব্লগ.স্টেফেনিলেরি.কম
জাকুব লর্টজ

senderএবং eএটি প্রকৃতপক্ষে ইভেন্ট হ্যান্ডলার হিসাবে প্রস্তাব দিচ্ছে - এটি এমন একমাত্র জায়গা যেখানে async voidপছন্দসই। সম্ভবত, এটি একটি বোতাম ক্লিক বা এর মতো কিছুতে ডাকা হয় - ফলাফলটি হ'ল ফলশ্রুতিটি এই অ্যাপ্লিকেশনটির বাকী অংশের সাথে পুরোপুরি অযৌক্তিকভাবে ঘটে। তবে এটি এখনও সমস্ত থ্রেডে রয়েছে - ইউআই থ্রেড (একটি আইওসিপি থ্রেডে সময়ের একটি ছোট স্লিভারের সাথে যা ইউআই থ্রেডে কলব্যাক পোস্ট করে)।
লুয়ান


3
একটি অত্যন্ত গুরুত্বপূর্ণ নোট DisplayWebsiteLengthকোড নমুনা: আপনি ব্যবহার করা উচিত নয় HttpClientএকটি usingবিবৃতি - একটি ভারী লোড অধীনে, কোড SocketException ত্রুটি ফলে প্রাপ্তিসাধ্য সকেট সংখ্যা এক্সস্ট পারবেন না। অনুপযুক্ত ইনস্ট্যান্টেশন সম্পর্কিত আরও তথ্য ।
গণ

1
@ জাকুবল্টজ নিবন্ধটি সত্যই কার জন্য তা আমি জানি না। নতুনদের জন্য নয়, যেহেতু এটির জন্য থ্রেড, বাধা, সিপিইউ সম্পর্কিত স্টাফ ইত্যাদি সম্পর্কে ভাল জ্ঞান প্রয়োজন, উন্নত ব্যবহারকারীদের জন্য নয়, তাদের জন্য এটি ইতিমধ্যে সমস্ত পরিষ্কার। আমি নিশ্চিত যে এটি কাউকে বুঝতে সহায়তা করবে না - এটি উচ্চ স্তরের বিমূর্ততা সম্পর্কে about
লোরেনো 3:38

উত্তর:


589

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

একটি উপমা সাধারণত সাহায্য করে। আপনি একটি রেস্তোরাঁয় রান্না করছেন। ডিম এবং টোস্টের জন্য একটি অর্ডার আসে।

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

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

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

সুতরাং আসুন আরও বিস্তারিতভাবে জনের উদাহরণটি দেখুন। কি ঘটেছে?

  • কেউ ডিসপ্লে ওয়েবেসাইটলেন্টকে আমন্ত্রণ জানায়। WHO? আমাদের কিছু যায় আসে না।
  • এটি একটি লেবেল সেট করে, একটি ক্লায়েন্ট তৈরি করে এবং ক্লায়েন্টকে কিছু আনতে বলে। ক্লায়েন্ট কিছু আনার কার্য প্রতিনিধিত্ব করে এমন একটি বস্তু ফেরায়। সেই কাজটি চলছে।
  • এটি কি অন্য থ্রেডে চলছে? সম্ভবত না. কোনও থ্রেড নেই কেন স্টিফেন এর নিবন্ধ পড়ুন ।
  • এখন আমরা কাজটির জন্য অপেক্ষা করছি। কি ঘটেছে? আমরা এটি তৈরির সময়টির মধ্যে টাস্কটি সম্পন্ন হয়েছে এবং আমরা এটির জন্য অপেক্ষা করেছি কিনা তা পরীক্ষা করে দেখি। যদি হ্যাঁ, তবে আমরা ফলাফলটি আনব এবং চালিয়ে যাব। ধরা যাক এটি সম্পূর্ণ হয়নি। আমরা এই পদ্ধতির বাকী অংশটিকে সেই কাজটির ধারাবাহিকতা এবং ফিরে হিসাবে সাইন আপ করি
  • এখন নিয়ন্ত্রণ কলারে ফিরে এসেছে। এটার কাজ কি? যা খুশি তাই হোক।
  • এখন ধরুন টাস্কটি সম্পূর্ণ হয়েছে। এটা কীভাবে করল? হতে পারে এটি অন্য কোনও থ্রেডে চলছিল, বা সম্ভবত যে কলারটি আমরা স্রেফ ফিরে এসেছি তা বর্তমান থ্রেডে সম্পূর্ণ হওয়ার জন্য এটির অনুমতি দেওয়া হয়েছে। নির্বিশেষে, আমাদের এখন একটি সম্পূর্ণ কাজ রয়েছে।
  • কাজটি সম্পূর্ণরূপে চালানোর জন্য সঠিক থ্রেড - আবার সম্ভবত সম্ভবত একমাত্র থ্রেডকে জিজ্ঞাসা করে ।
  • নিয়ন্ত্রণটি তত্ক্ষণাত্ সেই পদ্ধতিতে ফিরে যায় যা আমরা অপেক্ষা করার পয়েন্টে রেখেছিলাম। এখন সেখানে নেই ফলে প্রাপ্তিসাধ্য তাই আমরা ধার্য করতে পারেন textএবং পদ্ধতি বাকি চালানো।

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


8
@ user5648283: হার্ডওয়্যারটি কার্য সম্পর্কে চিন্তা করার জন্য ভুল স্তর। একটি টাস্কটি কেবল এমন একটি অবজেক্ট যা প্রতিনিধিত্ব করে যে (1) ভবিষ্যতে একটি মান উপলব্ধ হবে এবং (2) কোডটি (সঠিক থ্রেডে) চালাতে পারে যখন সেই মানটি উপলব্ধ থাকে । ভবিষ্যতে কোনও স্বতন্ত্র কাজ কীভাবে ফলাফল অর্জন করে তা নির্ভর করে। কেউ কেউ এটি করতে "ডিস্ক" এবং "নেটওয়ার্ক কার্ড" এর মতো বিশেষ হার্ডওয়্যার ব্যবহার করবেন; কিছু সিপিইউয়ের মতো হার্ডওয়্যার ব্যবহার করবে।
এরিক লিপার্ট

13
@ user5648283: আবার, আমার উপমা সম্পর্কে চিন্তা করুন think যখন কেউ আপনাকে ডিম এবং টোস্ট রান্না করতে বলে, আপনি বিশেষ হার্ডওয়্যার - একটি চুলা এবং একটি টোস্টার - ব্যবহার করেন এবং হার্ডওয়্যারটি কাজ করার সময় আপনি রান্নাঘরটি পরিষ্কার করতে পারেন। যদি কেউ আপনাকে ডিম, টোস্ট এবং সর্বশেষ হোবিট মুভিটির মূল সমালোচক জিজ্ঞাসা করে তবে ডিম এবং টোস্ট রান্না করার সময় আপনি নিজের পর্যালোচনা লিখতে পারেন, তবে আপনাকে তার জন্য হার্ডওয়্যার ব্যবহার করার দরকার নেই।
এরিক লিপার্ট

9
@ user5648283: এখন "কোডটি পুনরায় সাজানো" সম্পর্কে আপনার প্রশ্ন হিসাবে এটি বিবেচনা করুন। ধরুন আপনার কাছে একটি পদ্ধতি পি রয়েছে যার ফলন ফেরত রয়েছে, এবং একটি পদ্ধতি Q যা পি এর ফলাফলের উপর পূর্বাভাস দেয় কোডের মাধ্যমে পদক্ষেপ। আপনি দেখতে পাবেন যে আমরা কিউ এর সামান্য বিট চালাচ্ছি তারপর পি এর সামান্য বিট পরে কিছুটা কিউ ... আপনি কি এর বিন্দুটি বুঝতে পারছেন? অপেক্ষার মূলত অভিনব পোশাকে প্রত্যাবর্তন হয় । এখন আরও স্পষ্ট?
এরিক লিপার্ট

10
টোস্টার হল হার্ডওয়্যার। হার্ডওয়্যারটিকে পরিষেবা দেওয়ার জন্য কোনও থ্রেডের প্রয়োজন নেই; ডিস্ক এবং নেটওয়ার্ক কার্ড এবং ওএস থ্রেডের নীচে স্তরে কী চলবে না।
এরিক লিপার্ট

5
@ শিবপ্রসাদকৈরালা: এটি মোটেও সত্য নয় । যদি আপনি এটি বিশ্বাস করেন, তবে আপনার অ্যাসিনক্রোনাই সম্পর্কে কিছু ভ্রান্ত বিশ্বাস রয়েছে । সি # তে অ্যাসিনক্রোনির পুরো বিন্দুটি এটি কোনও থ্রেড তৈরি করে না
এরিক লিপার্ট

27

ইন-ব্রাউজার জাভাস্ক্রিপ্ট একটি অ্যাসিক্রোনাস প্রোগ্রামের দুর্দান্ত উদাহরণ যার কোনও থ্রেড নেই।

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

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

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

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

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

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

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

সুতরাং আপনি আপনার ইউআই ইভেন্ট হ্যান্ডলারের awaitএকটি আই / ও অপারেশন রাখতে পারেন, অন্যান্য কাজ করার জন্য ইউআই থ্রেডটি মুক্ত করে দিতে পারেন এবং ফাইলটি পড়া শেষ করে কম-বেশি স্বয়ংক্রিয়ভাবে ইউআই থ্রেডে ফিরে আসতে পারেন - কখনও না করেই একটি নতুন থ্রেড তৈরি করুন।


এখানে কেবল একটি জাভাস্ক্রিপ্ট "থ্রেড" চলছে - ওয়েব ওয়ার্কারদের সাথে আর সত্য নয় ।
ওলেক্সি

6
@ অলেক্সি: টেকনিক্যালি সত্য, তবে আমি এটিতে যেতে চাই নি কারণ ওয়েব ওয়ার্কার্স এপিআই নিজেই অবিচ্ছিন্ন, এবং ওয়েব ওয়ার্কারদের জাভাস্ক্রিপ্টের মান বা ডোমকে সরাসরি ওয়েব পৃষ্ঠায় প্রভাবিত করার অনুমতি দেওয়া হচ্ছে না তারা যে ওয়েব পেজে ডাকা হয়েছে on থেকে, যার অর্থ এই উত্তরের গুরুত্বপূর্ণ দ্বিতীয় অনুচ্ছেদটি এখনও সত্য। প্রোগ্রামারের দৃষ্টিকোণ থেকে, কোনও ওয়েব কর্মীকে ডাকার এবং একটি এজেএক্স অনুরোধের মধ্যে কিছুটা পার্থক্য নেই।
স্ট্রিপলিং ওয়ারিয়র
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.