Go

āļĢāļđāļ›āđāļšāļš Concurrency

Worker pool, pipeline, fan-out/fan-in, āļāļēāļĢāļĒāļāđ€āļĨāļīāļ, context, errgroup, semaphore

24 āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒÂ·
Mid-Level
1

Worker pool āđƒāļ™ Go āļ„āļ·āļ­āļ­āļ°āđ„āļĢ?

āļ„āļģāļ•āļ­āļš

Worker pool āļ„āļ·āļ­āļĢāļđāļ›āđāļšāļš concurrency āļ—āļĩāđˆāđƒāļŠāđ‰ goroutine (worker) āļˆāļģāļ™āļ§āļ™āļ„āļ‡āļ—āļĩāđˆāđ€āļžāļ·āđˆāļ­āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨ task āļˆāļēāļ channel āļ—āļĩāđˆāđƒāļŠāđ‰āļĢāđˆāļ§āļĄāļāļąāļ™ āļĢāļđāļ›āđāļšāļšāļ™āļĩāđ‰āļŠāđˆāļ§āļĒāļˆāļģāļāļąāļ”āļˆāļģāļ™āļ§āļ™ goroutine āļ—āļĩāđˆāļ—āļģāļ‡āļēāļ™āļ­āļĒāļđāđˆāđāļĨāļ°āļ„āļ§āļšāļ„āļļāļĄāļāļēāļĢāđƒāļŠāđ‰āļ—āļĢāļąāļžāļĒāļēāļāļĢāļ‚āļ­āļ‡āļĢāļ°āļšāļš āļ•āđˆāļēāļ‡āļˆāļēāļāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ goroutine āļŦāļ™āļķāđˆāļ‡āļ•āļąāļ§āļ•āđˆāļ­āļŦāļ™āļķāđˆāļ‡ task āļ•āļĢāļ‡āļ—āļĩāđˆ worker pool āļˆāļ°āļ™āļģāļŠāļļāļ” worker āļāļĨāļąāļšāļĄāļēāđƒāļŠāđ‰āļ‹āđ‰āļģāđ€āļžāļ·āđˆāļ­āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨ task āļˆāļģāļ™āļ§āļ™āļĄāļēāļāļ­āļĒāđˆāļēāļ‡āļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž

2

āļ‚āđ‰āļ­āđ„āļ”āđ‰āđ€āļ›āļĢāļĩāļĒāļšāļŦāļĨāļąāļāļ‚āļ­āļ‡āļāļēāļĢāđƒāļŠāđ‰ worker pool āđāļ—āļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ goroutine āļŦāļ™āļķāđˆāļ‡āļ•āļąāļ§āļ•āđˆāļ­āļŦāļ™āļķāđˆāļ‡ task āļ„āļ·āļ­āļ­āļ°āđ„āļĢ?

āļ„āļģāļ•āļ­āļš

āļāļēāļĢāļˆāļģāļāļąāļ”āļˆāļģāļ™āļ§āļ™ goroutine āļ—āļĩāđˆāļ—āļģāļ‡āļēāļ™āļ­āļĒāļđāđˆāļŠāđˆāļ§āļĒāļ„āļ§āļšāļ„āļļāļĄāļāļēāļĢāđƒāļŠāđ‰āļ—āļĢāļąāļžāļĒāļēāļāļĢāļ‚āļ­āļ‡āļĢāļ°āļšāļš (āļŦāļ™āđˆāļ§āļĒāļ„āļ§āļēāļĄāļˆāļģāđāļĨāļ° CPU) āđāļĨāļ°āļŦāļĨāļĩāļāđ€āļĨāļĩāđˆāļĒāļ‡āļ āļēāļĢāļ°āđ€āļāļīāļ™ āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ goroutine āļŦāļ™āļķāđˆāļ‡āļ•āļąāļ§āļ•āđˆāļ­āļŦāļ™āļķāđˆāļ‡ task āļ­āļēāļˆāļ—āļģāđƒāļŦāđ‰āđ€āļāļīāļ” goroutine āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āļŦāļĨāļēāļĒāļžāļąāļ™āļŦāļĢāļ·āļ­āļŦāļĨāļēāļĒāļĨāđ‰āļēāļ™āļ•āļąāļ§ āļ—āļģāđƒāļŦāđ‰ scheduler āļ­āļīāđˆāļĄāļ•āļąāļ§āđāļĨāļ°āļŦāļ™āđˆāļ§āļĒāļ„āļ§āļēāļĄāļˆāļģāļŦāļĄāļ” Worker pool āļĢāļąāļāļĐāļēāļˆāļģāļ™āļ§āļ™ worker āļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄāļ—āļĩāđˆāļŠāļļāļ”āļ‹āļķāđˆāļ‡āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨ task āļ•āļēāļĄāļĨāļģāļ”āļąāļš āļˆāļķāļ‡āļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ—āļĩāđˆāļ„āļēāļ”āļāļēāļĢāļ“āđŒāđ„āļ”āđ‰āđāļĄāđ‰āļ āļēāļĒāđƒāļ•āđ‰āļ āļēāļĢāļ°āļŠāļđāļ‡

3

Pipeline āđƒāļ™āļšāļĢāļīāļšāļ—āļ‚āļ­āļ‡ concurrency āđƒāļ™ Go āļ„āļ·āļ­āļ­āļ°āđ„āļĢ?

āļ„āļģāļ•āļ­āļš

Pipeline āļ„āļ·āļ­āļŠāļļāļ”āļ‚āļ­āļ‡āļ‚āļąāđ‰āļ™āļ•āļ­āļ™ (stage) āļ—āļĩāđˆāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļāļąāļ™āļ”āđ‰āļ§āļĒ channel āđ‚āļ”āļĒāđāļ•āđˆāļĨāļ°āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđ€āļ›āđ‡āļ™āļāļĨāļļāđˆāļĄāļ‚āļ­āļ‡ goroutine āļ—āļĩāđˆāļĢāļąāļ™āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āđ€āļ”āļĩāļĒāļ§āļāļąāļ™ āđāļ•āđˆāļĨāļ°āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļĢāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāļœāđˆāļēāļ™ channel āļ‚āļēāđ€āļ‚āđ‰āļē āļ—āļģāļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨ āđāļĨāđ‰āļ§āļŠāđˆāļ‡āļœāļĨāļĨāļąāļžāļ˜āđŒāļœāđˆāļēāļ™ channel āļ‚āļēāļ­āļ­āļ āļĢāļđāļ›āđāļšāļšāļ™āļĩāđ‰āļŠāđˆāļ§āļĒāđāļšāđˆāļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ—āļĩāđˆāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļ­āļ­āļāđ€āļ›āđ‡āļ™āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļšāļ‡āđˆāļēāļĒāđāļĨāļ°āļ™āļģāļāļĨāļąāļšāļĄāļēāđƒāļŠāđ‰āđƒāļŦāļĄāđˆāđ„āļ”āđ‰ āļ—āļģāđƒāļŦāđ‰āļ›āļĢāļ°āļāļ­āļšāđāļĨāļ°āļ—āļ”āļŠāļ­āļšāđāļ•āđˆāļĨāļ°āļ­āļ‡āļ„āđŒāļ›āļĢāļ°āļāļ­āļšāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļ­āļīāļŠāļĢāļ°

4

āļˆāļ°āļ›āļīāļ” channel āđƒāļ™ worker pool āļ­āļĒāđˆāļēāļ‡āļ–āļđāļāļ•āđ‰āļ­āļ‡āđ€āļžāļ·āđˆāļ­āļŠāđˆāļ‡āļŠāļąāļāļāļēāļ“āļŠāļīāđ‰āļ™āļŠāļļāļ”āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĢ?

5

āļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļĢāļ°āļŦāļ§āđˆāļēāļ‡ fan-out āđāļĨāļ° fan-in āļ„āļ·āļ­āļ­āļ°āđ„āļĢ?

+21 āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ

āļŦāļąāļ§āļ‚āđ‰āļ­āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Go āļ­āļ·āđˆāļ™āđ†

āļžāļ·āđ‰āļ™āļāļēāļ™ Go

Junior
25 āļ„āļģāļ–āļēāļĄ

āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ Go

Junior
20 āļ„āļģāļ–āļēāļĄ

āļ­āļīāļ™āđ€āļ—āļ­āļĢāđŒāđ€āļŸāļ‹āđƒāļ™ Go

Junior
18 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”

Junior
20 āļ„āļģāļ–āļēāļĄ

āļžāļ·āđ‰āļ™āļāļēāļ™ Goroutine

Junior
20 āļ„āļģāļ–āļēāļĄ

Channels

Junior
22 āļ„āļģāļ–āļēāļĄ

Go Modules

Mid-Level
18 āļ„āļģāļ–āļēāļĄ

āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ HTTP

Mid-Level
24 āļ„āļģāļ–āļēāļĄ

āđ„āļ„āļĨāđ€āļ­āļ™āļ•āđŒ HTTP

Mid-Level
18 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠ JSON

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

Database/SQL

Mid-Level
22 āļ„āļģāļ–āļēāļĄ

āđāļžāđ‡āļāđ€āļāļˆ context

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

Testing

Mid-Level
22 āļ„āļģāļ–āļēāļĄ

āđ„āļžāļĢāļĄāļīāļ—āļĩāļŸāļāļēāļĢāļ‹āļīāļ‡āđ‚āļ„āļĢāđ„āļ™āļ‹āđŒ

Mid-Level
22 āļ„āļģāļ–āļēāļĄ

āđ€āļŸāļĢāļĄāđ€āļ§āļīāļĢāđŒāļāđ€āļ§āđ‡āļš Go

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ­āļ­āļāđāļšāļš REST API

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

gRPC

Mid-Level
22 āļ„āļģāļ–āļēāļĄ

Reflection

Senior
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļŦāļ™āđˆāļ§āļĒāļ„āļ§āļēāļĄāļˆāļģ

Senior
24 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļāļēāļĢāļ—āļģāļ‡āļēāļ™

Senior
22 āļ„āļģāļ–āļēāļĄ

Generics

Senior
20 āļ„āļģāļ–āļēāļĄ

Go Design Patterns

Senior
24 āļ„āļģāļ–āļēāļĄ

Microservices

Senior
24 āļ„āļģāļ–āļēāļĄ

āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāđāļĨāļ°āļāļēāļĢāļĒāļ·āļ™āļĒāļąāļ™āļ•āļąāļ§āļ•āļ™

Senior
24 āļ„āļģāļ–āļēāļĄ

Docker & Containerization

Senior
20 āļ„āļģāļ–āļēāļĄ

Kubernetes Basics

Senior
22 āļ„āļģāļ–āļēāļĄ

Go āļ‚āļąāđ‰āļ™āļŠāļđāļ‡

Senior
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļžāļąāļ’āļ™āļē CLI

Senior
20 āļ„āļģāļ–āļēāļĄ

āđ€āļŠāļĩāđˆāļĒāļ§āļŠāļēāļ Go āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ„āļĢāļąāđ‰āļ‡āļ–āļąāļ”āđ„āļ›

āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ„āļģāļ–āļēāļĄāļ—āļąāđ‰āļ‡āļŦāļĄāļ” flashcards āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„ āđāļšāļšāļāļķāļāļŦāļąāļ” code review āđāļĨāļ°āļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ

āđ€āļĢāļīāđˆāļĄāđƒāļŠāđ‰āļŸāļĢāļĩ