খারাপ মাল্টিথ্রেডিংয়ের কারণে প্রায়শই / বাস্তবে ব্যর্থ হওয়া কোন প্রকল্প থেকে আপনি কোন পাঠ শিখলেন? [বন্ধ]


11

খারাপ মাল্টিথ্রেডিংয়ের কারণে প্রায়শই / বাস্তবে ব্যর্থ হওয়া কোন প্রকল্প থেকে আপনি কোন পাঠ শিখলেন?

কখনও কখনও, কাঠামোটি একটি নির্দিষ্ট থ্রেডিং মডেল চাপিয়ে দেয় যা জিনিসকে সঠিকতার পক্ষে আরও জটিলতার অর্ড করে তোলে।

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

আমি দেখতে পেলাম যে মাল্টিথ্রেডিংয়ের সমস্যাগুলিতে আমি ভাল ছিলাম যেখানে সাধারণ কাঁটাচামচ / যোগদান রয়েছে এবং যেখানে ডেটা কেবল এক দিকে ভ্রমণ করে (যখন সংকেতগুলি একটি বৃত্তাকার দিকে ভ্রমণ করতে পারে)।

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

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

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

যোগ করা হয়েছে

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

সহযোগী অবদানকারী:

(অবদানকারীদের সত্যিকারের / ব্যক্তিগত উদাহরণ ব্যবহার করার দরকার নেই an



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

উত্তর:


13

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

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


থ্রেডগুলির মধ্যে মেমরি (বা অন্যান্য সংস্থানগুলি) ভাগ না করার জন্য +1 মেসেজিং ব্যতীত যা অবিচ্ছিন্ন হতে হবে; "
নেমানজা ত্রিফুনোভিচ

1
শুধুমাত্র উপায়? অপরিবর্তনীয় ডেটা প্রকার সম্পর্কে কী?
অ্যারোনআট

is that in a multithreaded program the scheduler is a sneaky swine that hates you.- না এটি হয় না, এটি আপনি যা করতে বলেছেন ঠিক তা করে
তোলে

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

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

6

আমি এখনই ভাবতে পারি এমন কয়েকটি বুনিয়াদি পাঠ: (প্রকল্পগুলি ব্যর্থ হতে নয় তবে বাস্তব প্রকল্পগুলিতে দেখা বাস্তব সমস্যাগুলি থেকে):

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

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

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


"প্রকল্প" এর অর্থ কি "সমাবেশ"? আমি দেখছি না যে সমাবেশগুলির মধ্যে ক্লাসগুলির বিতরণ কীভাবে থ্রেডিংয়ের সমস্যা সৃষ্টি করবে।
নিকি

আমার প্রকল্পে এটি আসলে একটি সমাবেশ। তবে মূল কথাটি হ'ল those ফোল্ডারে থাকা সমস্ত কোডকে মূল থ্রেড থেকে কল করতে হবে, কোনও ব্যতিক্রম নেই।
কেরা

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

1

জাভা 5 এবং তারপরে এক্সিকিউটার রয়েছে যা বহু-থ্রেডিং কাঁটাচামচ স্টাইল প্রোগ্রামগুলি পরিচালনা করার জন্য জীবনকে সহজ করার উদ্দেশ্যে তৈরি হয়েছে।

এগুলি ব্যবহার করুন, এটি প্রচুর ব্যথা দূর করবে।

(এবং, হ্যাঁ, আমি এটি একটি প্রকল্প থেকে শিখেছি :))


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

1

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

  • # 1 বিধি: কেআইএসএস - যদি কোনও থ্রেডের প্রয়োজন না হয় তবে একটি স্পিন করবেন না। যতটা সম্ভব সিরিয়ালাইজ করুন।
  • # 2 বিধি: # 1 ভাঙবেন না।
  • # 3 আপনি যদি পর্যালোচনার মাধ্যমে প্রমাণ করতে না পারেন এটি সঠিক, এটি নয়।

নিয়মের জন্য +1 ১। আমি এমন একটি প্রকল্পে কাজ করছিলাম যা অন্য থ্রেডটি সম্পূর্ণ না হওয়া পর্যন্ত প্রাথমিকভাবে ব্লক করতে চলেছিল - মূলত একটি পদ্ধতি কল! ভাগ্যক্রমে, আমরা সেই পদ্ধতির বিরুদ্ধে সিদ্ধান্ত নিয়েছি।
মাইকেল কে

# 3 এফটিডাব্লু লক টাইমিং ডায়াগ্রামগুলির সাথে লড়াই করা বা আপনি যা ব্যবহার করেন তা প্রমাণ করার জন্য কয়েক মাস ব্যয় করা ভাল যে এটি কখনও কখনও বিচ্ছিন্ন হয়ে পড়ে কেন ভেবে অবাক হয় months

1

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

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

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


0

আবার চেষ্টা করে দেখুন।

কমপক্ষে আমার জন্য, যা পার্থক্য তৈরি করেছিল তা অনুশীলন ছিল। বেশ কয়েকবার মাল্টি থ্রেডেড এবং বিতরণ কাজ করার পরে আপনি কেবল এটির হ্যাঙ্গ পাবেন।

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

আর একটি বিষয় যা আরও শিখছে তা হ'ল লক ফ্রি ডেটা স্ট্রাকচার।

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


আমি যে কোনও ফ্রেমওয়ার্ক থেকে গল্পগুলি শুনতে আগ্রহী, কারণ আমি বিশ্বাস করি যে প্রতিটি কাঠামো থেকে শেখার মতো জিনিস রয়েছে, বিশেষত যেগুলি আমি প্রকাশ করি নি।
রওয়ং

1
ডিবাগারগুলি বহু-থ্রেড পরিবেশে মূলত অকেজো।
পেমেদাস

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

0

আমি শিখেছি যে নিম্ন স্তরের মডিউলগুলি থেকে উচ্চ স্তরের মডিউলগুলিতে কলব্যাকগুলি একটি বিশাল মন্দ কারণ কারণ তারা একটি বিপরীত ক্রমে লকগুলি অর্জন করে।


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

একটি অপ্টিমাইজেশান সমস্যা সমাধান করা (যেমন চূড়ান্তভাবে কম (এক্স)) কমপ্লেক্স অপ্টিমাইজেশন পদ্ধতিতে একটি ফাংশন এফ (এক্স) এর পয়েন্টার সরবরাহ করে কার্যকর করা হয়, যা সর্বনিম্ন সন্ধানের সময় "এটিকে" ফিরিয়ে দেয় "। কলব্যাক ছাড়াই আপনি কীভাবে এটি করবেন?
কোয়ান্ট_দেব

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

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

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