اشتراکها
نظرات مطالب
اهمیت Controller های ساده در ASP.NET MVC
iPODD سرنام Idiomatic Presentation, Orchestration, Domain and Data هست من لینک خاصی تو نت ازش ندیدم تو همون کتاب که معرفی کردم باهاش آشنا شدم...
کتاب رو اگه پیدا نکردی بگو برات میل کنم.
کتاب رو اگه پیدا نکردی بگو برات میل کنم.
مطالب دورهها
اعمال غیر همزمان و چند ریسمانی
تصور عموم بر آن است که اعمال غیر همزمان با چند ریسمانی به یک معنا هستند. این مورد الزاما صحیح نیست. برای مثال دریافت غیرهمزمان یک فایل را از اینترنت درنظر بگیرید. شاید اینطور به نظر برسد که در اینجا یک ترد جدید ایجاد شده و در آن کل کار دریافت فایل آغاز میگردد؛ اما خیر. ایجاد یک ترد جدید تنها در قسمتهای خاصی از یک پروسه انجام میشود. همچنین از لحاظ فنی امکان انجام کل کار در یک ترد، بدون بلاک کردن آن وجود دارد. از این جهت که بیشتر زمان، جهت صبر کردن دریافت پاسخی از سرور صرف میشود. زمانیکه کلاینت درخواستی را ارسال میکند، دیگر کار خاصی را نمیتواند انجام دهد تا اینکه پاسخی را دریافت کند.
زمانیکه از یک API غیرهمزمان برای مدیریت چنین عملیاتی استفاده میشود، ترد جاری را در این حالت در خواب فرو میبرد. برای اینکه کار بیشتری برای انجام وجود ندارد. همچنین با اینکه کلاینت درخواستی را ارسال میکند یا پاسخی را دریافت، برای مدیریت کل عملیات در اکثر اوقات نیازی به تردها ندارد. این سخت افزار شبکهی نصب شده در سیستم است که عمدهی کار را انجام میدهد و نه برنامه. زمانیکه برنامه درخواست ارسال اطلاعاتی را بر روی شبکه ارائه میدهد، درایور سخت افزار شبکه است که به سخت افزار مرتبط فرمان میدهد چه اطلاعاتی را باید ارسال کند. اکثر اینگونه سخت افزارها قادرند اطلاعات را خارج از حافظهی اصلی سیستم دریافت کنند. در اینجا درایور تنها باید به سخت افزار عنوان کند، چه اطلاعاتی را و به کجا باید ارسال کند. بنابراین CPU تنها در طی ارسال این فرمان است که مشغول میباشد و نه خارج از آن و این زمان اصلا در مقایسه با زمان ارسال اطلاعات توسط سخت افزار مرتبط، طولانی نیست. CPU مجددا زمانی درگیر خواهد شد که سخت افزار شبکه، اطلاعاتی را دریافت کرده است و باز هم این زمان در مقایسه با زمان دریافت اطلاعات توسط سخت افزار شبکه بسیار کوتاه است.
اغلب کارهای IO به همین شکل هستند. شبیه به همین روند در حالت دسترسی به سخت دیسک وجود دارد. مدت زمانیکه CPU به دیسک کنترلر اعلام میکند چه اطلاعاتی را نیاز دارد در مقایسه با مدت زمانیکه دیسک کنترلر این اطلاعات را واقعا بارگذاری میکند، بسیار ناچیز است.
نمونهی دیگر آن کار با بانکهای اطلاعاتی است. در اغلب اوقات برنامهی ما صرفا یک درخواست را به بانک اطلاعاتی ارائه میدهد و اصل عملیات در جایی دیگر و توسط موتور بانک اطلاعاتی، خارج از برنامه پردازش میگردد.
بنابراین جهت پردازش یک پروسهی خاص، در بسیاری از مراحل آن تنها یک ترد کافی است و هدف اصلی اعمال غیرهمزمان، کاهش تعداد تردهایی است که برنامه جهت پردازش عملیاتی خاص، نیاز دارد. این نوع الگوریتمها طوری طراحی شدهاند تا تردها تنها زمانی بکار گرفته شود که واقعا CPU قرار است کار خاصی را انجام دهد و نه برای مثال زمانیکه دیسک کنترلر یا سخت افزار شبکه مشغول به کار هستند (و ویندوز به صورت توکار دارای یک چنین API ایی هست). این مساله در سمت کلاینت، سبب خواهد شد تا ترد UI آزاد شود و بتواند به درخواستهای رسیده کاربر بهتر پاسخ دهد. همچنین این مساله در سمت سرور نیز بسیار مفید است، زیرا برنامه قادر خواهد شد تا به تعداد بیشتری از درخواستها به صورت همزمان پاسخ دهد. زیرا با کاهش تعداد تردهای درگیر، مقیاس پذیری سیستم افزایش مییابد.
زمانیکه از یک API غیرهمزمان برای مدیریت چنین عملیاتی استفاده میشود، ترد جاری را در این حالت در خواب فرو میبرد. برای اینکه کار بیشتری برای انجام وجود ندارد. همچنین با اینکه کلاینت درخواستی را ارسال میکند یا پاسخی را دریافت، برای مدیریت کل عملیات در اکثر اوقات نیازی به تردها ندارد. این سخت افزار شبکهی نصب شده در سیستم است که عمدهی کار را انجام میدهد و نه برنامه. زمانیکه برنامه درخواست ارسال اطلاعاتی را بر روی شبکه ارائه میدهد، درایور سخت افزار شبکه است که به سخت افزار مرتبط فرمان میدهد چه اطلاعاتی را باید ارسال کند. اکثر اینگونه سخت افزارها قادرند اطلاعات را خارج از حافظهی اصلی سیستم دریافت کنند. در اینجا درایور تنها باید به سخت افزار عنوان کند، چه اطلاعاتی را و به کجا باید ارسال کند. بنابراین CPU تنها در طی ارسال این فرمان است که مشغول میباشد و نه خارج از آن و این زمان اصلا در مقایسه با زمان ارسال اطلاعات توسط سخت افزار مرتبط، طولانی نیست. CPU مجددا زمانی درگیر خواهد شد که سخت افزار شبکه، اطلاعاتی را دریافت کرده است و باز هم این زمان در مقایسه با زمان دریافت اطلاعات توسط سخت افزار شبکه بسیار کوتاه است.
اغلب کارهای IO به همین شکل هستند. شبیه به همین روند در حالت دسترسی به سخت دیسک وجود دارد. مدت زمانیکه CPU به دیسک کنترلر اعلام میکند چه اطلاعاتی را نیاز دارد در مقایسه با مدت زمانیکه دیسک کنترلر این اطلاعات را واقعا بارگذاری میکند، بسیار ناچیز است.
نمونهی دیگر آن کار با بانکهای اطلاعاتی است. در اغلب اوقات برنامهی ما صرفا یک درخواست را به بانک اطلاعاتی ارائه میدهد و اصل عملیات در جایی دیگر و توسط موتور بانک اطلاعاتی، خارج از برنامه پردازش میگردد.
بنابراین جهت پردازش یک پروسهی خاص، در بسیاری از مراحل آن تنها یک ترد کافی است و هدف اصلی اعمال غیرهمزمان، کاهش تعداد تردهایی است که برنامه جهت پردازش عملیاتی خاص، نیاز دارد. این نوع الگوریتمها طوری طراحی شدهاند تا تردها تنها زمانی بکار گرفته شود که واقعا CPU قرار است کار خاصی را انجام دهد و نه برای مثال زمانیکه دیسک کنترلر یا سخت افزار شبکه مشغول به کار هستند (و ویندوز به صورت توکار دارای یک چنین API ایی هست). این مساله در سمت کلاینت، سبب خواهد شد تا ترد UI آزاد شود و بتواند به درخواستهای رسیده کاربر بهتر پاسخ دهد. همچنین این مساله در سمت سرور نیز بسیار مفید است، زیرا برنامه قادر خواهد شد تا به تعداد بیشتری از درخواستها به صورت همزمان پاسخ دهد. زیرا با کاهش تعداد تردهای درگیر، مقیاس پذیری سیستم افزایش مییابد.
نظرات اشتراکها
شش زبان برنامه نویسی برتر در حوزه پروژه های اینترنت اشیاء
مطالعه این نکته در نوشتن عنوان اشتراک فوق میتواند مفید باشد .
نظرات اشتراکها
evernote – مرتبسازی مبتنی بر برچسب
یک نکته: اگر لینک باز نشد، www اول را حذف کنید.
یک نکته: روش دیگر ساخت قالب، استفاده از برنامه Templify است.
نظرات مطالب
Closure در JavaScript
نکته بسیار خوب و کاربردی در جاوا اسکریپت بود. ممون
نظرات مطالب
Count یا Any
نکته ای که گفتین، زمانی که از dotTrace استفاده بکنید، به وضوح میبینید.
نظرات مطالب
معرفی WPF Extended toolkit
نکته جالبی بود، مخصوصا حجم توکلیتها
نظرات مطالب
متدی برای بررسی صحت کد ملی وارد شده
با سلام
اینم واسه شناسه ملی اشخاص حقوقی منیع
اینم واسه شناسه ملی اشخاص حقوقی منیع
public bool IsValidIranianLegalCode(string input) { //input has 11 digits that all of them are not equal if (!Regex.IsMatch(input, @"^(?!(\d)\1{10})\d{11}$")) return false; var check = Convert.ToInt32(input.Substring(10, 1)); int dec = Convert.ToInt32(input.Substring(9, 1)) + 2; int[] Coef = new int[10] { 29, 27, 23, 19, 17, 29, 27, 23, 19, 17 }; var sum = Enumerable.Range(0, 10) .Select(x => (Convert.ToInt32(input.Substring(x, 1)) + dec) * Coef[x]) .Sum() % 11; return sum == check; }