Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reduce cpu usage #6

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

Reduce cpu usage #6

wants to merge 1 commit into from

Conversation

dtfinch
Copy link

@dtfinch dtfinch commented Mar 16, 2014

Before, it would max out a cpu core at 100% while waiting (undesirable if what it's waiting on needs the full cpu). Adding a 1ms sleep reduced its usage to about 1-2% in my case.

Before, it would max out a cpu core at 100% while waiting (undesirable if what it's waiting on needs the full cpu). Adding a 1ms sleep reduced its usage to about 1% in my case.
@AvianFlu
Copy link
Owner

Yeah, I was afraid of that.

Can you try c416218 ? I think that it might actually be the correct solution to this (it will just block the parent completely until the child exits), and would be an improvement over just adding a timeout.

@dtfinch
Copy link
Author

dtfinch commented Mar 16, 2014

Changing WNOHANG to 0 was the first thing I tried, but it was returning prematurely (which seems to contradict the waitpid documentation), so I went with the sleep instead.

@andrasq
Copy link

andrasq commented Oct 1, 2014

I was going to ask for the same thing -- getting rid of the busy-wait.

The blocking waitpid() must still be looped, because a received signal will unblock the wait (even if handled). The fix is to check the return status and block again, something like:

do {
    r = waitpid(child, &status, 0);
} while (r == 0);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants