ব্রায়ান কর্নিগান এই ভিডিওটিতে ব্যাখ্যা করেছেন যে স্মৃতি সীমাবদ্ধতার ভিত্তিতে ছোট্ট ভাষা / প্রোগ্রামগুলিতে প্রাথমিক বেল ল্যাবসের আকর্ষণ
একটি বড় মেশিনটি 64 কে-বাইট হবে - কে, এম বা জি নয় - এবং এর অর্থ কোনও পৃথক প্রোগ্রাম খুব বড় হতে পারে না, এবং তাই ছোট প্রোগ্রামগুলি লেখার প্রাকৃতিক প্রবণতা ছিল, এবং তারপরে পাইপ প্রক্রিয়াটি, মূলত ইনপুট আউটপুট পুনর্নির্দেশকরণ, একটি প্রোগ্রামকে অন্যের সাথে লিঙ্ক করা সম্ভব করে।
তবে আমি বুঝতে পারি না কীভাবে এটি প্রোগ্রামগুলির মধ্যে সঞ্চারের জন্য ডেটা র্যামে সংরক্ষণ করতে হবে তা বিবেচনা করে মেমরির ব্যবহার সীমিত করতে পারে।
উইকিপিডিয়া থেকে :
বেশিরভাগ ইউনিক্সের মতো সিস্টেমে পাইপলাইনের সমস্ত প্রক্রিয়া একই সময়ে শুরু হয় [জোর দেওয়া খনি], তাদের স্ট্রিমগুলি যথাযথভাবে সংযুক্ত এবং মেশিনে চলমান অন্যান্য সমস্ত প্রক্রিয়াগুলির সাথে শিডিয়ুলার দ্বারা পরিচালিত। এটির একটি গুরুত্বপূর্ণ বিষয়, অন্যান্য পাইপ বাস্তবায়ন ব্যতীত ইউনিক্স পাইপ স্থাপন করা, বাফারিংয়ের ধারণা: উদাহরণস্বরূপ একটি প্রেরণ প্রোগ্রামটি প্রতি সেকেন্ডে 5000 বাইট তৈরি করতে পারে এবং একটি প্রাপ্তি প্রোগ্রাম কেবলমাত্র প্রতি সেকেন্ডে 100 বাইট গ্রহণ করতে সক্ষম হতে পারে, তবে না তথ্য হারিয়ে গেছে। পরিবর্তে, প্রেরণ প্রোগ্রামের আউটপুট বাফারে অনুষ্ঠিত হয়। যখন প্রাপ্তি প্রোগ্রামটি ডেটা পড়তে প্রস্তুত হয়, তারপরে পাইপলাইনে থাকা পরবর্তী প্রোগ্রামটি বাফার থেকে পড়ে। লিনাক্সে, বাফারের আকার 65536 বাইট (64 কেবি)। প্রয়োজনে বৃহত্তর বাফার সরবরাহ করতে bfr নামে একটি ওপেন সোর্স তৃতীয় পক্ষের ফিল্টার উপলব্ধ।
এটি আমাকে আরও বিভ্রান্ত করে, কারণ এটি ছোট প্রোগ্রামগুলির উদ্দেশ্যকে পুরোপুরি পরাভূত করে (যদিও তারা একটি নির্দিষ্ট স্কেল পর্যন্ত মডুলার হবে)।
আমার প্রথম প্রশ্নের সমাধান হিসাবে আমি কেবল চিন্তা করতে পারি (মেমরির সীমাবদ্ধতাগুলি আকারের ডেটার উপর নির্ভর করে সমস্যাযুক্ত হয়ে উঠবে) এটি হ'ল বড় ডেটা সেটগুলি কেবল তখনই গণনা করা হত না এবং আসল সমস্যা পাইপলাইনগুলি সমাধান করার জন্য বোঝানো হয়েছিল প্রোগ্রামগুলি তাদের দ্বারা প্রয়োজনীয় মেমরির পরিমাণ। তবে উইকিপিডিয়া উদ্ধৃতিতে গাed় পাঠ্য দেওয়া, এমনকি এটি আমাকে বিভ্রান্ত করে: যেমন একটি সময়ে একটি প্রোগ্রাম কার্যকর হয় না।
টেম্প ফাইলগুলি ব্যবহার করা হলে এগুলি সমস্ত কিছু বোঝার সুযোগ করে দেবে, তবে এটি আমার বোধগম্য যে পাইপগুলি ডিস্কে লেখেন না (যদি না অদলবদ ব্যবহার না করা হয়)।
উদাহরণ:
sed 'simplesubstitution' file | sort | uniq > file2
আমার কাছে এটি স্পষ্ট যে sed
ফাইলটি পড়ছে এবং লাইন ভিত্তিতে একটি লাইনে থুতু দিচ্ছে। তবে sort
, লিঙ্কযুক্ত ভিডিওতে বিকে যেমন বলা হয়েছে, সম্পূর্ণ স্টপ, সুতরাং সমস্ত ডেটা মেমোরিতে পড়তে হবে (বা এটি হয়?), তারপরে এটি দেওয়া হয়েছে uniq
, যা (আমার মনে) এটি হবে -লাইন-এ-এ-টাইম প্রোগ্রাম। তবে প্রথম এবং দ্বিতীয় পাইপের মধ্যে সমস্ত ডেটা মেমোরিতে থাকতে হবে, না?
unless swap is used
পর্যাপ্ত র্যাম না থাকলে সর্বদা অদলবদল ব্যবহৃত হয়