আমি নামী পাইপগুলি কীভাবে কাজ করে তা বোঝার চেষ্টা করছি যাতে আমি আমার ওয়ান-ওয়ে আন্তঃসম্পর্ক যোগাযোগকে আরও সহজ করে তুলতে পারি। আমি একটি বৃত্তাকার বাফারে ডেটা অনুলিপি করার কারণে কিছু ওভারহেড আশা করি, যা আমি ভেবেছিলাম যে এটি র্যামে সঞ্চিত আছে, এবং তাই আমি পাইপটি কোনও ফাইলটিতে লেখার চেয়ে অনেক দ্রুত হবে বলে আশা করি (কারণ র্যাম ডিস্কের চেয়ে প্রস্থের দ্রুততর আদেশ) orders
পরিবর্তে, আমি দেখতে পেয়েছি যে নামক পাইপ (বা বেনামে পাইপ) একটি ফাইলের মতোই গতি। এটি 3 গিগাহার্টজ ডেস্কটপে একটি সাধারণ ডিস্ক ড্রাইভ (শক্ত রাষ্ট্র নয়), উবুন্টু লিনাক্স চালিত। পাইথনে এখানে সরলিকৃত পরীক্ষা প্রোগ্রাম রয়েছে:
import sys
import time
import random
megabyte = "".join(random.choice("abcdefghijklmnopqrstuvwxyz") for x in range(1024**2))
while True:
before = time.time()
sys.stdout.write(megabyte)
after = time.time()
sys.stderr.write("{} microseconds\n".format(1e6 * (after - before)))
সরাসরি পাইপ করা /dev/null
:
python test.py > /dev/null
প্রতি মেগাবাইটের জন্য 2.1 মাইক্রোসেকেন্ড (ধ্রুবক) উত্পাদন হয়।
একটি ফাইল পাইপিং:
python test.py > /tmp/testout.txt
500 মাইক্রোসেকেন্ড এবং 930 মাইক্রোসেকেন্ডের মধ্যে ঝাঁপ দেয় (ফাইলটি বড় হওয়ার সাথে সাথে বৃহত্তর মানটি আরও সাধারণ হয়ে যায় --- সম্ভবতঃ এটি ডিস্কের জায়গার সন্ধান করছে)।
তারপরে নাম করা পাইপ:
mkfifo testpipe
cat testpipe > /dev/null &
python test.py > testpipe
640 মাইক্রোসেকেন্ড (ধ্রুবক) এবং একটি নামবিহীন পাইপ দেয়:
python test.py | cat > /dev/null
এছাড়াও 650 মাইক্রোসেকেন্ড (ধ্রুবক) উত্পাদন হয়।
পাইপের গতি ফাইলের গতির চেয়ে কেন বেশি তার কারণ ব্যাখ্যা করতে পারবেন /dev/null
? আমার কোথাও একটি স্যুইচ থাকতে পারে যাতে বলা হয়েছে, "র্যাম-ভিত্তিক বাফারের পরিবর্তে ফাইল-ভিত্তিক বাফারের মাধ্যমে পাইপ চালান," এবং আমি কি সেই সুইচটি পরিবর্তন করতে পারি? এটি কার্নেল বিকল্প বা শেল পরিবর্তনশীল হতে পারে?
অন্য ব্যাখ্যা: ধরুন যে ডিস্ক আউটপুট 500 এবং 930 মাইক্রোসেকেন্ডের মধ্যে লাফ দেয় কারণ 500 কেবল পাইপিং করছে এবং 930 আসলে লেখা হচ্ছে। তারপরে উভয় ক্ষেত্রে পাইপিংয়ের জন্য 500 ~ 640 সমতুল্য। তবে, সেই ব্যাখ্যার অধীনে পাইপিং এবং ডিস্কে আসলে লেখার মধ্যে কেন কেবল দুটি ফ্যাক্টর রয়েছে? র্যাম ডিস্ক সম্পর্কে কথা বলার ওয়েবসাইটগুলি বলে যে র্যাম ডিস্কগুলি হার্ড ডিস্কের চেয়ে 50-200 গুণ বেশি দ্রুত।
/dev/null
আসলে বেশ সস্তা হয়, অন্য যে কোনো স্থানে লেখার সময় - অনেক বেশি ব্যয়বহুল যেমন প্রচেষ্টা হ্যান্ডলিং এর "অনেক" দরকার - এটা একটি ফাইল, একটি হিসাবে FIFO, একটি নল বা যাই হোক না কেন হও।