Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/meenachinmay/ticket-booking-simulation-golang
A simulation to understand concurrency in golang with worker pool, mutex, waitGroup, go routines and channels. If 1500 users try to book 1000 tickets at a time, then only 1000 tickets should be booked and 500 failed bookings should be there.
https://github.com/meenachinmay/ticket-booking-simulation-golang
concurrency-patterns golang-examples
Last synced: about 1 month ago
JSON representation
A simulation to understand concurrency in golang with worker pool, mutex, waitGroup, go routines and channels. If 1500 users try to book 1000 tickets at a time, then only 1000 tickets should be booked and 500 failed bookings should be there.
- Host: GitHub
- URL: https://github.com/meenachinmay/ticket-booking-simulation-golang
- Owner: Meenachinmay
- Created: 2024-06-15T02:17:51.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2024-06-26T22:50:53.000Z (6 months ago)
- Last Synced: 2024-10-13T14:08:59.038Z (3 months ago)
- Topics: concurrency-patterns, golang-examples
- Language: Go
- Homepage:
- Size: 10.7 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Ticket Booking System Simulation
This project simulates a ticket booking system to demonstrate various concurrency patterns in Go, including goroutines, channels, mutexes, and worker pools.
## Overview
The goal of this project is to simulate a scenario where multiple users try to book a limited number of tickets concurrently. The system handles concurrent booking requests using a worker pool and ensures that no more tickets are booked than available. Additionally, it tracks the number of successful and failed booking attempts.
## Concurrency Patterns Used
- **Goroutines**: Lightweight threads managed by the Go runtime to handle concurrent booking requests.
- **Channels**: Used for communication between the main function and worker goroutines.
- **Mutex**: Ensures safe access to shared data (total and booked tickets) between multiple goroutines.
- **Worker Pool**: Limits the number of concurrent booking attempts to a manageable level.## Code Explanation
### TicketBookingSystem Struct
The `TicketBookingSystem` struct maintains the total number of tickets, the number of booked tickets, and the number of failed booking attempts. It uses a mutex to ensure that the ticket booking process is thread-safe.
### WorkerPool Struct
The `WorkerPool` struct manages the workers that process booking requests. It includes the number of workers, channels for requests and results, and a wait group to synchronize the workers.
### Booking Logic
The `BookTicket` method of `TicketBookingSystem` checks if there are any tickets left and, if so, books a ticket. Otherwise, it increments the count of failed booking attempts.
### Worker Function
Each worker processes booking requests from the `request` channel and sends the result to the `result` channel. A random delay simulates real-world conditions where booking requests do not arrive all at once.
### Main Function
The `main` function initializes the ticket booking system and the worker pool, starts the booking process, and prints the results.
## How to Run
1. Clone the repository:
```bash
git clone https://github.com/yourusername/ticket-booking-simulation.git
```2. Navigate to the project directory:
```bash
cd ticket-booking-simulation
```3. Run the Go program:
```bash
go run main.go totalTickets=50 totalUsers=55 workerCount=10
```