mirror of
https://github.com/tmrts/go-patterns.git
synced 2024-11-29 00:25:31 +03:00
create broadcast page and link to main Readme
This commit is contained in:
parent
f978e42036
commit
12855d0ea4
@ -63,7 +63,7 @@ A curated collection of idiomatic design & application patterns for Go language.
|
||||
|:-------:|:----------- |:------:|
|
||||
| [N-Barrier](/concurrency/barrier.md) | Prevents a process from proceeding until all N processes reach to the barrier | ✘ |
|
||||
| [Bounded Parallelism](/concurrency/bounded_parallelism.md) | Completes large number of independent tasks with resource limits | ✔ |
|
||||
| [Broadcast](/concurrency/broadcast.md) | Transfers a message to all recipients simultaneously | ✘ |
|
||||
| [Broadcast](/concurrency/broadcast.md) | Transfers a message to all recipients simultaneously | ✔ |
|
||||
| [Coroutines](/concurrency/coroutine.md) | Subroutines that allow suspending and resuming execution at certain locations | ✘ |
|
||||
| [Generators](/concurrency/generator.md) | Yields a sequence of values one at a time | ✔ |
|
||||
| [Reactor](/concurrency/reactor.md) | Demultiplexes service requests delivered concurrently to a service handler and dispatches them syncronously to the associated request handlers | ✘ |
|
||||
|
49
concurrency/broadcast.md
Normal file
49
concurrency/broadcast.md
Normal file
@ -0,0 +1,49 @@
|
||||
# Broadcast Pattern
|
||||
|
||||
In Go, you can create a broadcast concurrency pattern using goroutines and channels. This pattern allows you to send a message to multiple recipients simultaneously.
|
||||
|
||||
## Implementation
|
||||
|
||||
```go
|
||||
// Broadcast sends a message to all recipients simultaneously
|
||||
func Broadcast(message string, recipients ...chan string) {
|
||||
var wg sync.WaitGroup
|
||||
for _, recipient := range recipients {
|
||||
wg.Add(1)
|
||||
go func(recipient chan string) {
|
||||
defer wg.Done()
|
||||
recipient <- message
|
||||
}(recipient)
|
||||
}
|
||||
wg.Wait()
|
||||
}
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```go
|
||||
func main() {
|
||||
// Create channels for recipients
|
||||
recipient1 := make(chan string)
|
||||
recipient2 := make(chan string)
|
||||
recipient3 := make(chan string)
|
||||
|
||||
// Start goroutines to receive messages
|
||||
go func() {
|
||||
fmt.Println("Recipient 1 received:", <-recipient1)
|
||||
}()
|
||||
go func() {
|
||||
fmt.Println("Recipient 2 received:", <-recipient2)
|
||||
}()
|
||||
go func() {
|
||||
fmt.Println("Recipient 3 received:", <-recipient3)
|
||||
}()
|
||||
|
||||
// Broadcast a message to all recipients
|
||||
Broadcast("Hello, World!", recipient1, recipient2, recipient3)
|
||||
}
|
||||
```
|
||||
|
||||
1. The *Broadcast* function takes a message and a variable number of recipient channels.
|
||||
1. It uses a *sync.WaitGroup* to wait for all goroutines to finish sending the message.
|
||||
1. Each recipient channel receives the message simultaneously through a goroutine.
|
Loading…
Reference in New Issue
Block a user