آشنایی با Task (ادامه)
آشنایی با Task (ادامه)
امسال هم مثل سال گذشته برای تبریک سال نو، یک پازل علوم کامپیوتری طراحی کردم. پازل به این صورته که به شما یکسری سرنخ داده میشه و شما باید با استفاده از اونها، پیام مخفی شده رو پیدا کنید.
آشنایی با Task
دلایل استفاده ناهمگامی (Asynchrony)
برنامه نویسی Asynchronous به شما اجازه میدهد تا بتوانید اعمال مختلف را به صورت همزمان در برنامهی خود پیش ببرید. به عبارت دیگر، این قابلیت از Block شدن برنامه شما، در شرایطی که برنامه در حال انجام کاری طولانی مدت است، جلوگیری میکند و باعث میشود برنامه Responsive باقی بماند. از دیگر فواید برنامه Asynchronous، میتوان به استفاده از حداکثر توان سیستم اشاره کرد. امروزه اکثر پردازندهها، چندین هستهی پردازشی دارند که یک برنامهی غیر موازی نهایتا از یک هستهی پردازنده استفاده میکند اما با نوشتن یک برنامهی Asynchronous و ایجاد یک الگوی موازی سازی، محاسبات شما به صورت موازی روی هستههای مختلف CPU اجرا میشود.
سیشارپ یا بهتره بگم دات نت، قابلیتها و روشهای مختلفی را برای این کار فراهم کردهاست. یکی از قابلیتهایی که در سیشارپ 5 اضافه شده است، کلمات کلیدی async و await است. شما میتوانید تنها با استفاده از این 2 کلمه کلیدی، برنامه Asynchronous بنویسید! در پستهای بعدی آموزش مختصر و کوتاهی درباره این قابلیت جدید ارائه خواهم داد.
در این پست چند اصطلاح رایج در زبان انگلیسی به صورت طنز معرفی شدهاند.
(برگرفته از voxy.com)
1. Piece of cake – No, when someone says that the assignment they just finished was a piece of cake, it does not mean that their professor gave them a red velvet cupcake for their midterm paper, what piece of cake actually means is that something is very easy to complete.
2. Costs an arm and a leg – It would be a strange world we lived in if buying that fancy shiny purse literally required us to chop off our body parts to give as tribute. When something costs an arm and a leg it actually means that something is very expensive.
3. Break a leg – Oh, look, another idiom about legs. You’re about to take your dreaded calculus final and before you head into your classroom your roommate texts you, “Break a Leg!” Why, you think in your head, would he ever wish that upon me? I thought we were cool with each other. Well, your roommate surely doesn't want your bones to break while walking to your seat in the exam room that’s for sure. Break a leg actually means good luck!
4. Hit the books – If you’re a student in an English speaking environment you’re probably going to be hearing this phrase a lot. Before you imagine students running into their campus library and punching, kicking and wrestling apart the complete works of Shakespeare, we would just like to say that hit the books actually means to study. There there, you can still punch books in your spare time if you want, we won’t judge you.
5. Let the cat out of the bag – Why would someone put their cat in a bag? What did the cat ever do to them? Our last idiom actually means to disclose a secret that was supposed to be kept, well, as a secret. The next time someone lets the cat out of the bag do not immediately pick up your phone and call animal cruelty control.
6. Hit the nail on the head – This idiom has to do with doing or saying something that is precisely right. If you don’t understand this, just think about that sweet feeling you get when you swing a hammer at a nail and hit it perfectly.
7. When pigs fly – So, have you ever seen a pig fly before? Never? Me neither. This idiom basically means that something will never happen.
8. Bite off more than you can chew – Imagine your waiter brings you the biggest juiciest hamburger from your favorite American restaurant. In your hunger, you grab it quickly and take a giant bite out of it. Unfortunately, the bite you've taken is too big, and you end up looking like an idiot trying to shove this bite down your throat while drinking water and trying not to choke. That is the most literal sense of the meaning, but in general it just means to attempt to take on a task that is too much for you to handle.
چند وقت پیش برای پروژهی یکی از درسها باید یک مقاله رو پیادهسازی میکردیم (گروه بودیم). این مقاله روی پیکسلهای تصویر پردازش انجام میداد و چون تعداد تصاویر ورودی زیاد بودن، حجم محاسبات زیاد بود.
اولین پیادهسازی ما با متلب بود که زمان اجرایی برابر با 24 ساعت داشت. از اونجایی که متلب به صورت ذاتی کمی کند هست، سراغ سیشارپ رفتیم. پس از اینکه با سیشارپ پیاده سازی انجام شد، مدت زمان اجرا به 8 ساعت رسید که به نظر خیلی خوب بود. کمی بعد یکی از دوستانم که کاملا به دستورات سیشارپ (حتی از نظر کارایی) مسلطه، کد رو بازبینی کرد و دو تغییر زیر را ایجاد کرد:
1. در یک قسمت از برنامه به جای
Math.Pow(x,2)
عبارت x * x را قرار داد.
2. در قسمت دیگری از برنامه، محاسبات با اعداد صحیح کافی بود ولی من از double استفاده کرده بودم، پس بجای آنها از int استفاده کرد.
پس از اجرای برنامه با تغییرات بالا، مدت زمان اجرا به 3 ساعت کاهش یافت. دلیل این اتفاق برای هریک از موارد بالا این است که:
1. تابع Pow در سیشارپ به دلیل اینکه قابلیت توان رساندن اعداد اعشاری را نیز داشته باشد، از روش ضربی استفاده نمیکند و بجای آن از روابط دیگری که محاسبات بیشتری لازم دارند استفاده میکند. حتی برای توان 2 (البته من فکر میکردم این تابع اونقدری هوشمنده که توانهای صحیح و یا کوچیکو بدونه باید چیکار کنه).
2. محاسبات اعشاری کلا زمان بیشتری نسبت به محاسبات صحیح مصرف میکنند.
از این به بعد همیشه به یاد خواهم داشت که تا جای ممکن از محاسبات صحیح استفاده کنم و کارهای سادهی ریاضیو مستقیم کد بزنم و از توابع استفاده نکنم.