کپی کردن با ترد ها

mehdiar85

عضو جدید
سلام. میخوام برنامه ای بنویسم با سی شارپ که
یک فایل رو به 4 قسمت بشکنه و هر قسمتشو با 1 ترد به یک مقصد کپی کنه. و در نهایت 4 قسمت در مقصد merge بشن.ضمنا زمان اجرا رو هم بهم بده .که این 4 ترد چقدر طول کشیده تا عمل کپی رو انجام دادن. و اگر یک فایل رو در حالت معمولی کپی کنیم چقدر زمان میگیره
(اجرای موازی و سری)
خواهشا کمک کنید. که چگونه میشه نوشت.
 

iaidin

عضو جدید
سلام. میخوام برنامه ای بنویسم با سی شارپ که
یک فایل رو به 4 قسمت بشکنه و هر قسمتشو با 1 ترد به یک مقصد کپی کنه. و در نهایت 4 قسمت در مقصد merge بشن.ضمنا زمان اجرا رو هم بهم بده .که این 4 ترد چقدر طول کشیده تا عمل کپی رو انجام دادن. و اگر یک فایل رو در حالت معمولی کپی کنیم چقدر زمان میگیره
(اجرای موازی و سری)
خواهشا کمک کنید. که چگونه میشه نوشت.
یکی از کارهایی که میشه انجام داد استفاده از کامپوننت های زیپ هست. فایل را هنگام زیپ کردن به 4 قسمت split کنین و بعد از انجام اینکار با تردها کپی کنید. در مقصد نیز پس از اینکه چهار فایل کپی شدند با استفاده از همون کامپوننت فایل را اکسترکت کنید.
البته اگه منظورتون از فایل در جمله درخواستتون فایل متنی باشه میتونید به چهار فایل بسازید و متن فایل اصلی را به چهار بخش تقسیم بندی و در چهار فایل قرار بدید و بعد برای مرج کردن هم کار سختی ندارید
 

mehrta

عضو جدید
سلام. میخوام برنامه ای بنویسم با سی شارپ که
یک فایل رو به 4 قسمت بشکنه و هر قسمتشو با 1 ترد به یک مقصد کپی کنه. و در نهایت 4 قسمت در مقصد merge بشن.ضمنا زمان اجرا رو هم بهم بده .که این 4 ترد چقدر طول کشیده تا عمل کپی رو انجام دادن. و اگر یک فایل رو در حالت معمولی کپی کنیم چقدر زمان میگیره
(اجرای موازی و سری)
خواهشا کمک کنید. که چگونه میشه نوشت.

اگه با این هدف میخواهید این کار رو بکنید که سریعتر کپی رو انجام بدید، باید بگم که این کار نه تنها سرعت رو بیشتر نمیکنه بلکه کندتر هم میشه!
یک ترد جدید ایجاد کنید و کل فایل رو با اون ترد کپی کنید.
 

iaidin

عضو جدید
اگه با این هدف میخواهید این کار رو بکنید که سریعتر کپی رو انجام بدید، باید بگم که این کار نه تنها سرعت رو بیشتر نمیکنه بلکه کندتر هم میشه!
یک ترد جدید ایجاد کنید و کل فایل رو با اون ترد کپی کنید.
دوست عزیز لطفا دلیل این صحبتتون را بفرمایید.
 

negin17h

مدیر تالارهای مهندسی کامپیوتر و رباتیکمتخصص #C
مدیر تالار
دوست عزیز لطفا دلیل این صحبتتون را بفرمایید.

در خصوص فایل های سنگین شاید و به احتمال زیاد حق با دوستمون هست، چند تکه کردن فایل، ارسال و merge آنها زمان بر هست و این رو هم باید در نظر گرفت که اگر یک بخش دچار خطا بشه کل بسته از دست میره. این بحث رو البته (packet lost) در شبکه هم هست و یکسری راهکار داره که به هر حال دردسر سازه :gol:
 

iaidin

عضو جدید
در خصوص فایل های سنگین شاید و به احتمال زیاد حق با دوستمون هست، چند تکه کردن فایل، ارسال و merge آنها زمان بر هست و این رو هم باید در نظر گرفت که اگر یک بخش دچار خطا بشه کل بسته از دست میره. این بحث رو البته (packet lost) در شبکه هم هست و یکسری راهکار داره که به هر حال دردسر سازه :gol:
بله. پاسخ این تایپیک بسیار مرتبط با محیطی که قراره این کار انجام بشه مانند نوع پشتیانی سیستم عامل مورد نظر از ترد و لوکال یا شبکه بودن و ....و حجم فایل و ... هست و اگر به دنبال پاسخ دقیق باشیم باید پارامترهای ذکر شده مشخص گردند.
 
آخرین ویرایش:

mehrta

عضو جدید
دوست عزیز لطفا دلیل این صحبتتون را بفرمایید.

باید توجه داشت که چندنخی هیچ وقت باعث افزایش سرعت نمی شه، اصولا فلسفه چندنخی بخاطر این هست که کار ها هم زمان انجام بشه و نه اینکه سریعتر انجام بشه! حتما توجه دارید که وقتی چند نخ (thread) ایجاد میکنید، CPU باید دائما بین اون ها سویچ کنه، پس زمانی که CPU برای هر نخ میزاره، کمتر از حالتی میشه که فقط یک نخ داریم. ضمنا احتمالا باید از مکانیزم های همزمان سازی نیز استفاده کنید که این موضوع هم روی کارایی اثر منفی داره. در نهایت اینکه اگر فکر می کنید که مثلا برای انتقال یک فایل 100 مگابایتی با 4 نخ، زمان انتقال 1/4 حالت سریال میشه، باید عرض کنم که این تفکر اشتباهه (مگر توی شبکه، که میشه با چهار کانکشن جداگونه اونها رو ارسال کرد، اونجا قضیه فرق داره). دقت داشته باشید که چه یک نخ داشته باشید و چه 4 نخ، به هر حال باید 100 مگابایت اطلاعات از هارد خونده بشه و اون 100 مگابایت دوباره یه جای دیگه نوشته بشه، این ها زمان هایی هستند که هارد دیسک برای خوندن و نوشتن نیاز داره و ربطی به تعداد نخ ها نداره.
 

iaidin

عضو جدید
سلام. میخوام برنامه ای بنویسم با سی شارپ که
یک فایل رو به 4 قسمت بشکنه و هر قسمتشو با 1 ترد به یک مقصد کپی کنه. و در نهایت 4 قسمت در مقصد merge بشن.ضمنا زمان اجرا رو هم بهم بده .که این 4 ترد چقدر طول کشیده تا عمل کپی رو انجام دادن. و اگر یک فایل رو در حالت معمولی کپی کنیم چقدر زمان میگیره
(اجرای موازی و سری)
خواهشا کمک کنید. که چگونه میشه نوشت.

اگه با این هدف میخواهید این کار رو بکنید که سریعتر کپی رو انجام بدید، باید بگم که این کار نه تنها سرعت رو بیشتر نمیکنه بلکه کندتر هم میشه!
یک ترد جدید ایجاد کنید و کل فایل رو با اون ترد کپی کنید.

باید توجه داشت که چندنخی هیچ وقت باعث افزایش سرعت نمی شه، اصولا فلسفه چندنخی بخاطر این هست که کار ها هم زمان انجام بشه و نه اینکه سریعتر انجام بشه! حتما توجه دارید که وقتی چند نخ (thread) ایجاد میکنید، CPU باید دائما بین اون ها سویچ کنه، پس زمانی که CPU برای هر نخ میزاره، کمتر از حالتی میشه که فقط یک نخ داریم. ضمنا احتمالا باید از مکانیزم های همزمان سازی نیز استفاده کنید که این موضوع هم روی کارایی اثر منفی داره. در نهایت اینکه اگر فکر می کنید که مثلا برای انتقال یک فایل 100 مگابایتی با 4 نخ، زمان انتقال 1/4 حالت سریال میشه، باید عرض کنم که این تفکر اشتباهه (مگر توی شبکه، که میشه با چهار کانکشن جداگونه اونها رو ارسال کرد، اونجا قضیه فرق داره). دقت داشته باشید که چه یک نخ داشته باشید و چه 4 نخ، به هر حال باید 100 مگابایت اطلاعات از هارد خونده بشه و اون 100 مگابایت دوباره یه جای دیگه نوشته بشه، این ها زمان هایی هستند که هارد دیسک برای خوندن و نوشتن نیاز داره و ربطی به تعداد نخ ها نداره.


در خصوص فایل های سنگین شاید و به احتمال زیاد حق با دوستمون هست، چند تکه کردن فایل، ارسال و merge آنها زمان بر هست و این رو هم باید در نظر گرفت که اگر یک بخش دچار خطا بشه کل بسته از دست میره. این بحث رو البته (packet lost) در شبکه هم هست و یکسری راهکار داره که به هر حال دردسر سازه :gol:

بله. پاسخ این تایپیک بسیار مرتبط با محیطی که قراره این کار انجام بشه مانند نوع پشتیانی سیستم عامل مورد نظر از ترد و لوکال یا شبکه بودن و ....و حجم فایل و ... هست و اگر به دنبال پاسخ دقیق باشیم باید پارامترهای ذکر شده مشخص گردند.
ضمنا زمان اجرا رو هم بهم بده
زمان بر هست
چندنخی هیچ وقت باعث افزایش سرعت نمی شه،
سریعتر کپی
سرعت رو بیشتر نمیکنه بلکه کندتر هم میشه
دوست عزیز اینجا هیچ بحثی از سرعت نیست. از طرفی سرعت معنایی نداره. اگر هست لطفا معادل لاتین سرعت را ذکر کنید تا بررسی بشه.
همانطور که mehdiar85و negin17h ذکر کرده اند بحث در مورد زمان اجرا می باشد.
mehdiar85 ذکر کرده اند زمان را میخواهند بدست بیارند و این به معنای اجرای واقعی است و در پست #6 ذکر شد که برای زمان اجرای واقعی پارامترهای زیادی بایستی مشخص شوند و بعد از تعیین اون پارامترها زمان اجرای واقعی بدست بیاد.

ضمنا احتمالا باید از مکانیزم های همزمان سازی نیز استفاده کنید که این موضوع هم روی کارایی اثر منفی داره
....
 
آخرین ویرایش:

mehrta

عضو جدید
بله، شما درست می فرمایید. آقا/خانم mehdiar85 خواستند که زمان اجرا رو محاسبه کنند. من برداشتم این بود که میخوان بدونند که به کدوم روش (چند نخی یا تک نخی) سریعتر انجام میشه.
 

mehdiar85

عضو جدید
سلام .از همگی ممنونم .
درسته که عملیات کپی i/o bound هست نه cpu bound اما خواهشا بگید که چه جوری بنویسم . لطفآ ایده ای بدید برای نوشتن برنامش . هدف یک فایل بزرگ است که میخاد split بشه به 4 تا فایل. که 4 ترد همزمان فالو از مبدا به مقصد بنویسن. و در مقصد merge بشن .
زمان اجرای بررنامه رو میخام .که بهم بگه در حالتی که یک فالو به صورت سریال میخونیم و مینویسیم چقدر طول کشیده
همچنین در حالت موازی به کمک ترد ها
 

mehdiar85

عضو جدید
سلام. در مورد اینکه ایا واقا چنین کاری امکان داره یانه اگر مقاله ای دارید برام بفرستید
کپی کردن یک فایل بزرگ با ترد ها
 

Similar threads

بالا