)]}'
{
  "commit": "2fbca94db7e14fc1d18162cd203d7afc19b520e8",
  "tree": "53a9092ec3cf5aba8b2c16ec914dc9c4d66f3ed4",
  "parents": [
    "ff1eb428654b7815a8fc825f1cc29d6cf72cc2f7"
  ],
  "author": {
    "name": "Ian Lance Taylor",
    "email": "iant@golang.org",
    "time": "Thu Jan 23 20:38:20 2020 -0800"
  },
  "committer": {
    "name": "Ian Lance Taylor",
    "email": "iant@golang.org",
    "time": "Mon Mar 16 22:31:39 2020 +0000"
  },
  "message": "runtime: add goroutines returned by poller to local run queue\n\nIn Go 1.13, when the network poller found a list of ready goroutines,\nthey were added to the global run queue. The timer goroutine would\ntypically sleep in a futex with a timeout, and when the timeout\nexpired the timer goroutine would either be handed off to an idle P\nor added to the global run queue. The effect was that on a busy system\nwith no idle P\u0027s goroutines waiting for timeouts and goroutines waiting\nfor the network would start at the same priority.\n\nThat changed on tip with the new timer code. Now timer functions are\ninvoked directly from a P, and it happens that the functions used\nby time.Sleep and time.After and time.Ticker add the newly ready\ngoroutines to the local run queue. When a P looks for work it will\nprefer goroutines on the local run queue; in fact it will only\noccasionally look at the global run queue, and even when it does it\nwill just pull one goroutine off. So on a busy system with both active\ntimers and active network connections the system can noticeably prefer\nto run goroutines waiting for timers rather than goroutines waiting\nfor the network.\n\nThis CL undoes that change by, when possible, adding goroutines\nwaiting for the network to the local run queue of the P that checked.\nThis doesn\u0027t affect network poller checks done by sysmon, but it\ndoes affect network poller checks done as each P enters the scheduler.\n\nThis CL also makes injecting a list into either the local or global run\nqueue more efficient, using bulk operations rather than individual ones.\n\nChange-Id: I85a66ad74e4fc3b458256fb7ab395d06f0d2ffac\nReviewed-on: https://go-review.googlesource.com/c/go/+/216198\nReviewed-by: Michael Knyszek \u003cmknyszek@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "2174564637091472d5c1b7e9a1e18fd407e9c7b1",
      "old_mode": 33188,
      "old_path": "src/runtime/proc.go",
      "new_id": "6f143cbe187b6963b53972ebe526a7dda1812b27",
      "new_mode": 33188,
      "new_path": "src/runtime/proc.go"
    }
  ]
}
