সাধারণত দুটি স্তরের বাফারিং জড়িত রয়েছে:
- অভ্যন্তরীণ বাফার
- অপারেটিং সিস্টেম বাফারগুলি
অভ্যন্তরীণ বাফারগুলি রানফটাইম / লাইব্রেরি / ভাষার দ্বারা তৈরি বাফার যা আপনার বিরুদ্ধে প্রোগ্রামিং করছে এবং এটি প্রতিটি লেখার জন্য সিস্টেম কল এড়িয়ে জিনিসগুলিকে গতি বাড়ানো। পরিবর্তে, আপনি যখন কোনও ফাইল অবজেক্টে লিখেন, আপনি তার বাফারে লিখে ফেলেন এবং যখনই বাফারটি পূর্ণ হয়, তখন সিস্টেম কল ব্যবহার করে তথ্যটি প্রকৃত ফাইলটিতে লেখা হয়।
তবে, অপারেটিং সিস্টেম বাফারগুলির কারণে, এর অর্থ এই নয় যে ডেটাটি ডিস্কে লিখিত হয়েছে । এর অর্থ কেবল এই হতে পারে যে ডেটা আপনার রানটাইম দ্বারা পরিচালিত বাফারগুলি থেকে অপারেটিং সিস্টেম দ্বারা রক্ষণাবেক্ষণ করা বাফারগুলিতে অনুলিপি করা হয়।
যদি আপনি কিছু লিখেন এবং এটি বাফারে শেষ হয় (কেবল), এবং শক্তিটি আপনার মেশিনে কাটা হয়, মেশিনটি বন্ধ হয়ে গেলে সেই ডেটা ডিস্কে থাকে না।
সুতরাং, যাতে আপনার তাদের নিজস্ব অবজেক্টগুলিতে পদ্ধতি flush
এবং fsync
পদ্ধতি রয়েছে তার সাথে সহায়তা করার জন্য ।
প্রথমটি, flush
কোনও প্রোগ্রামের বাফারে থাকা যে কোনও ডেটা প্রকৃত ফাইলটিতে স্থির থাকে সেইগুলি সহজেই লিখবে। সাধারণত এর অর্থ হ'ল প্রোগ্রামটি বাফার থেকে অপারেটিং সিস্টেম বাফারে ডেটা অনুলিপি করা হবে।
বিশেষত এর অর্থ হ'ল অন্য প্রক্রিয়াতে যদি সেই একই ফাইলটি পড়ার জন্য খোলা থাকে, তবে আপনি যে ফাইলটি সবেমাত্র ফাইলটিতে প্রবেশ করেছেন সেগুলি অ্যাক্সেস করতে সক্ষম হবে। তবে, এটি অগত্যা এটির অর্থ এই নয় যে এটি ডিস্কে "স্থায়ীভাবে" সংরক্ষণ করা হয়েছে।
এটি করার জন্য, আপনাকে সেই os.fsync
পদ্ধতিটি কল করতে হবে যা নিশ্চিত করে যে সমস্ত অপারেটিং সিস্টেম বাফারগুলি স্টোরেজ ডিভাইসগুলির সাথে সেগুলি সিঙ্ক্রোনাইজ করা হয়েছে তারা অন্য কথায়, এই পদ্ধতিটি অপারেটিং সিস্টেম বাফারগুলি থেকে ডিস্কে ডেটা অনুলিপি করবে।
সাধারণত আপনার কোনও পদ্ধতির সাথে মাথা ঘামানোর দরকার নেই, তবে আপনি যদি এমন কোনও পরিস্থিতিতে থাকেন যেখানে ডিস্কে আসলে কী শেষ হয় সে সম্পর্কে প্যারানোইয়া ভাল জিনিস হয় তবে আপনাকে নির্দেশ অনুসারে উভয় কল করা উচিত।
2018 এ সংযোজন।
নোট করুন যে ক্যাশে প্রক্রিয়াধীন ডিস্কগুলি এখন ২০১৩ সালের তুলনায় এখন অনেক বেশি সাধারণ, তাই এখন আরও অনেক স্তর রয়েছে ক্যাশে এবং বাফারদের এতে জড়িত। আমি ধরে নিয়েছি যে এই বাফারগুলি সিঙ্ক / ফ্লাশ কলগুলিও পরিচালনা করা হবে তবে আমি সত্যি জানি না।
with file('blah') as fd: #dostuff
কনস্ট্রাক্টটি ব্যবহার করি তখন আমি জানি এটি ফাইল বিবরণী বন্ধ করার গ্যারান্টি দেয়। এটিও ফ্লাশ করে বা সিঙ্ক করে?