mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: check for preemption due to garbage collection
in various already expensive routines. helps keep cpu utilization up when GOMAXPROCS > 1, but not a full solution. http://groups.google.com/group/golang-nuts/t/7a9535c4136d3e2 R=r CC=golang-dev https://golang.org/cl/184043
This commit is contained in:
parent
752b1702d0
commit
5328df6534
6 changed files with 29 additions and 2 deletions
|
|
@ -14,6 +14,8 @@ G g0; // idle goroutine for m0
|
|||
|
||||
static int32 debug = 0;
|
||||
|
||||
int32 gcwaiting;
|
||||
|
||||
// Go scheduler
|
||||
//
|
||||
// The go scheduler's job is to match ready-to-run goroutines (`g's)
|
||||
|
|
@ -362,6 +364,7 @@ void
|
|||
stoptheworld(void)
|
||||
{
|
||||
lock(&sched);
|
||||
gcwaiting = 1;
|
||||
sched.mcpumax = 1;
|
||||
while(sched.mcpu > 1) {
|
||||
noteclear(&sched.stopped);
|
||||
|
|
@ -379,6 +382,7 @@ void
|
|||
starttheworld(void)
|
||||
{
|
||||
lock(&sched);
|
||||
gcwaiting = 0;
|
||||
sched.mcpumax = sched.gomaxprocs;
|
||||
matchmg();
|
||||
unlock(&sched);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue