Skip to content

Latest commit

 

History

History
26 lines (17 loc) · 1.31 KB

README.md

File metadata and controls

26 lines (17 loc) · 1.31 KB

block-net

This program explores the question whether network i/o (e.g. waiting on socket read/write operations) will show up in the block profiler or not.

The program does the following:

  1. Start a TCP server via net.Listen() and wait for a client using l.Accept().
  2. Sleep for 1s
  3. Connect to the TCP server with a client using net.Dial().
  4. Let the server wait for a message from the client using conn.Read()
  5. Sleep for 1s
  6. Send a "hello world" message from the client to the server using conn.Write()
  7. Server prints the message it received
  8. Program exits

Given this program and assuming the block profiler captures network i/o, we'd expect to capture two major blocking events:

  1. l.Accept() waiting for 1s before a client connects.
  2. conn.Read() waiting for 1s before receiving a message from the client

However, as you can see below, the block profiler captures only ~12ms of activity related to channel operations involved in the listen/dial process. The accept/read activity however remains completely invisible.

block-net

This means that block profiler is generally not able to give a good idea about goroutines that are waiting on network i/o.