চলমান কমান্ডগুলি কী শব্দবহুলভাবে তাদের ধীর করে তোলে?


37

আমি -vপ্রচুর অ্যাপ্লিকেশন কম এবং কম (বিশেষত তুচ্ছ জিনিসগুলির মতো tarএবং এর জন্য cp) এর জন্য পতাকাটি ব্যবহার করে দেখেছি । যাইহোক, যখন আমি করেছি এবং আমি যখন বলি যে একটি বৃহত ফাইল আনজিপিং করা হচ্ছে তখন আমি -vপতাকাটি ব্যবহার করি নি তার চেয়ে বেশি সময় লাগবে ।

আমি ধরে নিলাম এটি কারণ টার্মিনালটিতে পাঠ্যটি প্রসেস করতে হবে এবং আমি যা কিছু বাফার করব তা পূরণ করছি। তবে আমার প্রশ্ন হ'ল এটি কি অ্যাপ্লিকেশনটি আসলে ধীর করে দেয় বা একই সময়ে এটি সম্পূর্ণ হয় এবং আমি যা দেখছি তা টার্মিনাল ধরার চেষ্টা করছে?


আপনি সময় চেষ্টা করেছেন যেমন tar xvf file.tar > /dev/nullবনাম tar xf file.tar? পুনঃনির্দেশিত হচ্ছে /dev/nullএই আপনার টার্মিনাল খুঁজে নিতে হবে।
বেনিয়ামিন বান্নিয়ার

3
এছাড়াও, মনে রাখবেন stdoutএবং stderrহয় লাইন বাফার - যার অর্থ বাফার পূরণ যে দীর্ঘ লাগবে না - এটা অবরোধ printfকল (এবং এক্সটেনশান টার্মিনাল আউটপুট দ্বারা) চিরতরে লাগে যে।
new123456

1
আপনি যদি উইন্ডোজ কমান্ড সম্পর্কে কথা বলতেন, আমি অবশ্যই বলব যে এটি সত্য: :)
কোকবিরা

সিপিইউ নিবিড় কাজটির জন্য, আপনি কতটা আইও করছেন তার উপর নির্ভর করে আপনি ভয়াবহ কর্মক্ষমতা হ্রাস পেতে পারেন।
ব্যবহারকারী

উত্তর:


31

হ্যাঁ, ভার্বোজ চালানো আপনার অ্যাপ্লিকেশনগুলিকে ধীর করবে।

আবেদনের উপর কতটা নির্ভর করে।

টার্মিনালে প্রতিটি মুদ্রণের অতিরিক্ত প্রক্রিয়াকরণের সময় প্রয়োজন। প্রিন্টফ () বা এর যে কোনও বোনের ব্যবহারের ক্ষেত্রে এটি বেশ ভারী পরিমাণে প্রক্রিয়াকরণ নষ্ট হয়।

এছাড়াও, টার্মিনালটি সেই ডেটা নিয়ে কাজ করতে হয়। অ্যাপ্লিকেশন এবং টার্মিনালের মধ্যে সীমিত পরিমাণে বাফার স্পেস রয়েছে এবং আইও চ্যানেলটি তথ্যের আউটপুট দেওয়ার জন্য যেখানে বলা হয়েছে বাফারটিতে পর্যাপ্ত জায়গা না পাওয়া অবধি অবরুদ্ধ হবে। এই ব্লকিংয়ের সময় অ্যাপ্লিকেশনটি চালিয়ে যেতে সক্ষম হবে না। 1

এছাড়াও, টার্মিনালে ডিবাগিং পাঠ্য প্রদর্শন করার কাজটি প্রক্রিয়াকরণ চক্র গ্রহণ করবে। আবার এটি অ্যাপ্লিকেশন (ডিবাগিংয়ের পরিমাণ), টার্মিনাল প্রোগ্রাম (ব্যবহৃত ফন্ট, প্রভাব, ইত্যাদি) এবং এমনকি এক্স উইন্ডোজ ড্রাইভার ব্যবহারের (হার্ডওয়ার ত্বরণ ইত্যাদি) উভয়ের উপর নির্ভরশীল।

timeপ্রোগ্রাম মোটামুটি নির্ভুলভাবে নির্ধারণ করতে কতদিন কমান্ড চালানোর জন্য গ্রহণ করেছে ব্যবহার করা যাবে। সময়ের সাথে একই প্রোগ্রাম দুবার চালানো, একবার ডিবাগিংয়ের সাথে এবং একবার ছাড়া, আপনাকে প্রদর্শন করবে যে এটি কতটা তফাত্ করে। কমান্ডের উভয় পরীক্ষার রানের জন্য ক্যাশিং একরকম হয় তা নিশ্চিত করার জন্য আমি পরীক্ষাগুলি সম্পাদনের আগে একবার কমান্ড চালানোর পরামর্শ দেব। দ্বিতীয় রানটি খুব দ্রুত এগিয়ে যাওয়ার ফলে আপনি ফলাফলগুলি আঁকতে চান না কারণ বেশিরভাগ ডেটা প্রথম রান দ্বারা ক্যাশে হয়েছিল এখন আপনি কী করছেন ...


1 বহুবিবাহিত অ্যাপ্লিকেশনের ক্ষেত্রে কেবল ডিবাগিং আউটপুট সম্পাদনকারী থ্রেডটি আসলে অবরুদ্ধ হবে।


বেশিরভাগ প্রোগ্রামাররা এটি খুব দ্রুত শিখেছে (ডস-এ বোরল্যান্ড সি);)
ড্রাগাগস

অবশ্যই যদি কনসোল উইন্ডোটি লুকানো থাকে (বা এমনকি আংশিকভাবে আবৃত) তবে কনসোলটি দৃশ্যমান হওয়ার পরে এটি প্রায় ততটা প্রভাব ফেলবে না। একটি কমান্ড-প্রম্পট খুলুন এবং একটি dir c:\/s/a। আপনি সম্পূর্ণরূপে দৃশ্যমান এবং আংশিকভাবে আচ্ছাদিত হয়ে গেলে গতি পরিবর্তন দেখতে পাবেন। তুমি পারবে না দেখতে এটা গতি বাড়াতে যখন মিনিমাইজ, কিন্তু এটা, স্পষ্টভাবে আরো দ্রুত আপনি ক্যাশে যা যেহেতু এটি হতো না এটি দ্রুত যাহাই হউক না কেন হতে, কারণ হবে বাইপাস যদি আপনি পরীক্ষা করতে চেয়েছিলেন রিবুট করতে চাই যদিও, যাতে ডিস্ক অ্যাক্সেস করতে।
সিনিটেক

1
@ সাইন আমরা এখানে লিনাক্সের কথা বলছি।
মাজেঙ্কো

1
@ ম্যাট এটি এখনও একটি কার্যকর মন্তব্য। সম্মান করুন।
nhinkle

@ ম্যাট, দোহ! আমি খেয়াল করিনি। (সম্ভবত আমি ডসের মন্তব্য থেকে বিভ্রান্ত হয়ে পড়েছি।) যাইহোক, লিনাক্সটি একেবারেই আলাদা, তবে আমি অবাক হয়েছি যে এটির জন্য এটি ঠিক আছে কিনা (প্রচুর পাঠ্য স্ক্রোলিং ধীর গতিতে দৃশ্যমান কনসোলগুলি)।
সিনিটেক

8

আপনি যে অ্যাপ্লিকেশনটি চালাচ্ছেন এটি নির্ভর করে। তবে, সাধারণভাবে, আমরা বলতে পারি যে ভার্বোজগুলি বেশিরভাগ সাধারণ লিনাক্স অ্যাপ্লিকেশনকে ধীর করে দেয় কারণ তাদের স্টাডআউট এবং আই / ও বা প্রসেসরের সীমানার মধ্যে তাদের ক্রিয়াকলাপটি সিঙ্ক্রোনাইজ করতে হবে।


6

yesওএস এক্স 10.7-তে একটি পরীক্ষার কেস হিসাবে ব্যবহার করে মনে হচ্ছে আপনি যদি টার্মিনালে প্রচুর আউটপুট প্রিন্ট করেন তবে এটি অবশ্যই গুরুত্বপূর্ণ matters

এটি আরও কিছুটা পরিমিত করে আমি yes5 সেকেন্ডের জন্য দৌড়েছি , এক ক্ষেত্রে আউটপুটটি টার্মিনালে মুদ্রণ করে একটি ফাইলে (সহ tee) সংরক্ষণ করে , অন্য ক্ষেত্রে পুনর্নির্দেশ না করে একই কাজ stdoutকরা /dev/null:

  1. yes | tee yeslog_term & sleep 5 && killall yes && wc -l yeslog_term
  2. yes | tee yeslog_noterm > /dev/null & sleep 5 && killall yes && wc -l yeslog_noterm

কেস 1. 2371584 লাইন দেয় এবং কেস 2 দেয় 136421376 লাইন, বা 57 গুণ বেশি। এর 'পারফরম্যান্স' yes(যেমন এটি প্রতি ইউনিট প্রিন্ট করে এমন রেখার পরিমাণ দ্বারা পরিমাপ করা হয়) এই ক্ষেত্রে 57 গুণ বেশি ধীর হয়

এক দিকে নোট এখানে যে আমি ব্যবহার করে তা হল yesসাথে tee, এখানে, সামান্য ফলাফলকে প্রভাবিত হতে পারে তবে আমি ফলাফল নিয়ে এখনও বৈধ মনে করি না।

প্রোগ্রামটি ধীর হয়ে যাওয়ার অন্য একটি ইঙ্গিতটি হ'ল yesটার্মিনালে আউটপুট দেওয়ার সময় চলমান , টার্মিনালটি প্রায় 100% সিপিইউ ব্যবহার করে এবং yesকেবলমাত্র প্রায় 37%, যখন yesটার্মিনালে আউটপুট ছাড়াই চলতে থাকে এটি সম্পূর্ণ 100% ব্যবহার করে (এটি বহুগুণে রয়েছে) কোর মেশিন, সুতরাং yesএটি সক্ষম হলে আরও সিপিইউ ব্যবহার করতে পারে, এটি টার্মিনাল দ্বারা ধীর করা ছাড়া)।


5

কেবলমাত্র হ্যাঁ উত্তর দেওয়া সহজ, এটি অ্যাপ্লিকেশনটি কমিয়ে দেবে। তবে আরও সত্যিকারের উত্তর হ'ল এটি 99% ক্ষেত্রে বিবেচ্য নয়।

যদি আপনার অ্যাপ্লিকেশনটি এমন কোনও কাজ করে যা আসলে কিছুটা সিপিইউ শক্তি গ্রহণ করে তবে স্ক্রিনে কিছু অতিরিক্ত লাইন প্রিন্ট করার সম্ভাবনাটি কোনও ধরণের পার্থক্য তৈরি করে 0% এর কাছাকাছি।

আসলে, আপনি সহজেই নিজের সিদ্ধান্তটি নিতে পারেন: অ্যাপ্লিকেশনটি যদি পাঠ্যের একটি বিশাল প্রাচীর তৈরি করে চলেছে, তবে এটি আপনাকে সামান্য ব্যয় করতে পারে। হতে পারে.


3
-1 এটি ঠিক সত্য নয়। printf()অত্যন্ত ব্যয়বহুল
টমাস বনিনি

1
আমি যা বলেছিলাম তা সত্য ছিল। আমি যা বলেছিলাম এমনভাবে দেখতে আপনি যা চেষ্টা করছেন তা সম্পূর্ণ অন্যরকম। আমি কোনও নির্দিষ্ট স্টাডলিব মুদ্রণের দক্ষতা সম্পর্কে কিছুই বলছি না। আমি বলছি প্রোগ্রামগুলিতে পর্যাপ্ত কাজ করা উচিত যা মুদ্রণের জন্য ব্যয় করা সময় নগণ্য। এখন অন্য কাউকে ট্রল করুন।
স্পোর্টস পার্ক

@ স্লার্পসপার্ক: এটি অগত্যা নগণ্য নয়, এমনকি যদি আমরা সমীকরণের বাইরে প্রিন্টফ () নিই, তবুও টার্মিনাল এমুলেটরটি বাইটের প্রবাহে যেতে হবে, তারপরে টার্মিনাল এমুলেটরটিকে পাঠ্যটি স্ক্রিনে রেন্ডার করতে হবে পালানোর অক্ষরগুলি বিশ্লেষণ করার পরে, এবং কিছু পাঠ্য কমান্ড যে হারে করতে পারে তার হারে পাঠ্য-উপস্থাপনা সস্তা নয়; এবং এটি বিশেষত ব্যয়বহুল হবে যদি প্রোগ্রামটি প্রতিটি লাইনে আউটপুট বাফারটিকে ফ্লাশ করে যার অর্থ কনটেক্সট স্যুইচ হয়। পাইথন স্ক্রিপ্টগুলি লেখার সময় আমি প্রায়শই অভিজ্ঞতা করি যে টাইট লুপে প্রিন্টগুলি সরিয়ে ফেলা কখনও কখনও 10 থেকে 1 এস এনে দেয়।
মিথ্যা রায়ান

এসএসএইচ দিয়ে চলমান একটি কমান্ড সম্পর্কে কী বলা যায়, তারপরেও যদি সিপিইউ সময় ন্যূনতম হয় তবে আপনি একবার নেটওয়ার্ক ল্যাটেন্সিটি চালু করেন তা অবশ্যই তাৎপর্যপূর্ণ?
ec2011

3

একটি ভার্বোজ কোডটি সাধারণত যদি একটি নির্দেশের সাথে মূল্যায়ন করা হয় এবং প্রতিবার এটি কোনও ডিসপ্লে ফাংশনটিতে নিয়ন্ত্রণ দেয় যত বেশি সময় নেয়, প্রসঙ্গটি পরিবর্তন হতে পারে, আরও বিঘ্ন ঘটতে পারে।

তবে এটি নির্ভর করে, যদি আপনি ভার্বোজ কোডটি একটি পৃথক থ্রেড যা কেবল সময়ে সময়ে পার্থক্য অবহেলাযোগ্য is

এই প্রশ্নটি স্ট্যাকওভারফ্লোর অভিজ্ঞ প্রোগ্রামারদের অবদান থেকে অনেক উপকার করতে পারে। আমি চলন্ত পরামর্শ দিচ্ছি :)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.