আমার একটি কাজ আছে যা স্টিডিনে ফাইলগুলির একটি তালিকা প্রক্রিয়া করে। প্রোগ্রামটির প্রারম্ভকালীন সময়টি যথেষ্ট এবং প্রতিটি ফাইলের যে পরিমাণ সময় লাগে তা ব্যাপকভাবে পরিবর্তিত হয়। আমি এই প্রক্রিয়াগুলির একটি উল্লেখযোগ্য সংখ্যার স্প্যান করতে চাই, তারপরে যাহা ব্যস্ত নয় সেগুলিতে কাজ প্রেরণ করুন। বেশ কয়েকটি বিভিন্ন কমান্ডলাইন সরঞ্জাম রয়েছে যা প্রায় আমি যা করতে চাই তা করি, আমি এটিকে প্রায় দুটি কার্যক্ষম বিকল্পে সংকুচিত করেছি:
find . -type f | split -n r/24 -u --filter="myjob"
find . -type f | parallel --pipe -u -l 1 myjob
সমস্যাটি এটি split
একটি খাঁটি রাউন্ড-রবিন করে, তাই প্রক্রিয়াগুলির মধ্যে একটি পিছনে ফিরে যায় এবং পুরো অপারেশনটির সমাপ্তিতে বিলম্ব করে; যখন parallel
প্রতি এন লাইন বা ইনপুট বাইটের জন্য একটি প্রক্রিয়া উত্সাহিত করতে চায় এবং আমি স্টার্টআপ ওভারহেডে খুব বেশি সময় ব্যয় করেছিলাম।
এর মতো কি এমন কিছু রয়েছে যা প্রসেস এবং ফিড লাইনগুলির যে কোনও প্রক্রিয়াতে স্টলিনগুলিকে অবরোধযুক্ত করে রাখতে পুনরায় ব্যবহার করবে?
myjob
আরও ইনপুট গ্রহণের জন্য প্রস্তুত। কোনও প্রোগ্রাম আরও ইনপুট প্রক্রিয়াজাতকরণের জন্য প্রস্তুত তা জানার কোনও উপায় নেই, আপনি কেবলমাত্র জানতে পারেন যে কোথাও কিছু বাফার (একটি পাইপ বাফার, একটি স্টিডিও বাফার) আরও ইনপুট গ্রহণের জন্য প্রস্তুত। আপনার প্রোগ্রামটি প্রস্তুত হয়ে গেলে কোনও প্রকারের অনুরোধ (যেমন একটি প্রম্পট প্রদর্শন করুন) প্রেরণের ব্যবস্থা করতে পারেন?
read
কলগুলিতে প্রতিক্রিয়া দেখায় তা কৌশলটি করবে। এটি মোটামুটি বড় প্রোগ্রামিং প্রচেষ্টা।
-l 1
করছেন parallel
? আইআইআরসি, যা প্রতি চাকরির জন্য এক লাইন ইনপুট প্রক্রিয়া করার সমান্তরাল বলে (যেমন মাইজবের কাঁটাচামচের জন্য একটি ফাইলের নাম, যাতে প্রচুর পরিমাণে ওভারহেড)।
split
আদেশটি কোথা থেকে এসেছে? নামটি স্ট্যান্ডার্ড পাঠ্য প্রক্রিয়াকরণ ইউটিলিটির সাথে বিরোধ করে ।