همزمانی در Golang و WorkerPool [Part 1]

عکس پروفایل نویسنده

@hasantalksدکتر احد حسن

مهندس نرم افزار ، https://kickbackapps.com

پیوند پروژه: https://github.com/Joker666/goworkerpool

در زبان های برنامه نویسی مدرن همزمانی به یک نیاز بی چون و چرا تبدیل شده است. تقریباً همه زبانهای برنامه نویسی امروزه از روش همزمانی استفاده می کنند. بعضی از آنها ساختارهای واقعاً قدرتمندی دارند که می توانند در رشته های مختلف سیستم عامل ، مانند جاوا ، کارها را بارگیری کنند ، برخی از این رفتارها را در همان موضوع تقلید می کنند ، به عنوان مثال ، Ruby.

Golang یک مدل همزمانی بسیار قدرتمند به نام CSP (برقراری ارتباط فرآیندهای متوالی) دارد ، که مسئله را به فرایندهای متوالی کوچکتر تقسیم می کند و سپس چندین نمونه از این فرایندها را به نام Goroutines زمان بندی می کند. ارتباط بین این فرایندها با انتقال پیام های تغییرناپذیر از طریق Channels اتفاق می افتد.

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

یک مورد ساده

بیایید تصور کنیم که یک تماس خارجی API داریم که انجام آن حدود 100 میلی ثانیه طول می کشد. اگر 1000 مورد از این تماس ها را داشته باشیم و به صورت همزمان با آنها تماس بگیریم ، این کار به طول می انجامد 100s کامل کردن

//// model/data.go

package model

type SimpleData struct {
	ID int
}

//// basic/basic.go

package basic

import (
	"fmt"