DEV Community

Turjo Chowdhury
Turjo Chowdhury

Posted on

What happens inside the computer when you run your Go server

Before we deep dive, let's learn a couple of important concepts

What Are Sockets and File Descriptors?

  • Sockets are endpoints for communication between computers over a network, enabling real-time data exchange.
  • Unlike regular files, sockets do not store data but facilitate data transfer between machines.
  • When Go requests a socket from the operating system (OS), the OS creates the socket and assigns a unique identifier called a file descriptor.
  • A file descriptor is an integer handle that the Go server uses to manage and reference the socket.
  • This mechanism allows the server to efficiently send and receive network data through OS-managed resources.

Go’s Concurrency with Goroutines

  • Go uses goroutines, lightweight threads, to handle many client requests concurrently.
  • The main goroutine continuously waits for incoming requests.
  • For each new request, Go creates a new goroutine to process it independently without blocking the main one.
  • This design ensures the server remains fast and scalable, handling multiple clients simultaneously.
  • When no requests arrive, the main goroutine sleeps to conserve system resources and improve overall efficiency.

Understanding How It Works in Your Computer

  • The kernel is the core part of the operating system that manages hardware and processes.
  • Network requests first travel through a router and then reach your computer’s Network Interface Card (NIC), like a WiFi adapter or Ethernet port.
  • The NIC converts the wireless or wired signals into binary data and temporarily stores it in a buffer.
  • It then sends a signal to the kernel to process this new data.
  • The kernel copies the data into a socket buffer that the Go server listens to, and marks it ready for reading.
  • The Go runtime wakes up the goroutine to read and process the request.
  • The server sends the response back through the socket and NIC.
  • The response reaches the client’s browser.

Top comments (0)