Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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.

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
```