Forwarded from DotNetZoom (محمد جواد ابراهیمی)
🔶 دنیای «بازی» که به روی ما ایرانیا «بسته» شد !
خب همونطور که قبلا هشدار داده بودیم. بلاخره گیتهاب حرفشو عملی کرد و تحریم اکانت هایی ایرانی رو عملی کرد.
اگه فقط ریپو های عمومی (public) داشتید که جای نگرانی نیست و بعید هم میدونم در آینده حتی مشکلی براشون پیش بیاد. اما اگه ریپو های خصوصی (private) داشتین متاسفانه دیگه بسته شده و در دسترس نیست.
همچنین صفحات github Pages هم بسته شده بود حتی برای پروژه های عمومی که این تصمیم گیتهاب واقعا غیر منطقی بود
خوشبختانه امروز گیتهاب دسترسی صفحات github Pages رو باز کرد و امکان تبدیل ریپو های خصوصی به عمومی رو فراهم کرد و در نتیجه میتونین سورس کد هاتون رو نجات بدین.
🔷 و اما حالا باید چیکار کنیم؟
در کل اینکه نگران نباشید به لطف ورژن کنترل Git تمام تاریخچه Commit ها و Branch ها و ... رو میشه زنده کرد (به غیر از Issue ها و تاریخچه Pull Request ها و Watch ها و... یه سری چیزا که اختصاصا مال گیتهابه ، نه گیت)
0️⃣ راه حل های بی فایده :
بدیهیه که استفاده از قند شکن و اینا تاثیری نداره پس اینقدر نپرسین. ضمنا برای اینکه اکانتتون رفع تحریم بشه، به پاسپورت غیر ایرانی نیاز دارین و راه تقلبی هم وجود نداره، پس هیچی.
1️⃣ مهاجرت نکنیم :
گیتهاب غیر از اینکه بزرگترین جامعه برنامه نویسای دنیاست، نشون دهنده هویت و سابقه یه برنامه نویس هم هست پس قاعدتا نمیشه و نباید دروشو خط کشید
بنابراین اگه صرفا از ریپو های پابلیک استفاده میکنین مشکلی نیست و نیاز به مهاجرت ندارین.
فقط کافیه ضربدر اون پیغام زرد رنگ رو مخی رو بزنین تا بره 😕
2️⃣ مهاجرت به GitLab :
گیت لب که خیلی وقت پیش ایرانی ها رو تحریم کرد ولی بازم بازم صد رحمت بهش که به Block کردن IP ها بسنده کرد 😒
با فرض داشتن قند شکن یکی از گزینه ها انتقال به گیت لب هست ولی احتمالش هست که در آینده ای نه چندان دور این مشکلات رو پیدا کنه.
اطلاعات بیشتر :
http://bit.ly/2K8CdLn
3️⃣ مهاجرت به Azure DevOps :
سرویس Azure DevOps ماکروسافت استثناعا تا الان هیچ تحریمی نگذاشته و محدودیت ریپو های خصوصیش تا 5 نفره که به نسبت بقیه گزینه بهتریه
ولی بازم احتمالش هست که در آینده ای نه چندان دور این مشکلات رو پیدا کنه
4️⃣ گیت سرویس شخصی :
سایت گیت لب یه نسخه Community Edition (یا همون CE) داره که رایگان و قابل دانلوده و این امکان رو به شما میده که سایت گیت لب رو (با یه سری امکانات محدود) روی سرور خودتون نصب کنین.
خیلی هم سادس فقط به یه سرور لینوکسی نیاز داره (البته با داکر روی ویندوز هم میاد)
به غیر از گیت لب CE، پروژه های دیگه ای مانند Gitea و Gogs هم هستند
درکل این روش، کم ریسک ترین گزینه برای ریپو های خصوصی هست
________________
@IranAspMvc
خب همونطور که قبلا هشدار داده بودیم. بلاخره گیتهاب حرفشو عملی کرد و تحریم اکانت هایی ایرانی رو عملی کرد.
اگه فقط ریپو های عمومی (public) داشتید که جای نگرانی نیست و بعید هم میدونم در آینده حتی مشکلی براشون پیش بیاد. اما اگه ریپو های خصوصی (private) داشتین متاسفانه دیگه بسته شده و در دسترس نیست.
همچنین صفحات github Pages هم بسته شده بود حتی برای پروژه های عمومی که این تصمیم گیتهاب واقعا غیر منطقی بود
خوشبختانه امروز گیتهاب دسترسی صفحات github Pages رو باز کرد و امکان تبدیل ریپو های خصوصی به عمومی رو فراهم کرد و در نتیجه میتونین سورس کد هاتون رو نجات بدین.
🔷 و اما حالا باید چیکار کنیم؟
در کل اینکه نگران نباشید به لطف ورژن کنترل Git تمام تاریخچه Commit ها و Branch ها و ... رو میشه زنده کرد (به غیر از Issue ها و تاریخچه Pull Request ها و Watch ها و... یه سری چیزا که اختصاصا مال گیتهابه ، نه گیت)
0️⃣ راه حل های بی فایده :
بدیهیه که استفاده از قند شکن و اینا تاثیری نداره پس اینقدر نپرسین. ضمنا برای اینکه اکانتتون رفع تحریم بشه، به پاسپورت غیر ایرانی نیاز دارین و راه تقلبی هم وجود نداره، پس هیچی.
1️⃣ مهاجرت نکنیم :
گیتهاب غیر از اینکه بزرگترین جامعه برنامه نویسای دنیاست، نشون دهنده هویت و سابقه یه برنامه نویس هم هست پس قاعدتا نمیشه و نباید دروشو خط کشید
بنابراین اگه صرفا از ریپو های پابلیک استفاده میکنین مشکلی نیست و نیاز به مهاجرت ندارین.
فقط کافیه ضربدر اون پیغام زرد رنگ رو مخی رو بزنین تا بره 😕
2️⃣ مهاجرت به GitLab :
گیت لب که خیلی وقت پیش ایرانی ها رو تحریم کرد ولی بازم بازم صد رحمت بهش که به Block کردن IP ها بسنده کرد 😒
با فرض داشتن قند شکن یکی از گزینه ها انتقال به گیت لب هست ولی احتمالش هست که در آینده ای نه چندان دور این مشکلات رو پیدا کنه.
اطلاعات بیشتر :
http://bit.ly/2K8CdLn
3️⃣ مهاجرت به Azure DevOps :
سرویس Azure DevOps ماکروسافت استثناعا تا الان هیچ تحریمی نگذاشته و محدودیت ریپو های خصوصیش تا 5 نفره که به نسبت بقیه گزینه بهتریه
ولی بازم احتمالش هست که در آینده ای نه چندان دور این مشکلات رو پیدا کنه
4️⃣ گیت سرویس شخصی :
سایت گیت لب یه نسخه Community Edition (یا همون CE) داره که رایگان و قابل دانلوده و این امکان رو به شما میده که سایت گیت لب رو (با یه سری امکانات محدود) روی سرور خودتون نصب کنین.
خیلی هم سادس فقط به یه سرور لینوکسی نیاز داره (البته با داکر روی ویندوز هم میاد)
به غیر از گیت لب CE، پروژه های دیگه ای مانند Gitea و Gogs هم هستند
درکل این روش، کم ریسک ترین گزینه برای ریپو های خصوصی هست
________________
@IranAspMvc
Telegram
Attach Files
آشنایی با Data Race
حالت Data Race زمانی روی میدهد که در یک Proccess دو یا چند Thread به محل مشترکی از حافظه همزمان دسترسی داشته باشند. مشکل زمانی پیش می آید که حداقل یکی از Thread مقدار ذخیره شده در حافظه را تغییر دهد در حالی که Thread دیگر در حال خواندن آن است.
در سی شارپ یکی از ساده ترین روش ها برای حل مشکل Data Race استفاده از lock است.کلمه ی کلیدی lock باعث میشود در یک لحظه ی واحد فقط یک Thread قادر به تغییر حافظه باشد.البته این روش بهینه نیست چون برنامه دیگر به صورت موازی اجرا نمیشود و Thread ها به نوبت می توانند با حافظه کار کنند. همچنین مشکلات دیگری از جمله dead-lock را به همراه دارد.
مشکل Race Condtion در نتیجه ی Data Race بوجود می آید و عامل تخریب داده های درون حافظه و عمکرد عجیب برنامه میشود. تا جایی که برنامه از کار می افتد.
خطای Race Conditon در سیستم آلارم باعث خاموشی سراسری آمریکای شمالی در سال 2003 شده است.
حالت Data Race زمانی روی میدهد که در یک Proccess دو یا چند Thread به محل مشترکی از حافظه همزمان دسترسی داشته باشند. مشکل زمانی پیش می آید که حداقل یکی از Thread مقدار ذخیره شده در حافظه را تغییر دهد در حالی که Thread دیگر در حال خواندن آن است.
در سی شارپ یکی از ساده ترین روش ها برای حل مشکل Data Race استفاده از lock است.کلمه ی کلیدی lock باعث میشود در یک لحظه ی واحد فقط یک Thread قادر به تغییر حافظه باشد.البته این روش بهینه نیست چون برنامه دیگر به صورت موازی اجرا نمیشود و Thread ها به نوبت می توانند با حافظه کار کنند. همچنین مشکلات دیگری از جمله dead-lock را به همراه دارد.
مشکل Race Condtion در نتیجه ی Data Race بوجود می آید و عامل تخریب داده های درون حافظه و عمکرد عجیب برنامه میشود. تا جایی که برنامه از کار می افتد.
خطای Race Conditon در سیستم آلارم باعث خاموشی سراسری آمریکای شمالی در سال 2003 شده است.
دوره 18م از بنچمارک Techempower اعلام شده است.
در این دور ASP NET Core با سه پله سقوط در ردیف 10م حالت Plaintext قرار گرفت. هر چند از نظر RPS تغییر محسوسی نداشته است اما وضعیت آماری چند فریم ورک دیگر کمی بهتر شده است.
این دور روی نسخه ی 2.2 از ASP NET Core انجام شده است و انتظار میرود با آمدن نسخه ی 3.0 نتایج بهتری بدست آید.
فریم ورک ASP NET Core همچنان 99 درصد سریعترین فریم ورک است و اختلاف ناچیزی با صدر جدول دارد.
در این دور ASP NET Core با سه پله سقوط در ردیف 10م حالت Plaintext قرار گرفت. هر چند از نظر RPS تغییر محسوسی نداشته است اما وضعیت آماری چند فریم ورک دیگر کمی بهتر شده است.
این دور روی نسخه ی 2.2 از ASP NET Core انجام شده است و انتظار میرود با آمدن نسخه ی 3.0 نتایج بهتری بدست آید.
فریم ورک ASP NET Core همچنان 99 درصد سریعترین فریم ورک است و اختلاف ناچیزی با صدر جدول دارد.
آشنایی با HashSet
کلاس HashSet برای نگه داری و جستجوی آرایه از اطلاعات را با پرفورمنس بالا استفاده میشود. این کالکشن مقدار تکراری نمیگیرد و ترتیب ندارد.
این کالکشن از مکانیزم هش به روش Separate Chaining استفاده میکند به این معنی که برای هر آیتم یک کد هش تولید میکند و آن را در ظرفهای جدا قرار میدهد. با این روش چک کردن آیتم تکراری سریعتر میشود و از Collision جلوگیری میشد.
در این تست لیستی شامل 20 هزار رکورد پرداخت چک شده و قرار است تعداد خریداران یکتا را بدست آوریم. مشاهده می کنید که در HashSet تقریبا 9.5 میلی ثانیه طول کشیده در حالی که List دوبرابر بیشتر زمان برده است.
از HashSet میتوان برای پردازش اطلاعات غیر تکراری با پرفورمنس بالا استفاده کرد.
کلاس HashSet برای نگه داری و جستجوی آرایه از اطلاعات را با پرفورمنس بالا استفاده میشود. این کالکشن مقدار تکراری نمیگیرد و ترتیب ندارد.
این کالکشن از مکانیزم هش به روش Separate Chaining استفاده میکند به این معنی که برای هر آیتم یک کد هش تولید میکند و آن را در ظرفهای جدا قرار میدهد. با این روش چک کردن آیتم تکراری سریعتر میشود و از Collision جلوگیری میشد.
در این تست لیستی شامل 20 هزار رکورد پرداخت چک شده و قرار است تعداد خریداران یکتا را بدست آوریم. مشاهده می کنید که در HashSet تقریبا 9.5 میلی ثانیه طول کشیده در حالی که List دوبرابر بیشتر زمان برده است.
از HashSet میتوان برای پردازش اطلاعات غیر تکراری با پرفورمنس بالا استفاده کرد.
جنگ ابری
گزارش مالی مایکروسافت نشان میدهد این شرکت در سال گذشته 38 میلیارد دلار از خدمات ابری سود داشته است.
این در حالی است که سرویس وب آمازون 25.6 میلیارد دلار بوده است و گوگل هم تنها با 8 میلیارد دلار در رتبه ی سوم قرار گرفته است.
سیاستهای جدید مایکروسافت در ارائه خدمات اوپن سورس و پذیرفتن لینکوس به عنوان بخش از اکو سیستم خدمات رسانی ابری باعث جذب مشتریان زیادی شده است.
مایکروسافت در حال حاضر با 56 دیتاسنتر در سراسر دنیا خدمات ابری Azure را عرضه می کند. همچنین تنها شرکتی است که در آفریقا و خاور میانه دیتاسنتر دارد.
منبع : فوربس
گزارش مالی مایکروسافت نشان میدهد این شرکت در سال گذشته 38 میلیارد دلار از خدمات ابری سود داشته است.
این در حالی است که سرویس وب آمازون 25.6 میلیارد دلار بوده است و گوگل هم تنها با 8 میلیارد دلار در رتبه ی سوم قرار گرفته است.
سیاستهای جدید مایکروسافت در ارائه خدمات اوپن سورس و پذیرفتن لینکوس به عنوان بخش از اکو سیستم خدمات رسانی ابری باعث جذب مشتریان زیادی شده است.
مایکروسافت در حال حاضر با 56 دیتاسنتر در سراسر دنیا خدمات ابری Azure را عرضه می کند. همچنین تنها شرکتی است که در آفریقا و خاور میانه دیتاسنتر دارد.
منبع : فوربس
آشنایی با Protocol Buffers
در واقع protobuf توسط گوگل ابداع شده و مشابه JSON فرمتی برای انتقال اطلاعات بین کلاینت و سرور است. با این فرق اساسی که داده ها به صورت باینری جابجا میشوند و کم حجمترند.
خاصیت دیگر Protobuf داشتن type است. هر فیلد نوع مشخصی دارد که کمک میکند زبانهای استاتیک تایپ راحت تر داده های دریافتی را پردازش کنند.
فرمت Protobuf بر عکس JSON برای انسان قابل خواندن نیست. گوگل برای زبانهایی مانند سی شارپ و جاوا ابزار خواندن این فرمت را تهیه کرده است.
این فرمت برای انتقال اطلاعات بین سرور و مرورگر (جاوا اسکریپت و SPA) مناسب نیست چون مرورگر ها با JSON به صورت شهروند درجه اول برخورد میکنند و با پرفورمنس بالایی میخوانند که با وجود حجم بیشتر داده در مقایسه با Protobuf سریعتر است.
کاربرد اصلی Protobuf در gRPC است. جایی که دو سرویس به صورت مستقیم با هم ارتباط دارند و لازم است درخواستهای زیادی در کوتاهترین زمان و با کمترین حجم جابجا شود.
در واقع protobuf توسط گوگل ابداع شده و مشابه JSON فرمتی برای انتقال اطلاعات بین کلاینت و سرور است. با این فرق اساسی که داده ها به صورت باینری جابجا میشوند و کم حجمترند.
خاصیت دیگر Protobuf داشتن type است. هر فیلد نوع مشخصی دارد که کمک میکند زبانهای استاتیک تایپ راحت تر داده های دریافتی را پردازش کنند.
فرمت Protobuf بر عکس JSON برای انسان قابل خواندن نیست. گوگل برای زبانهایی مانند سی شارپ و جاوا ابزار خواندن این فرمت را تهیه کرده است.
این فرمت برای انتقال اطلاعات بین سرور و مرورگر (جاوا اسکریپت و SPA) مناسب نیست چون مرورگر ها با JSON به صورت شهروند درجه اول برخورد میکنند و با پرفورمنس بالایی میخوانند که با وجود حجم بیشتر داده در مقایسه با Protobuf سریعتر است.
کاربرد اصلی Protobuf در gRPC است. جایی که دو سرویس به صورت مستقیم با هم ارتباط دارند و لازم است درخواستهای زیادی در کوتاهترین زمان و با کمترین حجم جابجا شود.
Forwarded from کدهک
در این ویدیو 4 روش مختلف استخراج و فیلتر کردن داده های دیتابیس با استفاده از LINQ و Entity framework بررسی می کنیم و آنها را از نظر کارایی مقایسه می کنیم.
قصد داریم با استفاده از Expression Tree ها و Extension Method ها کدهای بهتری بنویسیم.
https://tinyurl.com/cdhks-linq-q
قصد داریم با استفاده از Expression Tree ها و Extension Method ها کدهای بهتری بنویسیم.
https://tinyurl.com/cdhks-linq-q
چگونه سرور دانلود بسازیم؟
آشنایی با روشهای دانلود فایل در ASP NET Core
https://tinyurl.com/cdhk-dwnserv
آشنایی با روشهای دانلود فایل در ASP NET Core
https://tinyurl.com/cdhk-dwnserv
آشنایی با NGEN
اگر مرحله راه اندازی و شروع به کار برنامه ی شما کند است با استفاده از Native Image Generator می توانید کدهای تولید شده توسط JIT را کش کنید و در یک فایل جدا نگه داری کنید.
با این تکنیک مرحله ایجاد کد اسمبلی IL حذف می شود و سرعت بارگذاری برنامه افزایش پیدا میکند.
کدی که توسط NGEN تولید میشود Native نیست و همچنان به صورت Managed روی CLR اجرا میشود.
اگر فایل اصلی پروژه ی شما MyApp.dll نام دارد NGEN فایلی با نام MyApp.ni.dll در کنارش ایجاد میکند که شامل محتوای کش شده ی Native می شود. هنگام راه اندازی وجود این فایل توسط CLR چک میشود و در صورت وجود JIT از روی آن بارگذاری میشود.
زمانی که برنامه ی شما چند پروسس دارد که با هم منابع مشترک دارند استفاده از NGEN می تواند حافظه ی مصرفی را بهینه کند.
از آنجایی که کد شما قبلا JIT شده با هر تغییری در سورس باید مجدد کش آن باز سازی شود. همچنین در مواردی ممکن از حجم برنامه افزایش چشمگیری پیدا کند.
اگر مرحله راه اندازی و شروع به کار برنامه ی شما کند است با استفاده از Native Image Generator می توانید کدهای تولید شده توسط JIT را کش کنید و در یک فایل جدا نگه داری کنید.
با این تکنیک مرحله ایجاد کد اسمبلی IL حذف می شود و سرعت بارگذاری برنامه افزایش پیدا میکند.
کدی که توسط NGEN تولید میشود Native نیست و همچنان به صورت Managed روی CLR اجرا میشود.
اگر فایل اصلی پروژه ی شما MyApp.dll نام دارد NGEN فایلی با نام MyApp.ni.dll در کنارش ایجاد میکند که شامل محتوای کش شده ی Native می شود. هنگام راه اندازی وجود این فایل توسط CLR چک میشود و در صورت وجود JIT از روی آن بارگذاری میشود.
زمانی که برنامه ی شما چند پروسس دارد که با هم منابع مشترک دارند استفاده از NGEN می تواند حافظه ی مصرفی را بهینه کند.
از آنجایی که کد شما قبلا JIT شده با هر تغییری در سورس باید مجدد کش آن باز سازی شود. همچنین در مواردی ممکن از حجم برنامه افزایش چشمگیری پیدا کند.
آشنایی با BaaS
ابزار BaaS یا Backend as a service به خدماتی گفته میشود که کدهای سمت سرور را به صورت سرویس عرضه میکند.
بسیاری از اپ های موبایل یا SPA نیاز به ذخیره سازی اطلاعات در سرور مرکزی دارند. مشکل اصلی این است که باید پیاده سازی این وب سرویس یک کار تخصصی است و باید توسط برنامه نویس Back-end انجام شود.
در بسیاری از موارد وب سرویس کار زیادی انجام نمی دهد. هدف اصلی استفاده از وب سرویس ذخیره سازی اطلاعات کاربر یا تشخیص هویت آن است. اما در این میان هزینه ی تهیه ی سرور ، پیاده سازی وب سرویس و بروز نگاه داشتن آن کار مشکلی است.
در اینجا BaaS وارد میشود. این ابزار یک پنل مدیریتی در اختیار برنامه نویس Front-end یا موبایل قرار میدهد که سیستمهای تشخیص هویت و ذخیره سازی اطلاعات در آن قبلا پیاده شده است.
برنامه نویس موبایل با SDK دیتابیس خود را میسازد و یک وب سرویس آماده تحویل میگیرد بدون آنکه برای آن کدی بنویسد. همینطور امکان تغییر یا انجام تنظمیمات در دیتابیس از طریق API نیز وجود دارد.
ابزار BaaS یا Backend as a service به خدماتی گفته میشود که کدهای سمت سرور را به صورت سرویس عرضه میکند.
بسیاری از اپ های موبایل یا SPA نیاز به ذخیره سازی اطلاعات در سرور مرکزی دارند. مشکل اصلی این است که باید پیاده سازی این وب سرویس یک کار تخصصی است و باید توسط برنامه نویس Back-end انجام شود.
در بسیاری از موارد وب سرویس کار زیادی انجام نمی دهد. هدف اصلی استفاده از وب سرویس ذخیره سازی اطلاعات کاربر یا تشخیص هویت آن است. اما در این میان هزینه ی تهیه ی سرور ، پیاده سازی وب سرویس و بروز نگاه داشتن آن کار مشکلی است.
در اینجا BaaS وارد میشود. این ابزار یک پنل مدیریتی در اختیار برنامه نویس Front-end یا موبایل قرار میدهد که سیستمهای تشخیص هویت و ذخیره سازی اطلاعات در آن قبلا پیاده شده است.
برنامه نویس موبایل با SDK دیتابیس خود را میسازد و یک وب سرویس آماده تحویل میگیرد بدون آنکه برای آن کدی بنویسد. همینطور امکان تغییر یا انجام تنظمیمات در دیتابیس از طریق API نیز وجود دارد.
Forwarded from DotNetZoom (محمد جواد ابراهیمی)
❇️ در آستانه انتشار نهایی 3 NET Core.
هم اکنون NET Core. 3 تا نسخه پیش نمایش 8 خودش پیش رفته و تقریبا در آستانه انتشار نهاییش هست
تیم NET Core. گفته در حال حاضر قرار نیست دیگه فیچر جدیدی اضافه کنن و بیشتر تمرکزشون رو روی Bugfix و Stability (پایداری) گذاشتن
ماکروسافت هم گفته نسخه های پیش نمایش 7 و 8 رو پشتیبانی رسمی (Go Live) میکنه و میتونین ازشون در Production استفاده کنید. ولی پیشنهاد میشه قبل از استفاده از اون تست های لازم رو انجام بدین
ماکروسافت تاریخ انتشار نهایی NET Core 3. رو ماه سپتامبر (ماه آینده) وعده داده ولی با توجه به اینکه هنوز RC (نسخه Release Condidate) اون منتشر نشده بعید میدونم به سپتامبر برسه و احتمالا میره واسه اکتبر (2 ماه آینده)
@IranAspMvc
هم اکنون NET Core. 3 تا نسخه پیش نمایش 8 خودش پیش رفته و تقریبا در آستانه انتشار نهاییش هست
تیم NET Core. گفته در حال حاضر قرار نیست دیگه فیچر جدیدی اضافه کنن و بیشتر تمرکزشون رو روی Bugfix و Stability (پایداری) گذاشتن
ماکروسافت هم گفته نسخه های پیش نمایش 7 و 8 رو پشتیبانی رسمی (Go Live) میکنه و میتونین ازشون در Production استفاده کنید. ولی پیشنهاد میشه قبل از استفاده از اون تست های لازم رو انجام بدین
ماکروسافت تاریخ انتشار نهایی NET Core 3. رو ماه سپتامبر (ماه آینده) وعده داده ولی با توجه به اینکه هنوز RC (نسخه Release Condidate) اون منتشر نشده بعید میدونم به سپتامبر برسه و احتمالا میره واسه اکتبر (2 ماه آینده)
@IranAspMvc
آشنایی با Thread Pool
ایجاد کردن Thread جدید فرآیند پر هزینه ای است و لازم است در Kernel و استک تخصیص حافظه صورت گیرد. به دلیل این هزینه ی بالا هیچوقت نباید برای مدیریت درخواستهای مجزا Thread جدید ایجاد کرد.
در اینجا از تکنیک Thread Pool یا استخر Thread استفاده میشود. به این معنی که تعداد زیادی Thread از قبل ساخته شده و آماده ی استفاده قرار می گیرند. در عمل دو نوع Thread درون Thread Pool دات نت وجود دارند :
Worker Thread
I/O Thread
از ترد I/O برای انجامی عملیات های سخت افزاری مانند کار با شبکه و هارد دیسک استفاده میشود که I/O Bound هستند.
ایجاد Threadهای زیاد باعث کمبود حافظه میشود و کم بودن آنها برنامه را کند میکند. ایده آل این است که به تعداد هسته ها Thread داشته باشیم اما در عمل بسیاری از آنها درگیر عملیات های I/O میشوند و هسته بیکار می ماند.
تعداد Thread ها بسته به میزان درخواستها کم و زیاد میشود و برای محاسبه ی آن از الگوریتم Hill Climbing استفاده میشود که Self-Feedback است و خودش را اصلاح میکند. این الگوریتم با کم شدن Throughput تشخیص میدهد که باید Thread بیشتر اضافه شود.
ایجاد کردن Thread جدید فرآیند پر هزینه ای است و لازم است در Kernel و استک تخصیص حافظه صورت گیرد. به دلیل این هزینه ی بالا هیچوقت نباید برای مدیریت درخواستهای مجزا Thread جدید ایجاد کرد.
در اینجا از تکنیک Thread Pool یا استخر Thread استفاده میشود. به این معنی که تعداد زیادی Thread از قبل ساخته شده و آماده ی استفاده قرار می گیرند. در عمل دو نوع Thread درون Thread Pool دات نت وجود دارند :
Worker Thread
I/O Thread
از ترد I/O برای انجامی عملیات های سخت افزاری مانند کار با شبکه و هارد دیسک استفاده میشود که I/O Bound هستند.
ایجاد Threadهای زیاد باعث کمبود حافظه میشود و کم بودن آنها برنامه را کند میکند. ایده آل این است که به تعداد هسته ها Thread داشته باشیم اما در عمل بسیاری از آنها درگیر عملیات های I/O میشوند و هسته بیکار می ماند.
تعداد Thread ها بسته به میزان درخواستها کم و زیاد میشود و برای محاسبه ی آن از الگوریتم Hill Climbing استفاده میشود که Self-Feedback است و خودش را اصلاح میکند. این الگوریتم با کم شدن Throughput تشخیص میدهد که باید Thread بیشتر اضافه شود.
فرق Layer و Tier
در واقع Layer یک مفهوم نرم افزاری است و مربوط به سورس کد شما میشود. وقتی برنامه ی خود را از نظر منطقی به چند بخش تقسیم می کنید از برنامه نویسی چند لایه یا N-Layer استفاده می کنید.
منظور از Tier تقسیم بندی برنامه به صورت فیزیکی است. شما می توانید یک برنامه ی چند لایه داشته باشید اما تنها روی یک Tier آن را اجرا کنید. اگر همه ی اجزای پروژه ی شما تنها درون یک سرور قرار میگیرند برنامه ی شما یک Tier است.
هر گاه کد را به شکلی اجر کنید که بخشی از آن در ماشین دیگری اجرا شود برنامه ی N-Tier دارید.
پیاده سازی برنامه ی N-Tier به مراتب مشکلتر از N-Layer است. مثلا در یک سایت چند لایه که به صورت یک ریدفه اجرا میشود برای برقرار کردن ارتباط با دیتابیس تنها باید از مرز بین پردازش ها عبور کنید اما اگر دیتابیس را به سرور دیگری منتقل کنید باید از طریق شبکه اطلاعات را جابجا کنید که ناپایدارتر و کندتر است و لازم است برای شرایط عدم اتصال یا از کار افتادگی ماشین برنامه ریزی کنید.
برنامه ی های چند ردیفه یا N-Tier انعطاف پذیرترند ،قابلیت پاسخگویی به کاربران بیشتری دارند و راحت تر Scale می شوند.
در واقع Layer یک مفهوم نرم افزاری است و مربوط به سورس کد شما میشود. وقتی برنامه ی خود را از نظر منطقی به چند بخش تقسیم می کنید از برنامه نویسی چند لایه یا N-Layer استفاده می کنید.
منظور از Tier تقسیم بندی برنامه به صورت فیزیکی است. شما می توانید یک برنامه ی چند لایه داشته باشید اما تنها روی یک Tier آن را اجرا کنید. اگر همه ی اجزای پروژه ی شما تنها درون یک سرور قرار میگیرند برنامه ی شما یک Tier است.
هر گاه کد را به شکلی اجر کنید که بخشی از آن در ماشین دیگری اجرا شود برنامه ی N-Tier دارید.
پیاده سازی برنامه ی N-Tier به مراتب مشکلتر از N-Layer است. مثلا در یک سایت چند لایه که به صورت یک ریدفه اجرا میشود برای برقرار کردن ارتباط با دیتابیس تنها باید از مرز بین پردازش ها عبور کنید اما اگر دیتابیس را به سرور دیگری منتقل کنید باید از طریق شبکه اطلاعات را جابجا کنید که ناپایدارتر و کندتر است و لازم است برای شرایط عدم اتصال یا از کار افتادگی ماشین برنامه ریزی کنید.
برنامه ی های چند ردیفه یا N-Tier انعطاف پذیرترند ،قابلیت پاسخگویی به کاربران بیشتری دارند و راحت تر Scale می شوند.
Forwarded from کدهک
Forwarded from کدهک
در این ویدیو نگاهی به Span در سی شارپ 7.3 می اندازیم و این قابلیت جدید که در دات نت core 2.1 به بعد قابل استفاده است را بررسی می کنیم.
https://tinyurl.com/cdhks-span-intro
https://tinyurl.com/cdhks-span-intro
نسخه نهایی NET Core 3.0
به زودی پیش نمایش 9 از فریم ورک NET Core 3.0 عرضه میشود. با تغییر سیستم نام گذاری نسخه های دات نت دیگر نسخه ای با نام RC یا Release Candidate معرفی نمیشود و طبق اعلام مدیر فنی این نسخه به عنوان RC قابل استفاده است. به این معنی که دیگر تغییر بزرگی در راه نیست و Breaking Change نخواهیم داشت.
تیم توسعه ی دات نت در حال حاضر تمرکز اصلی خود را روی Blazor گذاشته و عملا کار زیادی روی ASP انجام نمی دهد.
طبق اعلام مایکروسافت نسخه ی نهایی Net Core 3.0 همزمان با کنفرانس NETConf در 23 سپتامبر رسما عرضه میشود که کمتر از یک ماه دیگه است.
تغییرات بزرگ و مهم نسخه 3.0 شامل اضافه شدن WinForm و WPF به Core است. همچنین Blazor به عنوان Web UI از طریق Web Assembly امکان برنامه نویسی #C در مرورگر را فراهم میکند و می تواند جایگزین خوبی برای جاوااسکریپت باشد.
ماه پیش سورس پروژه دات نت در GitHub به
5.0 تغییر نام داده شد که به این معنی است که کار روی نسخه ی بعدی دات نت شروع شده است.
به زودی پیش نمایش 9 از فریم ورک NET Core 3.0 عرضه میشود. با تغییر سیستم نام گذاری نسخه های دات نت دیگر نسخه ای با نام RC یا Release Candidate معرفی نمیشود و طبق اعلام مدیر فنی این نسخه به عنوان RC قابل استفاده است. به این معنی که دیگر تغییر بزرگی در راه نیست و Breaking Change نخواهیم داشت.
تیم توسعه ی دات نت در حال حاضر تمرکز اصلی خود را روی Blazor گذاشته و عملا کار زیادی روی ASP انجام نمی دهد.
طبق اعلام مایکروسافت نسخه ی نهایی Net Core 3.0 همزمان با کنفرانس NETConf در 23 سپتامبر رسما عرضه میشود که کمتر از یک ماه دیگه است.
تغییرات بزرگ و مهم نسخه 3.0 شامل اضافه شدن WinForm و WPF به Core است. همچنین Blazor به عنوان Web UI از طریق Web Assembly امکان برنامه نویسی #C در مرورگر را فراهم میکند و می تواند جایگزین خوبی برای جاوااسکریپت باشد.
ماه پیش سورس پروژه دات نت در GitHub به
5.0 تغییر نام داده شد که به این معنی است که کار روی نسخه ی بعدی دات نت شروع شده است.
Forwarded from کدهک
در دات نت اشیایی که کمتر از 85 کیلوبایت باشند در Small Object Heap ذخیره میشوند.
در SOH اطلاعات به صورت منظم و پشت سر هم ذخیره میشوند و برای تخصیص حافظه ی اشیای جدید از Next Object Pointer استفاده میشود که موقعیت جاری حافظه را در خود نگه میدارد.
وقتی در Garbage Collection حافظه ی یک شی مانند Object B پاکسازی میشود عملیات فشرده سازی روی SOH انجام میشود تا اشیای AوC کنار هم قرار گیرند و موقعیت NOP در محل جدید بدست آید.
عملیات فشرده سازی در SOH باعث کاهش پرفورمنس میشود همچنین کار کتابخانه هایی که با زبانهای Unmanaged مثل ++C نوشته شده اند را مخطل میکند. چون در زبان ++C محل حافظه قابل جابجایی خوکار نیست. به همین دلیل در #C کلمه ی کلیدی fixed جهت پین کردن حافظه استفاده میشود.
پین کردن حافظه از جابجا شدن آن توسط GC جلوگیری میکند و در کوتاه مدت پرفورمنس را افزایش میدهد. اما اگر برای مدت طولانی به کار گرفته شود در حافظه حفره های خالی ایجاد میکند و ممکن است به کرش کردن یا کاهش شدید پرفورمنس منجر شود.
در SOH اطلاعات به صورت منظم و پشت سر هم ذخیره میشوند و برای تخصیص حافظه ی اشیای جدید از Next Object Pointer استفاده میشود که موقعیت جاری حافظه را در خود نگه میدارد.
وقتی در Garbage Collection حافظه ی یک شی مانند Object B پاکسازی میشود عملیات فشرده سازی روی SOH انجام میشود تا اشیای AوC کنار هم قرار گیرند و موقعیت NOP در محل جدید بدست آید.
عملیات فشرده سازی در SOH باعث کاهش پرفورمنس میشود همچنین کار کتابخانه هایی که با زبانهای Unmanaged مثل ++C نوشته شده اند را مخطل میکند. چون در زبان ++C محل حافظه قابل جابجایی خوکار نیست. به همین دلیل در #C کلمه ی کلیدی fixed جهت پین کردن حافظه استفاده میشود.
پین کردن حافظه از جابجا شدن آن توسط GC جلوگیری میکند و در کوتاه مدت پرفورمنس را افزایش میدهد. اما اگر برای مدت طولانی به کار گرفته شود در حافظه حفره های خالی ایجاد میکند و ممکن است به کرش کردن یا کاهش شدید پرفورمنس منجر شود.
Forwarded from DotNetZoom (محمد جواد ابراهیمی)
✅ مقایسه پرفرمنس gRPC و REST
طبق این بنچمارک میتونین ببینین که توی درخواست های سبک ( مثل یه GET ساده با دیتای کم حجم) gRPC و REST تفاوتی خاصی با هم ندارن
ولی توی درخواست های سنگین (که حجم دیتای انتقالی زیاد باشه) :
🔸توی حالت GET (دریافت اطلاعات) gRPC بیش از 7 برابر سریع تر از REST عمل میکنه
🔹وتوی حالت POST (ارسال اطلاعات) gRPC بیش از 11 برابر سریع تر از REST عمل میکنه
🔸دلیل اصلی این سرعت بسیار بالا اینه که gRPC از Protocol Buffers برای سریالایز و فشرده سازی اطلاعات استفاده میکنه و نیز به صورت پیشفرض از HTTP/2 و استفاده میکنه که اون هم یه مکانیزم فشرده سازی داره
🔹برای کار با gRPC در حالت عادی باید از CLI مخصوص اون "protoc" برای کامپایل و تولید کلاس های سرویس از روی فایل های "proto." استفاده کنید. ولی با Visual Studio میتونین همین کار رو کامپایلر built-in اش راحت تر انجام بدین
🔸جمع بندی اینکه gRPC میتونه گزینه بسیار خوبی برای ارتباطات بیین Micro-service ها باشه
لینک مقاله و ریپازیتوری گیتهاب این بنچمارک
Evaluating Performance of REST vs. gRPC
Github Repository
________________
@IranAspMvc
طبق این بنچمارک میتونین ببینین که توی درخواست های سبک ( مثل یه GET ساده با دیتای کم حجم) gRPC و REST تفاوتی خاصی با هم ندارن
ولی توی درخواست های سنگین (که حجم دیتای انتقالی زیاد باشه) :
🔸توی حالت GET (دریافت اطلاعات) gRPC بیش از 7 برابر سریع تر از REST عمل میکنه
🔹وتوی حالت POST (ارسال اطلاعات) gRPC بیش از 11 برابر سریع تر از REST عمل میکنه
🔸دلیل اصلی این سرعت بسیار بالا اینه که gRPC از Protocol Buffers برای سریالایز و فشرده سازی اطلاعات استفاده میکنه و نیز به صورت پیشفرض از HTTP/2 و استفاده میکنه که اون هم یه مکانیزم فشرده سازی داره
🔹برای کار با gRPC در حالت عادی باید از CLI مخصوص اون "protoc" برای کامپایل و تولید کلاس های سرویس از روی فایل های "proto." استفاده کنید. ولی با Visual Studio میتونین همین کار رو کامپایلر built-in اش راحت تر انجام بدین
🔸جمع بندی اینکه gRPC میتونه گزینه بسیار خوبی برای ارتباطات بیین Micro-service ها باشه
لینک مقاله و ریپازیتوری گیتهاب این بنچمارک
Evaluating Performance of REST vs. gRPC
Github Repository
________________
@IranAspMvc
لایه های بهینه سازی
معماری در بالاترین سطح بهینه سازی قرار دارد. ساختار کلی پروژه و نحوه ی ارتباط اجزای آن باهم نقش بسیار بزرگی در پرفورمنس دارد.
در ادامه الگوریتمهای برنامه حضور دارند. بیشترین باگها و مشکلات پرفورمنس در این لایه خود را نشان میدهند. از آنجایی که این بخش مستقیم توسط برنامه نوشته میشود تغییر دادن آن کم هزینه تر است. اولین جایی است که باید بررسی شود.
در لایه ی بعدی فریم ورک دات نت قرار دارد. نسخه های مختلف فریم ورک از نظر کارایی با هم فرق می کنند و مایکروسافت همیشه در حال توسعه و بهبود آن است. در NET Core بخش بزرگی از کتابخانه های قدیمی باز نویسی شده است و اضافه شدن قابلیت های جدیدی مثل Ref Return و Span کمک کرده تا کارایی آن افزایش چشمگیری پیدا کند.
کد نوشته شده در نهایت با استفاده از JIT و CLR اجرا میشود. CLR شامل ابزاری مثل Garbage Collector است و با کمک زبانهایی مثل C و Assembly مدیریت حافظه و فرآیند اجرای برنامه را به عهده دارد. هرچند این لایه آخرین مرحله ی بهینه سازی است اما ابزار زیادی برای تغییر و Customize کردن رفتار آن وجود دارد تا نهایت بهرهبرداری از سیستم ممکن شود .
معماری در بالاترین سطح بهینه سازی قرار دارد. ساختار کلی پروژه و نحوه ی ارتباط اجزای آن باهم نقش بسیار بزرگی در پرفورمنس دارد.
در ادامه الگوریتمهای برنامه حضور دارند. بیشترین باگها و مشکلات پرفورمنس در این لایه خود را نشان میدهند. از آنجایی که این بخش مستقیم توسط برنامه نوشته میشود تغییر دادن آن کم هزینه تر است. اولین جایی است که باید بررسی شود.
در لایه ی بعدی فریم ورک دات نت قرار دارد. نسخه های مختلف فریم ورک از نظر کارایی با هم فرق می کنند و مایکروسافت همیشه در حال توسعه و بهبود آن است. در NET Core بخش بزرگی از کتابخانه های قدیمی باز نویسی شده است و اضافه شدن قابلیت های جدیدی مثل Ref Return و Span کمک کرده تا کارایی آن افزایش چشمگیری پیدا کند.
کد نوشته شده در نهایت با استفاده از JIT و CLR اجرا میشود. CLR شامل ابزاری مثل Garbage Collector است و با کمک زبانهایی مثل C و Assembly مدیریت حافظه و فرآیند اجرای برنامه را به عهده دارد. هرچند این لایه آخرین مرحله ی بهینه سازی است اما ابزار زیادی برای تغییر و Customize کردن رفتار آن وجود دارد تا نهایت بهرهبرداری از سیستم ممکن شود .
Forwarded from کدهک
در این ویدیو با استفاده از پیش نمایش NET Core 3.0 یک برنامه ی ویندوز فرم ایجاد می کنیم سپس درباره ی مزایای استفاده از دات نت کور در محیط WinForm صحبت می کنیم.
https://goo.gl/KwBG58
https://goo.gl/KwBG58