آموزش کار با Concurrency در Go (Golang)

Working with Concurrency in Go (Golang)

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

Go که اغلب به آن Golang نیز گفته می شود، به دلیل آسان کردن کار با همزمانی بسیار معروف است. به منظور اجرای همزمان یک تابع خاص، تنها کاری که باید انجام دهیم این است که کلمه "go" را به فراخوانی تابع اضافه کنیم، و در پس زمینه به صورت GoRoutine اجرا شود. برنامه‌های زمان‌بندی داخلی Go برای اطمینان از اینکه GoRoutine معین در زمانی که باید اجرا می‌شود و تا آنجا که می‌تواند کارآمد است.

اما، این بدان معنا نیست که کار با همزمانی در Go ساده است—برنامه‌نویسی ایمن Thread به برنامه‌ریزی دقیق نیاز دارد، و مهم‌تر از همه لازم است که توسعه‌دهندگان درک کاملی از نحوه برخورد Go با همزمانی داشته باشند.

در کتابخانه استاندارد، Go راه‌های مختلفی را برای برخورد با بخش‌های در حال اجرا همزمان برنامه‌مان، درست در کتابخانه استاندارد، به ما ارائه می‌دهد: sync.WaitGroup، که به ما اجازه می‌دهد تا پایان کارها منتظر بمانیم. همگام سازی. و در نهایت، کانال‌ها، که به GoRoutines امکان ارسال و دریافت داده‌ها را به یکدیگر و از یکدیگر می‌دهند.

رویکرد Go نسبت به همزمانی نسبتاً ساده است و کم و بیش این عبارت را خلاصه می‌کند: با اشتراک‌گذاری حافظه ارتباط برقرار نکنید. در عوض، حافظه را با برقراری ارتباط به اشتراک بگذارید. کانال‌ها ابزاری هستند که معمولاً از طریق برقراری ارتباط، حافظه را به اشتراک می‌گذاریم.

در این دوره، استفاده از WaitGroups، Mutexes و Channels را پوشش خواهیم داد و این کار را با جزئیات انجام خواهیم داد. ما همچنین برخی از مشکلات ذاتی همزمانی، از جمله خاتمه زودهنگام برنامه و شرایط مسابقه را پوشش خواهیم داد. در ابتدا، ما با حل برخی از مشکلات کلاسیک موجود در زمینه علوم کامپیوتر، از جمله Dining Philosophers، مشکل تولیدکننده/مصرف کننده، و Sleeping Barber، درک خوبی از نحوه کار این چیزها به دست خواهیم آورد. این مشکلات به یک دلیل کلاسیک هستند: آنها یک توسعه دهنده را مجبور می کنند تا بهترین رویکرد را برای کار با کدهایی که همزمان یا به صورت موازی اجرا می شوند، بیابد.

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


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

معرفی Introduction

  • معرفی Introduction

  • کمی در مورد من A bit about me

  • در حال نصب Go Installing Go

  • در حال نصب Go Installing Go

  • نصب کد ویژوال استودیو Installing Visual Studio Code

  • در حال نصب Make Installing Make

  • در حال نصب Make Installing Make

  • درخواست کمک Asking for help

  • درخواست کمک Asking for help

  • اشتباهات: همه ما مرتکبشان می شویم. Mistakes: we all make them.

  • اشتباهات: همه ما مرتکبشان می شویم. Mistakes: we all make them.

معرفی Introduction

  • معرفی Introduction

  • کمی در مورد من A bit about me

  • نصب کد ویژوال استودیو Installing Visual Studio Code

Goroutines، کلمه کلیدی go، و WaitGroups Goroutines, the go keyword, and WaitGroups

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • ایجاد GoRoutines Creating GoRoutines

  • گروه های انتظار برای نجات WaitGroups to the rescue

  • گروه های انتظار برای نجات WaitGroups to the rescue

  • نوشتن تست با WaitGroups Writing tests with WaitGroups

  • نوشتن تست با WaitGroups Writing tests with WaitGroups

  • چالش: کار با WaitGroup Challenge: working with WaitGroup

  • راه حل چالش Solution to Challenge

Goroutines، کلمه کلیدی go، و WaitGroups Goroutines, the go keyword, and WaitGroups

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • ایجاد GoRoutines Creating GoRoutines

  • چالش: کار با WaitGroup Challenge: working with WaitGroup

  • راه حل چالش Solution to Challenge

شرایط مسابقه، Mutexes، و مقدمه ای بر کانال ها Race Conditions, Mutexes, and an Introduction to Channels

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • شرایط مسابقه: یک مثال Race Conditions: an example

  • افزودن sync.Mutex به کد ما Adding sync.Mutex to our code

  • تست شرایط مسابقه Testing for race conditions

  • مثال پیچیده تر A more complex example

  • مثال پیچیده تر A more complex example

  • نوشتن یک تست برای پروژه درآمد هفتگی ما Writing a test for our weekly income project

  • نوشتن یک تست برای پروژه درآمد هفتگی ما Writing a test for our weekly income project

  • تولید کننده/مصرف کننده - استفاده از کانال ها برای اولین بار Producer/Consumer - Using Channels for the first time

  • شروع به کار با Producer - عملکرد پیتزا فروشی Getting started with the Producer - the pizzeria function

  • شروع به کار با Producer - عملکرد پیتزا فروشی Getting started with the Producer - the pizzeria function

  • ساخت پیتزا: عملکرد makePizza Making a pizza: the makePizza function

  • ساخت پیتزا: عملکرد makePizza Making a pizza: the makePizza function

  • در حال تکمیل کد سازنده Finishing up the Producer code

  • ایجاد و اجرای مصرف کننده: سفارش پیتزا Creating and running the consumer: ordering a pizza

  • در حال اتمام پروژه تولید کننده/مصرف کننده ما Finishing up our Producer/Consumer project

  • در حال اتمام پروژه تولید کننده/مصرف کننده ما Finishing up our Producer/Consumer project

شرایط مسابقه، Mutexes، و مقدمه ای بر کانال ها Race Conditions, Mutexes, and an Introduction to Channels

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • شرایط مسابقه: یک مثال Race Conditions: an example

  • افزودن sync.Mutex به کد ما Adding sync.Mutex to our code

  • تست شرایط مسابقه Testing for race conditions

  • تولید کننده/مصرف کننده - استفاده از کانال ها برای اولین بار Producer/Consumer - Using Channels for the first time

  • در حال تکمیل کد سازنده Finishing up the Producer code

  • ایجاد و اجرای مصرف کننده: سفارش پیتزا Creating and running the consumer: ordering a pizza

یک مسئله کلاسیک: فیلسوفان غذاخوری A Classic Problem: The Dining Philosophers

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • شروع با مشکل Getting started with the problem

  • پیاده سازی منطق diningProblem Implementing the diningProblem logic

  • چالش: چاپ کردن ترتیبی که غذا بر اساس آن تمام شده است Challenge: Printing out the order in which the meal is finished

  • راه حل چالش Solution to challenge

  • راه حل چالش Solution to challenge

  • نوشتن یک تست برای برنامه ما Writing a test for our program

  • نوشتن یک تست برای برنامه ما Writing a test for our program

یک مسئله کلاسیک: فیلسوفان غذاخوری A Classic Problem: The Dining Philosophers

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • شروع با مشکل Getting started with the problem

  • پیاده سازی منطق diningProblem Implementing the diningProblem logic

  • چالش: چاپ کردن ترتیبی که غذا بر اساس آن تمام شده است Challenge: Printing out the order in which the meal is finished

کانال ها و کلاسیک دیگر: مشکل آرایشگر خفته Channels, and another classic: The Sleeping Barber problem

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • معرفی کانال ها Introduction to channels

  • معرفی کانال ها Introduction to channels

  • عبارت select The select statement

  • کانال های بافر شده Buffered Channels

  • کانال های بافر شده Buffered Channels

  • شروع پروژه Sleeping Barber Getting started with the Sleeping Barber project

  • شروع پروژه Sleeping Barber Getting started with the Sleeping Barber project

  • تعریف برخی از متغیرها، آرایشگاه و شروع به کار با کد Defining some variables, the barber shop, and getting started with the code

  • اضافه کردن یک آرایشگر Adding a Barber

  • راه اندازی آرایشگاه به عنوان GoRoutine Starting the barbershop as a GoRoutine

  • راه اندازی آرایشگاه به عنوان GoRoutine Starting the barbershop as a GoRoutine

  • ارسال مشتریان به فروشگاه Sending clients to the shop

  • ارسال مشتریان به فروشگاه Sending clients to the shop

  • امتحان کردن چیزها Trying things out

  • امتحان کردن چیزها Trying things out

کانال ها و کلاسیک دیگر: مشکل آرایشگر خفته Channels, and another classic: The Sleeping Barber problem

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • عبارت select The select statement

  • تعریف برخی از متغیرها، آرایشگاه و شروع به کار با کد Defining some variables, the barber shop, and getting started with the code

  • اضافه کردن یک آرایشگر Adding a Barber

پروژه نهایی - ساخت یک سرویس اشتراک Final Project - Building a Subscription Service

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • راه اندازی یک وب اپلیکیشن ساده Setting up a simple web application

  • راه اندازی محیط توسعه Docker ما Setting up our Docker development environment

  • اضافه کردن postgres Adding postgres

  • اضافه کردن postgres Adding postgres

  • راه اندازی Makefile Setting up a Makefile

  • راه اندازی Makefile Setting up a Makefile

  • افزودن جلسات و Redis Adding sessions & Redis

  • تنظیم پیکربندی برنامه Setting up the application config

  • تنظیم پیکربندی برنامه Setting up the application config

  • تنظیم مسیر و کنترلر برای صفحه اصلی و راه اندازی وب سرور Setting up a route & handler for the home page, and starting the web server

  • راه اندازی قالب ها و ساخت تابع رندر Setting up templates and building a render function

  • راه اندازی قالب ها و ساخت تابع رندر Setting up templates and building a render function

  • افزودن میان افزار جلسه Adding session middleware

  • راه‌اندازی کنترل‌کننده‌ها و مسیرهای خرد اضافی Setting up additional stub handlers and routes

  • اجرای خاموشی دلپذیر Implementing graceful shutdown

  • اجرای خاموشی دلپذیر Implementing graceful shutdown

  • پر کردن پایگاه داده Populating the database

  • پر کردن پایگاه داده Populating the database

  • افزودن یک بسته داده و مدل های پایگاه داده Adding a data package and database models

  • افزودن یک بسته داده و مدل های پایگاه داده Adding a data package and database models

  • پیاده سازی توابع ورود/خروج Implementing the login/logout functions

  • پیاده سازی توابع ورود/خروج Implementing the login/logout functions

پروژه نهایی - ساخت یک سرویس اشتراک Final Project - Building a Subscription Service

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • راه اندازی یک وب اپلیکیشن ساده Setting up a simple web application

  • راه اندازی محیط توسعه Docker ما Setting up our Docker development environment

  • افزودن جلسات و Redis Adding sessions & Redis

  • تنظیم مسیر و کنترلر برای صفحه اصلی و راه اندازی وب سرور Setting up a route & handler for the home page, and starting the web server

  • افزودن میان افزار جلسه Adding session middleware

  • راه‌اندازی کنترل‌کننده‌ها و مسیرهای خرد اضافی Setting up additional stub handlers and routes

ارسال ایمیل به صورت همزمان Sending Email Concurrently

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • شروع کار با کد پستی Getting started with the mailer code

  • شروع کار با کد پستی Getting started with the mailer code

  • ساخت HTML و پیام های متنی ساده Building HTML and Plain Text messages

  • ارسال پیام (به صورت همزمان) Sending a message (synchronously)

  • ارسال پیام (به صورت همزمان) Sending a message (synchronously)

  • شروع ارسال پیام (ناهمزمان) Getting started sending a message (asynchronously)

  • نوشتن یک تابع کمکی برای ارسال آسان ایمیل Writing a helper function to send email easily

  • ارسال ایمیل در مورد ورود نادرست Sending an email on incorrect login

  • افزودن وظایف پاکسازی به تابع shutdown(). Adding cleanup tasks to the shutdown() function

  • افزودن وظایف پاکسازی به تابع shutdown(). Adding cleanup tasks to the shutdown() function

ارسال ایمیل به صورت همزمان Sending Email Concurrently

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • ساخت HTML و پیام های متنی ساده Building HTML and Plain Text messages

  • شروع ارسال پیام (ناهمزمان) Getting started sending a message (asynchronously)

  • نوشتن یک تابع کمکی برای ارسال آسان ایمیل Writing a helper function to send email easily

  • ارسال ایمیل در مورد ورود نادرست Sending an email on incorrect login

ثبت نام کاربری و نمایش طرح ها Registering a User and Displaying Plans

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • اضافه کردن الگوهای ایمیل و کد امضاکننده URL Adding mail templates and URL signer code

  • اضافه کردن الگوهای ایمیل و کد امضاکننده URL Adding mail templates and URL signer code

  • شروع در کنترلر برای ایجاد کاربر Starting on the handler to create a user

  • شروع در کنترلر برای ایجاد کاربر Starting on the handler to create a user

  • فعال کردن یک کاربر Activating a user

  • دادن اطلاعات کاربر به الگوهای ما Giving user data to our templates

  • نمایش صفحه طرح های اشتراک Displaying the Subscription Plans page

  • نمایش صفحه طرح های اشتراک Displaying the Subscription Plans page

  • افزودن مسیر و امتحان کردن موارد برای صفحه «طرح‌ها». Adding a route and trying things out for the "Plans" page

  • افزودن مسیر و امتحان کردن موارد برای صفحه «طرح‌ها». Adding a route and trying things out for the "Plans" page

  • نوشتن یک دسته خرد برای انتخاب طرح Writing a stub handler for choosing a plan

ثبت نام کاربری و نمایش طرح ها Registering a User and Displaying Plans

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • فعال کردن یک کاربر Activating a user

  • دادن اطلاعات کاربر به الگوهای ما Giving user data to our templates

  • نوشتن یک دسته خرد برای انتخاب طرح Writing a stub handler for choosing a plan

افزودن همزمانی به انتخاب طرح Adding Concurrency to Choosing a Plan

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • دریافت شناسه طرح، طرح و کاربر Getting the plan id, the plan, and the user

  • تولید فاکتور Generating an Invoice

  • تولید فاکتور Generating an Invoice

  • تولید دفترچه راهنما Generating a manual

  • تولید دفترچه راهنما Generating a manual

  • امتحان کردن، اشتراک کاربر، به‌روزرسانی جلسه و هدایت مجدد Trying things out, subscribing a user, updating the session, and redirecting

  • امتحان کردن، اشتراک کاربر، به‌روزرسانی جلسه و هدایت مجدد Trying things out, subscribing a user, updating the session, and redirecting

افزودن همزمانی به انتخاب طرح Adding Concurrency to Choosing a Plan

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • دریافت شناسه طرح، طرح و کاربر Getting the plan id, the plan, and the user

آزمایش کردن Testing

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • راه اندازی تست های ما Setting up our tests

  • راه اندازی تست های ما Setting up our tests

  • مسیرهای تست Testing Routes

  • مسیرهای تست Testing Routes

  • تست رندر Testing the Renderer

  • تست رندر Testing the Renderer

  • تغییر بسته داده تا قابل آزمایش باشد Modifying the data package to make it testable

  • پیاده سازی نوع PlanTest Implementing the PlanTest type

  • شروع به آزمایش Handlers Getting started testing Handlers

  • تست Login Handler Testing the Login Handler

  • آزمایش کنترل کننده ای که از همزمانی استفاده می کند Testing a handler that uses concurrency

آزمایش کردن Testing

  • آنچه در این بخش به آن خواهیم پرداخت What we'll cover in this section

  • تغییر بسته داده تا قابل آزمایش باشد Modifying the data package to make it testable

  • پیاده سازی نوع PlanTest Implementing the PlanTest type

  • شروع به آزمایش Handlers Getting started testing Handlers

  • تست Login Handler Testing the Login Handler

  • آزمایش کنترل کننده ای که از همزمانی استفاده می کند Testing a handler that uses concurrency

نمایش نظرات

آموزش کار با Concurrency در Go (Golang)
جزییات دوره
9.5 hours
86
Udemy (یودمی) Udemy (یودمی)
(آخرین آپدیت)
5,394
4.7 از 5
دارد
دارد
دارد
Trevor Sawler
جهت دریافت آخرین اخبار و آپدیت ها در کانال تلگرام عضو شوید.

Google Chrome Browser

Internet Download Manager

Pot Player

Winrar