সান্নিধ্য কেন?
ডেটা লোড করার মতো আপনি আপনার অ্যাপ্লিকেশনে ভারী কাজগুলি যুক্ত করার সাথে সাথে এটি আপনার ইউআই কাজটি কমিয়ে দেয় বা এমনকি এটিকে হিম হয়ে যায়। সংকেত আপনাকে "একসাথে" 2 বা আরও বেশি কার্য সম্পাদন করতে দেয়। এই পদ্ধতির অসুবিধা হ'ল থ্রেড সুরক্ষা যা সর্বদা নিয়ন্ত্রণ করা সহজ নয়। বিভিন্ন কাজ যখন বিভিন্ন থ্রেডে একই ভেরিয়েবল পরিবর্তন করার চেষ্টা করতে বা ইতিমধ্যে বিভিন্ন থ্রেড দ্বারা অবরুদ্ধ সংস্থানগুলিতে অ্যাক্সেস করার মতো একই সংস্থানগুলিতে অ্যাক্সেস করতে চায় তবে Fe।
কয়েকটি বিমূর্ততা সম্পর্কে আমাদের সচেতন হওয়া দরকার।
- সারি
- সিঙ্ক্রোনাস / এসিনক্রোনাস টাস্ক পারফরম্যান্স।
- অগ্রাধিকার।
- সাধারণ ঝামেলা।
সারি
অবশ্যই সিরিয়াল বা সমবর্তী হতে হবে । পাশাপাশি একই সাথে বৈশ্বিক বা বেসরকারী ।
ক্রমিক সারিগুলির সাথে, কার্যগুলি এক সাথে সমাপ্ত হবে যখন সমবর্তী সারির সাথে, কাজগুলি একই সাথে সঞ্চালিত হবে এবং অপ্রত্যাশিত সময়সূচীতে সমাপ্ত হবে। একই গোষ্ঠীর কাজগুলি সমবর্তী সারির তুলনায় সিরিয়াল কাতারে আরও সময় নেবে।
আপনি নিজের ব্যক্তিগত কাতার তৈরি করতে পারেন ( সিরিয়াল বা সমবর্তী উভয় ) বা ইতিমধ্যে উপলব্ধ গ্লোবাল (সিস্টেম) সারি ব্যবহার করতে পারেন । প্রধান কিউ শুধুমাত্র ক্রমিক কিউ সব আউট বিশ্বব্যাপী সারিগুলি ।
ভারী কাজগুলি না করার জন্য সুপারিশ করা হয় যা মূল কাতারে (ইউএসআই থেকে ডেটা লোডিং ডেটা) UI এর কাজ হিসাবে উল্লেখ করা হয় না , তবে ইউআইকে হিমায়িত এবং ব্যবহারকারীর ক্রিয়াকলাপের জন্য প্রতিক্রিয়াশীল রাখতে অন্যান্য কাতারে এটি করার জন্য। যদি আমরা অন্যান্য কাতারে ইউআই পরিবর্তন করতে পারি তবে পরিবর্তনগুলি একটি ভিন্ন এবং অপ্রত্যাশিত সময়সূচী এবং গতিতে করা যেতে পারে। কিছু ইউআই উপাদানগুলি প্রয়োজন হওয়ার আগে বা পরে আঁকতে পারে। এটি ইউআই ক্রাশ করতে পারে। আমরা যে যেহেতু মনে রাখা প্রয়োজন বিশ্বব্যাপী সারিগুলি হয় সিস্টেম সারিগুলি কিছু অন্যান্য কর্ম তাদের উপর সিস্টেম দ্বারা চালাতে পারেন আছে।
পরিষেবার গুণমান / অগ্রাধিকার
কাতারেও বিভিন্ন কিউস (পরিষেবার মান) রয়েছে যা কার্য সম্পাদনকে অগ্রাধিকার নির্ধারণ করে (সর্বোচ্চ থেকে নীচে এখানে):
.userInteractive - প্রধান সারি
.userInitiated - ব্যবহারকারীর জন্য যে কাজ শুরু করা হয়েছে তার উপর ব্যবহারকারী কিছু প্রতিক্রিয়া
প্রত্যাশার জন্য অপেক্ষা করে u কার্যগুলির জন্য - যা কিছুটা সময় নেয় এবং তাত্ক্ষণিক প্রতিক্রিয়ার প্রয়োজন হয় না, যেমন ডেটা নিয়ে কাজ করা
back ব্যাকগ্রাউন্ড - ভিজ্যুয়াল অংশের সাথে সম্পর্কিত নয় এবং যা সমাপ্তির জন্য কঠোর নয়) এর জন্য।
রয়েছে
.default কিউ যা does't স্থানান্তর QoS তথ্য। যদি কোয়াসটি সনাক্ত করা সম্ভব না হত তবেQos .userInitiated এবং .uutility এর মধ্যে ব্যবহার করা হবে ।
টাস্কগুলি সিঙ্ক্রোনজ বা অ্যাসিঙ্ক্রোনালি সম্পাদন করা যায় ।
সিঙ্ক্রোনাস ফাংশনটি কাজ শেষ হওয়ার পরেই বর্তমান কাতারে নিয়ন্ত্রণ ফিরিয়ে দেয়। এটি সারিটি ব্লক করে এবং কাজ শেষ হওয়া পর্যন্ত অপেক্ষা করে।
বিভিন্ন কাতারে কার্য সম্পাদনের জন্য পাঠানো হওয়ার পরে অ্যাসিঙ্ক্রোনাস ফাংশনটি বর্তমান কাতারে নিয়ন্ত্রণ ফিরে আসে। টাস্ক শেষ না হওয়া পর্যন্ত এটি অপেক্ষা করে না। এটি সারিটি ব্লক করে না।
সাধারণ ঝামেলা।
সমসাময়িক অ্যাপ্লিকেশনগুলি প্রজেক্ট করার সময় প্রোগ্রামাররা সর্বাধিক জনপ্রিয় ভুলগুলি নিম্নলিখিত:
- রেসের শর্ত - যখন অ্যাপ্লিকেশন কাজ কোডের অংশগুলি কার্যকর করার ক্রমের উপর নির্ভর করে তখন ঘটে।
- অগ্রাধিকার বিপর্যয় - যখন উচ্চতর অগ্রাধিকারের কাজগুলি কিছু সংস্থানগুলি অবরুদ্ধ হওয়ার কারণে ছোট অগ্রাধিকারের কাজগুলি সমাপ্ত হওয়ার জন্য অপেক্ষা করে
- ডেডলক - যখন কয়েকটি কাতারে ইতিমধ্যে এই কয়েকটি সারি দ্বারা অবরুদ্ধ উত্সগুলির (ভেরিয়েবল, ডেটা ইত্যাদি) জন্য অসীম অপেক্ষা থাকে।
মূল কাতারে সিঙ্ক ফাংশনটি কখনও কল করবেন না ।
আপনি যদি মূল কাতারে সিঙ্ক ফাংশনটি কল করেন তবে এটি সারিটি ব্লক করার সাথে সাথে সারিটি কাজটি শেষ হওয়ার অপেক্ষায় থাকবে তবে এই কাজটি কখনই শেষ হবে না কারণ এটি সারিটির কারণে এমনকি শুরু করতে সক্ষম হবে না ইতিমধ্যে অবরুদ্ধ একে ডেডলক বলা হয় ।
সিঙ্ক কখন ব্যবহার করবেন?
যখন আমাদের কাজটি শেষ না হওয়া পর্যন্ত অপেক্ষা করতে হবে। Fe যখন আমরা নিশ্চিত করছি যে কোনও ফাংশন / পদ্ধতি ডাবল নয়। Fe আমাদের সিঙ্ক্রোনাইজেশন রয়েছে এবং এটি সম্পূর্ণরূপে শেষ না হওয়া পর্যন্ত ডাবল ডাকা হতে আটকাতে চেষ্টা করছে। এই উদ্বেগের জন্য এখানে কিছু কোড রয়েছে:
আইওএস ডিভাইসে ত্রুটি ক্র্যাশ রিপোর্টের কারণ কীভাবে তা খুঁজে বের করবেন?
DispatchQueue.main.sync
একটি পটভূমি থ্রেড থেকে কল করা ভুল হবে ?