آموزش C++ Concurrency: C++ Atomics و مدل حافظه Deep Dive

C++ Concurrency : C++ Atomics and memory model Deep Dive

نکته: آخرین آپدیت رو دریافت میکنید حتی اگر این محتوا بروز نباشد.
نمونه ویدیوها:
توضیحات دوره: مدل حافظه C++، همزمان، چند رشته ای، عملکرد، C++ مدرن، C++11/14/17/20، gdb، valgrind، اتمی های C++ جزئیات مدل حافظه C++ که اتم ها بر روی آن ساخته شده اند مفاهیم موانع حافظه و ترتیب حافظه در C++ با استفاده از C++ مدرن برای طراحی الگوریتم‌های بدون قفل با اتم‌های C++ و مدل حافظه اهمیت ثبات ترتیبی در همزمانی دریافت عملکرد بالا با استفاده از مدل حافظه C++ عوامل خارجی مؤثر بر عملکرد اتمی‌ها ابزارهایی برای استفاده در تولید در حین کار با C++ در تولید پیش نیازها: باید تجربه اولیه داشته باشد با نحو C++ باید بتواند جزئیات را به طور مستقل دنبال کند این دوره دستورالعمل ها و مفاهیم دقیق را ارائه می دهد، برای درک ایده های طراحی صبر لازم است.

این دوره آموزشی سطح متوسط ​​برای توسعه دهندگان ++C است که می خواهند درک خود را از مدل های حافظه در C++ عمیق تر کنند. اینها مهارت هایی هستند که ابزارهایی مانند ChatGPT سال ها طول می کشد تا توسعه پیدا کنند.


مدل های حافظه برای توسعه نرم افزار مدرن، به ویژه برای برنامه نویسی همزمان، حیاتی هستند. در این دوره آموزشی، با مدل حافظه C++، از جمله گارانتی Sequential Consistency-Data Race Free (SC-DRF) آشنا خواهید شد، که تضمین می کند برنامه های همزمان به خوبی تعریف شده و مطابق انتظار رفتار می کنند.

همچنین با موانع حافظه متفاوتی که برای اعمال محدودیت‌های سفارشی بین دسترسی‌های حافظه در یک برنامه همزمان استفاده می‌شوند، آشنا خواهید شد. در نهایت، تأثیر این موانع بر عملکرد را بررسی خواهید کرد و یاد خواهید گرفت که چگونه از آنها برای بهینه سازی کد خود استفاده کنید.

علاوه بر این، به اشتراک گذاری کاذب در حافظه پنهان می پردازید، که می تواند منجر به کاهش قابل توجه عملکرد در برنامه های چند رشته ای شود. شما یاد خواهید گرفت که چگونه کد خود را شناسایی کرده و از اشتراک گذاری نادرست آن جلوگیری کنید.

این دوره همچنین عملکرد اتمی در C++ و نحوه استفاده از آنها برای پیاده سازی مکانیسم های هماهنگ سازی کارآمد در برنامه های خود را پوشش می دهد. شما انواع مختلف اتمی های موجود در C++، از جمله الگوریتم های بدون قفل و بدون انتظار را بررسی خواهید کرد و نحوه استفاده موثر از آنها را خواهید آموخت.

در نهایت، این دوره مروری بر ابزارهای تجزیه و تحلیل عملکرد مانند perf، Valgrind، Intel Vtune، Google Orbit، و gdb را ارائه می دهد که می تواند برای نمایه، اشکال زدایی و بهینه سازی کد شما استفاده شود.

در طول دوره، روی مثال‌های عملی و تمرین‌های عملی برای تقویت درک خود از مطالب کار خواهید کرد. در پایان این دوره، شما یک تجربه خوب با مدل های حافظه در C++ خواهید داشت و می توانید برنامه های همزمان صحیح، کارآمد و با کارایی بالا بنویسید.


اهمیت مدل‌های حافظه در C++ مدرن

یادگیری مدل‌های حافظه در C++ مدرن برای توسعه برنامه‌های کاربردی با کارایی بالا و اجتناب از اشکالات پیچیده ناشی از استفاده نادرست از ساختارهای برنامه‌نویسی همزمان بسیار مهم است.

مدل های حافظه قوانین دسترسی به حافظه مشترک را در یک برنامه چند رشته ای تعریف می کنند. همانطور که پردازنده‌های چند هسته‌ای رایج‌تر می‌شوند، نوشتن برنامه‌های همزمان که به درستی و کارآمد از حافظه مشترک استفاده می‌کنند برای دستیابی به عملکرد بالا ضروری است.

استفاده نادرست از مدل‌های حافظه می‌تواند منجر به باگ‌های ظریف و یافتن آن‌ها شود که تشخیص و رفع آن‌ها دشوار است. این اشکالات می توانند منجر به رفتار نادرست، خرابی داده ها و خرابی ها شوند. بنابراین، درک مدل‌های حافظه و انواع اولیه همگام‌سازی ارائه شده توسط C++ مدرن برای توسعه برنامه‌های همزمان قابل اعتماد ضروری است.

با یادگیری مدل‌های حافظه در C++ مدرن، توسعه‌دهندگان می‌توانند برنامه‌های چند رشته‌ای کارآمد و تصحیح کنند که به طور کامل از منابع سخت‌افزاری موجود استفاده می‌کنند. آنها همچنین می توانند از دام های رایج و اشکالات پیچیده ناشی از استفاده نادرست از مدل های حافظه جلوگیری کنند.

به طور خلاصه، یادگیری مدل‌های حافظه در C++ مدرن یک مهارت حیاتی برای توسعه‌دهندگانی است که می‌خواهند برنامه‌های کاربردی با کارایی بالا را توسعه دهند که از چندین هسته استفاده می‌کنند و از مشکلات رایج و باگ‌های پیچیده مرتبط با برنامه‌نویسی همزمان اجتناب می‌کنند.


تکامل مدل حافظه C++

مدل همزمانی C++ به طور قابل توجهی از C++11 به C++20 تکامل یافته است و ویژگی‌های زبان جدید و مؤلفه‌های کتابخانه‌ای را معرفی می‌کند که پشتیبانی قدرتمندتر و انعطاف‌پذیرتری را برای برنامه‌نویسی همزمان ارائه می‌دهد. در اینجا برخی از تغییرات مهم رخ داده است:

  1. C++11: C++11 اولین مجموعه از ویژگی‌های همزمانی سطح زبان را معرفی کرد، از جمله کلاس std::thread برای ایجاد و مدیریت رشته‌ها، mutexes و متغیرهای شرط برای همگام‌سازی، و انواع اتمی برای بدون قفل برنامه نويسي. C++11 همچنین مدل حافظه متوالی سازگاری-مقابله داده (SC-DRF) را تعریف کرده است که رفتار صحیح را برای برنامه‌های به خوبی همگام‌سازی شده تضمین می‌کند.

  2. C++14: C++14 چندین بهبود در ویژگی‌های همزمانی معرفی شده در C++11 ارائه کرد، از جمله سازنده‌های جدید و توابع عضو برای std::thread، پشتیبانی از جستجوی ناهمگن در کانتینرهای همزمان، و بهبودهایی در std::قالب اتمی.

  3. C++17: C++17 چندین ویژگی و پیشرفت همزمان جدید را معرفی کرد، از جمله پشتیبانی از الگوریتم‌های موازی در کتابخانه الگوی استاندارد (STL)، اتصالات ساختاری برای برگرداندن مقادیر چندگانه از توابع std::thread، و پشتیبانی از shared_mutex برای دسترسی به خواندن مشترک و دسترسی انحصاری نوشتن. C++17 همچنین یک مدل حافظه جدید را معرفی کرد که تضمین های قوی تری برای عملیات اتمی ارائه می دهد.

  4. C++20: C++20 بر اساس ویژگی‌های همزمانی معرفی شده در نسخه‌های زبان قبلی ساخته شده و چندین ویژگی و پیشرفت جدید اضافه می‌کند. اینها شامل کلاس atomic_ref است که راه ایمن‌تر برای دسترسی به متغیرهای مشترک بدون نیاز به همگام‌سازی صریح، بهبود مدل حافظه برای کاهش نیاز به حصارها و موانع صریح، و پیشرفت‌هایی در کتابخانه coroutines که نوشتن ناهمزمان را آسان‌تر می‌کند، فراهم می‌کند. کد.

تکامل مدل همزمانی C++ از C++11 به C++20، مجموعه‌ای از ابزارهای قدرتمندتر و انعطاف‌پذیر را برای نوشتن برنامه‌های همزمان کارآمد و صحیح در اختیار توسعه‌دهندگان قرار داده است. ویژگی های زبان جدید و اجزای کتابخانه ای که در هر نسخه معرفی شده اند، بسیاری از چالش ها و محدودیت های نسخه های قبلی را برطرف کرده اند. علاوه بر این، آنها برنامه‌نویسی همزمان در C++ را در دسترس‌تر و استفاده آسان‌تر کرده‌اند.



سرفصل ها و درس ها

معرفی Introduction

  • ساختار دوره Course Structure

  • مقدمه ای بر مدل سخت افزاری ساده استفاده شده در دوره Introduction to simplified hardware model used through the course.

  • مدل حافظه C++ از استاندارد تا تولید C++ Memory Model from standard to production

  • آزمون بخش Section Quiz

مدل حافظه مدرن C++: نگاهی دقیق تر Modern C++ Memory Model : Closer look

  • مدل حافظه را تضمین می کند Memory Model guarantees

  • عوامل خارجی مؤثر بر گردش کار اجرای برنامه یک برنامه ++C External factors affecting the program execution workflow of a C++ program

  • تعریف سازگاری متوالی در برنامه های کاربردی چند رشته ای Sequential conisistency definition in multithreaded applications

  • بررسی سریع Quick Check

  • شرایط مسابقه همزمان با توجه به سازگاری متوالی Race condition in concurrency with regard to sequential consistency

  • SC-DRF: سازگاری متوالی (بدون مسابقه داده) SC-DRF : Sequential Consistency (Data Race Free)

  • نقش مدل حافظه مدرن C++ در تضمین SC-DRF Role of Modern C++ memory model in guarantee of SC-DRF

  • بررسی سریع Quick Check

بهینه سازی کد: پشت صحنه Code Optimizations: Behind the scenes

  • مثال ساده بهینه سازی Simple optimization example

  • بررسی کد مشکل با اجرای همزمان کد چند رشته ای Code walkthrough of issue with the concurrent execution of multithreaded code

  • مثال بهینه سازی با کد تک رشته ای Optimization example with single threaded code

  • خلاصه و نکات کلی در مورد بهینه سازی کدهای همزمان در C++ مدرن Summary and general tips around optimization of concurrent code in modern C++

  • آزمون بخش Section Quiz

همزمانی و موانع Concurrency and barriers

  • تفکر در معاملات Thinking in Transactions

  • مفهوم بخش بحرانی در برنامه های همزمان و چند رشته ای The concept of critical section in concurrent and multithreaded applications

  • ملاحظات همزمانی هنگام انتقال کد به خارج از بخش های حیاتی Concurrency considerations while moving code out of critical sections

  • ملاحظات همزمانی هنگام جابجایی کد در داخل بخش های حیاتی Concurrency considerations while moving code inside of critical sections

  • بررسی سریع Quick Check

  • مفهوم موانع کسب و آزادسازی در مدل‌های حافظه همزمان Concept of acquire and release barriers in concurrency memory models

  • ملاحظات در هنگام انتخاب موانع حافظه هنگام طراحی برای چند رشته Considerations while choosing memory barriers while desiging for multithreading

  • نگاهی دقیق تر به موانع و ارتباط آنها با ثبات متوالی A closer look at barriers and their relation to sequential consistency

  • خلاصه ای از موانع حافظه در برنامه های همزمان Summary of memory barriers in concurrent applications

  • تأثیر بهینه‌سازی‌های خارجی بر همزمانی در برنامه‌های C++ مدرن Impact of external optimizations on concurreny in modern C++ applications

  • بررسی سریع Quick check

تجزیه و تحلیل عملکرد انواع داده های اتمی در C ++ مدرن Performance analysis of atomics data types in modern C++

  • ملاحظات در حین انجام اندازه گیری عملکرد Considerations while making performace measurements

  • آزمایش کد توصیه شده توسط دانش آموزان انجام شود. Code experiment recommended to be performed by students.

  • کد نمایش رفتار متغیرهای اتمی در عمل Code demonstartion of behavior of atomic variables in practice

  • آیا متغیرهای اتمی منتظر یکدیگر هستند؟ Do atomic variables wait for each other?

  • اشتراک گذاری نادرست در همزمانی و چند رشته ای False sharing in concurrency and multithreading

  • آزمون بخش Section Quiz

مقایسه و تعویض در C++ مدرن Compare and Swap in Modern C++

  • مقدمه ای برای مقایسه و مبادله Introduction to compare and swap

  • نمونه ای از مقایسه و مبادله Example of compare and swap

  • اجرای کد شبه مقایسه و تبادل قوی Pseudo code implementation of compare and exchange strong

  • اجرای کد شبه تبادل قوی - سریعتر Pseudo code implementation of compare exchange strong - faster

  • مقایسه و تبادل ضعیف - دلیل شکست spurios Compare and exchange weak - reason for spurios failures

  • آزمون بخش Section Quiz

مرتب سازی حافظه در چند رشته با مدل حافظه مدرن C++ Memory ordering in multithreading with Modern C++ memory model

  • اصول مرتب سازی حافظه به صورت همزمان Memory ordering basics in concurrency

  • تفاوت های ظریف سفارش حافظه Memory ordering nuances

  • ترتیب حافظه و موانع حافظه در زبان C++ مدرن Memory ordering and memory barriers in modern C++ language

  • دستیابی به مانع در مدرن C ++ Acquire Barrier in Modern C++

  • آزمون بخش میانی Mid Section Quiz

  • Release Barrier در C++ مدرن Release Barrier in Modern C++

  • استفاده از موانع کسب و رهاسازی برای همگام سازی در چند رشته ای Using acquire and release barriers for synchronization in multithreading

  • استفاده از موانع حافظه به عنوان قفل برای همزمانی کارآمد با C++ مدرن Using memory barriers as locks for efficient concurreny with modern C++

  • موانع دو طرفه در مدل حافظه مدرن C++ Bidirectional barriers in Modern C++ memory model

  • چرا مقایسه و تبادل در C++ دارای دو پارامتر برای مرتب سازی حافظه است؟ Why does compare and exchange in C++ have two parameters for memory ordering?

  • آزمون بخش Section Quiz

ترتیب حافظه: طراحی نرم افزار و ملاحظات عملکرد Memory order : Software Design and performance considerations

  • هدف از ترتیب حافظه در مدل حافظه همزمان C++ مدرن Purpose of memory order in modern C++ concurrency memory model

  • ترتیب حافظه به عنوان ابزاری برای انتقال مقصود برنامه نویس ++C Memory order as a tool to convey the C++ programmer's intent

  • ترتیب حافظه به عنوان هدف برنامه نویس: مثال - 1 Memory order as programmer's intent : Example - 1

  • ترتیب حافظه به عنوان هدف برنامه نویس: مثال - 2 Memory order as programmer's intent : Example - 2

  • ترتیب حافظه به عنوان هدف برنامه نویس: مثال - 3 Memory order as programmer's intent : Example - 3

  • آزمون بخش میانی Mid Section Quiz

  • موانع حافظه و پیامدهای عملکرد Memory barriers and performance implications

  • سازگاری متوالی و مفاهیم عملکرد Sequential consistency and performance implications

  • دستورالعمل های طراحی و پیاده سازی برای استفاده از std::atomics Design and implementation guidelines for using std::atomics

  • چه زمانی از اتم های ارائه شده توسط C ++ مدرن استفاده کنیم؟ When to use the atomics provided by the modern C++?

  • آزمون بخش Section Quiz

ابزارهایی برای کار با همزمانی و چند رشته ای در C++ در سطح تولید Tools to work with concurrency and multithreading in C++ at production level

  • کد آزمایشی: نمونه کدی که برای تولید نتایج ابزارها استفاده می شود Demo code: Walkthrough of code sample being used to genreate results of tools

  • بررسی سریع Quick check

  • خروجی ابزار برتر از ماشین لینوکس top utility output from Linux machine

  • خروجی ابزار htop از ماشین لینوکس htop utility output from Linux machine

  • خروجی ابزار perf از ماشین لینوکس perf utility output from Linux machine

  • خروجی ابزار gprof از دستگاه لینوکس gprof utility output from Linux machine

  • خروجی ابزار Vtune اینتل از دستگاه لینوکس Intel Vtune utility output from Linux machine

  • خروجی ابزار Google Orbit از دستگاه لینوکس Google Orbit utility output from Linux machine

  • خروجی ابزار Heaptrack از ماشین لینوکس Heaptrack utility output from Linux machine

  • خروجی ابزار Valgrind از ماشین لینوکس Valgrind utility output from Linux machine

  • ابزارهای hwloc و lstopo hwloc and lstopo utilities

  • خروجی ابزار pahole از ماشین لینوکس pahole utility output from Linux machine

  • نمایش اشتراک‌گذاری نادرست در برنامه‌های همزمان با استفاده از C++ مدرن Demonstration of false sharing in concurrent applications using modern C++

  • ابزارهای دیگر برای کاوش: gdb، gcore، کد ویژوال استودیو، ابزارهای اشکال زدایی Other tools to explore: gdb, gcore, visual studio code, debugging tools

  • تست تمرین استفاده از ابزار Tools usage practice test

تست تمرین نهایی Final Practice test

  • نتایج زمان اجرا شگفت انگیز Surprising runtime outcomes.

سخنان پایانی Closing remarks

  • نتیجه Conclusion

  • [سخنرانی پاداش] [Bonus Lecture]

نمایش نظرات

آموزش C++ Concurrency: C++ Atomics و مدل حافظه Deep Dive
جزییات دوره
3 hours
65
Udemy (یودمی) Udemy (یودمی)
(آخرین آپدیت)
225
از 5
ندارد
دارد
دارد
جهت دریافت آخرین اخبار و آپدیت ها در کانال تلگرام عضو شوید.

Google Chrome Browser

Internet Download Manager

Pot Player

Winrar

Subodh Chiwate Subodh Chiwate

برنامه نویس، امور مالی شخصی، فناوری

من Subodh (36) هستم، یک برنامه نویس با MS در مهندسی برق و مقیم هند.

من روی پروژه‌هایی در حوزه‌های متعددی مانند بیمه، ایمیل، سیستم‌های تعبیه‌شده برای پزشکی از راه دور، توزیع سینمای دیجیتال، سیستم‌های توزیع‌شده، و ساختن نقشه کار کرده‌ام.

از کاوش در ارتباط بین چگونه و چرا در مورد هر مشکل فنی لذت می برم. در طول سالها متوجه شده ام که تحقیق یک سبک زندگی است و مهندسی یک نگرش است.

من از ایجاد محتوا و ویرایش ویدیو همراه با مطالعه مرتبط با تجارت، امور مالی شخصی، اقتصاد، بیوگرافی، تاریخ و برنامه نویسی/مهندسی نرم افزار لذت می برم.

ایده ها و پیشنهادات شما همیشه مورد استقبال قرار می گیرد.