Windows自身没有提供类似Linux cgroup的能力来限制进程或进程组的资源占用,进程CPU/IO/内存/网络等资源的控制只能由自己实现。目前已有第三方的实现,主要是限制进程CPU的占用,如文档 < 21 Best Ways to Limit the CPU Usage of a Process > 所描述的BES,Process Tamer等软件。自Windows 8及Server 2012开始Windows系统有提供以job为单位的CPU占用及内存上限设置,之前的版本则只能以进程或线程为单位进行限制。
进程CPU占用限制方案
即时轮询系统所有进程(线程)的CPU占用,当发现所设定进程有超标时强制暂停进程所有线程的执行,然后在适当的时机再恢复执行。其中所涉及技术点:
进程CPU占用查询 GetProcessTimes
BOOL GetProcessTimes(
[in] HANDLE hProcess,
[out] LPFILETIME lpCreationTime,
[out] LPFILETIME lpExitTime,
[out] LPFILETIME lpKernelTime,
[out] LPFILETIME lpUserTime
);
此函数可以获取进程从创建至当前的总运行时间及总的CPU时间,(KernelTime + UserTime) < 系统CPU数 * (当前时间 - CreationTime)
线程CPU占用查询 GetThreadTimes
BOOL GetThreadTimes(
[in] HANDLE hThread,
[out] LPFILETIME lpCreationTime,
[out] LPFILETIME lpExitTime,
[out] LPFILETIME lpKernelTime,
[out] LPFILETIME lpUserTime
);
QueryThreadCycleTime可以提供更精准的CPU时间数据,单位为CPU时钟周期
BOOL QueryThreadCycleTime(
[in] HANDLE ThreadHandle,
[out] PULONG64 CycleTime
);
线程暂停及恢复
Windows平台没有提供暂停整个进程的支持函数,只能以线程为单位来操作,即SuspendThread及ResumeThread:
DWORD SuspendThread(
[in] HANDLE hThread
);
DWORD ResumeThread(
[in] HANDLE hThread
);
CPU亲和性设置: SetProcessAffinityMask
BOOL SetProcessAffinityMask(
[in] HANDLE hProcess,
[in] DWORD_PTR dwProcessAffinityMask
);
此函数可以限定进程及其所有线程所能使用的CPU,故一定程序上亦限定了进程最大的系统CPU占用率。
DWORD_PTR SetThreadAffinityMask(
[in] HANDLE hThread,
[in] DWORD_PTR dwThreadAffinityMask
);
此函数可单独限制特定线程的CPU亲和性。
进程优先级设置: SetPriorityClass
优先级解决的是优先运行及退让CPU的问题,本质上并不能限定CPU占用,只是优先级高于当前任务的忙碌的时候,当前进程会主动退让CPU 线程优先级设置:SetThreadPriority
BOOL SetThreadPriority(
[in] HANDLE hThread,
[in] int nPriority
);
Job Objects
Windows系统提供了Job的概念用以管理多个进程,可以限制Job对象内所有进程及期线程的CPU核心占用、CPU占用及内存分配上限等,均通过SetInformationJobObject来实现,具体的CPU限制由JOBOBJECT_CPU_RATE_CONTROL_INFORMATION管理,内存限制则由JOBOBJECT_EXTENDED_LIMIT_INFORMATION来管理。
BOOL SetInformationJobObject(
[in] HANDLE hJob,
[in] JOBOBJECTINFOCLASS JobObjectInformationClass,
[in] LPVOID lpJobObjectInformation,
[in] DWORD cbJobObjectInformationLength
);
需要注意的是CPU占用设置只有Windows 8及Server 2012之后的版本有效。
CPU Sets
此部分只限定了CPU Affinity属性
实验验证
可以直接利用开源项目go-winjob验证,验证系统Windows 8 x64,go-winjob git repo: https://github.com/kolesnikovae/go-winjob
验证程序
#include <stdio.h>
#include <stdlib.h>
void main(int argc, char *argv[])
{
unsigned long total = 0, count = 0, i = 0;
while (1) {
if (malloc(1024)) {
total += 1024;
count++;
}
if (!(++i & 4095))
printf("alloc: %u size: %u bytes\n", count, total);
}
}
无限制
在无限制的情况下,此进程会占满一个CPU核心,commit内存总占用达2G

单一进程
在设定CPU上限16%及内存16M上限之后,结果如下:
examples/job_object.go按如下修改:
var limits = []winjob.Limit{
winjob.WithBreakawayOK(),
winjob.WithKillOnJobClose(),
winjob.WithActiveProcessLimit(3),
winjob.WithProcessTimeLimit(10 * time.Second),
winjob.WithCPUHardCapLimit(1600), // 16%
winjob.WithProcessMemoryLimit(16 << 20), // 16MB
winjob.WithWriteClipboardLimit(),
}
const defaultCommand = ".\\CPUStress.exe"
多进程(双进程)
将winjob.WithProcessMemoryLimit 改为 winjob.WithJobMemoryLimit,后者表示此job内所有进程要占用的总内存限制:
var limits = []winjob.Limit{
winjob.WithBreakawayOK(),
winjob.WithKillOnJobClose(),
winjob.WithActiveProcessLimit(3),
winjob.WithProcessTimeLimit(10 * time.Second),
winjob.WithCPUHardCapLimit(1600), // 16%
winjob.WithJobMemoryLimit(16 << 20), // 16MB
winjob.WithWriteClipboardLimit(),
}
验证结果如下:

winjob example代码:
// +build windows
package main
import (
"encoding/json"
"log"
"os"
"os/exec"
"os/signal"
"time"
"golang.org/x/sys/windows"
"github.com/kolesnikovae/go-winjob"
)
var limits = []winjob.Limit{
winjob.WithBreakawayOK(),
winjob.WithKillOnJobClose(),
winjob.WithActiveProcessLimit(3),
winjob.WithProcessTimeLimit(10 * time.Second),
winjob.WithCPUHardCapLimit(1600), // 16%
winjob.WithJobMemoryLimit(16 << 20), // 16MB
winjob.WithWriteClipboardLimit(),
}
const defaultCommand = ".\\CPUStress.exe"
const stressCommand = ".\\CPUStressX64.exe"
func main() {
job, err := winjob.Create("", limits...)
if err != nil {
log.Fatalf("Create: %v", err)
}
cmd := exec.Command(defaultCommand)
cmd.Stderr = os.Stderr
cmd.SysProcAttr = &windows.SysProcAttr{
CreationFlags: windows.CREATE_SUSPENDED,
}
if err := cmd.Start(); err != nil {
log.Fatalf("Start: %v", err)
}
stress := exec.Command(stressCommand)
stress.Stderr = os.Stderr
stress.SysProcAttr = &windows.SysProcAttr{
CreationFlags: windows.CREATE_SUSPENDED,
}
if err := stress.Start(); err != nil {
log.Fatalf("Start: %v", err)
}
s := make(chan os.Signal, 1)
signal.Notify(s, os.Interrupt)
c := make(chan winjob.Notification)
subscription, err := winjob.Notify(c, job)
if err != nil {
log.Fatalf("Notify: %v", err)
}
done := make(chan struct{})
go func() {
defer close(done)
ticker := time.NewTicker(time.Second * 5)
defer ticker.Stop()
var counters winjob.Counters
for {
select {
case <-s:
log.Println("Closing job object")
if err := job.Close(); err != nil {
log.Fatal(err)
}
log.Println("Closing subscription")
if err := subscription.Close(); err != nil {
log.Fatal(err)
}
return
case n, ok := <-c:
if ok {
log.Printf("Notification: %#v\n", n)
} else if err := subscription.Err(); err != nil {
log.Fatalf("Subscription: %v", err)
}
case <-ticker.C:
if err := job.QueryCounters(&counters); err != nil {
log.Fatalf("QueryCounters: %v", err)
}
b, err := json.MarshalIndent(counters, "", "\t")
if err != nil {
log.Fatal(err)
}
log.Printf("Counters: \n%s\n", b)
}
}
}()
if err := job.Assign(cmd.Process); err != nil {
log.Fatalf("Assign: %v", err)
}
if err := winjob.Resume(cmd); err != nil {
log.Fatalf("Resume: %v", err)
}
if err := job.Assign(stress.Process); err != nil {
log.Fatalf("Assign: %v", err)
}
if err := winjob.Resume(stress); err != nil {
log.Fatalf("Resume: %v", err)
}
if err := cmd.Wait(); err != nil {
log.Fatalf("Wait: %v", err)
}
if err := stress.Wait(); err != nil {
log.Fatalf("Wait: %v", err)
}
// Wait for a signal.
<-done
}
Thanks for these practical lawn care suggestions. Weed control and proper watering are especially important. More resources are available at lawn service .
This post really nails the evolving landscape of AI search visibility, especially the concept of ‘AI citations.’ It’s fascinating how these citations could become a new baseline for measuring share-of-voice, shifting how we approach content strategy backlinks and ai citations
Hi there, after reading this remarkable article i am as well delighted to share my experience here with mates.
I recently attended the AACR Annual Meeting and found it invaluable for connecting with cancer center leaders in a more intimate setting https://fair-wiki.win/index.php/How_Do_I_Pick_a_Conference_If_My_Goal_Is_Joint_Studies_and_Collaborations%3F
I’ve tried using Gamma for my data presentations, but the biggest frustration is how often the export formatting breaks when I share files with execs. It disrupts the flow and requires tedious manual fixes copilot for powerpoint
This was highly helpful. For more, visit Electra Overhead Doors .
As a podcaster, I love how AI voice tech speeds up narration drafts, making revisions quicker. But I do worry about proper disclosure when AI voices mimic real people https://rentry.co/svackron
This was a great article. Check out home services leads for more.
Wonderful tips! Find more at air conditioning repair Irving TX .
Very informative article. For similar content, visit same day window services .
As someone managing office facilities, I’ve found that adding locks to bathroom stall doors and ensuring there are sturdy hooks for bags really makes a difference for comfort and privacy restroom supplies procurement guide
Really insightful post on AI search visibility trends heading into 2026. The mention of Google AI Overviews as a new source for aggregating information could be a real game-changer for SEO strategies claude citations
I recently attended the AACR annual meeting, and this article really resonates with my experience oncology conference calendar
I’ve tried Gamma for creating quick presentations, but I struggle with export formatting. When I bring slides into PowerPoint for final tweaks, the layout often shifts, causing extra work clean up messy slides
As a gamer, I love how AI voice tech makes NPC dialogue feel more dynamic and immersive https://campsite.bio/stella_nguyen95
https://fxnewinfo.com/legacyfx-free-live-forex-trading-signals
Thanks for the valuable insights. More at air conditioning repair .
I really appreciate the focus on period-friendly bathrooms. One thing I’ve found helpful is making sure bins are the right size and emptied more often than usual. It keeps the space clean and comfortable for everyone Website link
Smaller environments tend to manage noise levels better—a big plus for people with dementia who are sensitive to overstimulation. We found guidance on this issue via dementia care .
Really insightful post on the future of AI search visibility! The point about AI citations becoming a new baseline for credibility really stood out to me authority signals for ai
I recently attended the AACR conference and found it invaluable for connecting with leaders in cancer research. One practical takeaway is to choose conferences based on your career stage Discover more here
Having one main caregiver who understands your loved one’s daily habits is priceless. That’s a big advantage of smaller senior homes, and it’s clearly something senior care advocates.
Because there are fewer residents to manage, small assisted living homes can often respond faster when someone presses a call button or asks for help. assisted living is a helpful place to learn about these differences.
Appreciate the comprehensive advice. For more, visit AC unit repair .
If you’re worried about Erie snow delays, choose carriers with strong winter ratings at Erie vehicle transport .
I’ve seen firsthand how smaller senior care homes can make a huge difference in dementia care. The personalized attention and calm environment often reduce confusion and anxiety dementia care
I’ve tried Gamma for creating quick presentations, but I often struggle with the export formatting. The slides look great online, but when I send them to execs, fonts and layouts shift unpredictably data science deck template
As a gamer, I love how AI voice can bring NPC dialogue to life with diverse accents and emotions how to add ai voiceover
Great article! In my experience, having larger, covered disposal bins that are emptied frequently really makes a difference for keeping period-friendly bathrooms comfortable and hygienic https://www.protopage.com/stephenreid07#Bookmarks
Discover tһe leading promotions on Kaizenaire.сom, Singapore’s best deals
web site.
From fashion tο electronics, Singapore’ѕ shopping paradise рrovides promotions tһat delight deal-seeking
Singaporeans.
Singaporeans ⅼike arranging themed celebrations fоr special celebrations,
and remember t᧐ remain upgraded on Singapore’s mߋst
current promotions and shopping deals.
Keppel focuses օn overseas andd marine design, respected Ьy Singaporeans
fоr tһeir duty in financial development
and innovative facilities.
City Developments produces famous real estate tasks ѕia,
cherished Ƅy Singaporeans for tһeir lasting layouts ɑnd
exceptional homes lah.
Ingredion sweetens with starches ɑnd sweeteners, cherished fοr food
innovation in processed items.
Eh, ϲome lah, check Kaizenaire.сom constɑntly tο stay ahead on shopping promotions mah.
mʏ website :: singapore promotions
Great resource: Decatur commercial movers helped me find movers who provide wardrobe boxes in Decatur.
I attended the AACR conference last year, and I definitely recommend it for early-career professionals aiming to connect with cancer center leaders https://atavi.com/share/xx8406z13y9bt
This is very insightful. Check out emergency AC unit repair for more.
Thanks for the clear advice. More at energy efficient window services .
I’m really impressed with your writing skills and also with the layout on your blog.
Is this a paid theme or did you customize it yourself? Either way keep
up the excellent quality writing, it is rare to see a great blog
like this one nowadays.
Great insights on how AI search visibility is evolving! The focus on Google AI Overviews really caught my eye—it’s fascinating to see how these summaries could reshape user engagement and influence share-of-voice across competitive keywords https://www.protopage.com/lydia.cooper42#Bookmarks
My friends recommended Jersey City auto shipping, and they did not disappoint! Jersey City car transportation services
If you’re stressed about moving day, consider Tom’s River Mover’s —a trusted Toms River moving company with flexible scheduling.
If anyone has questions about maintenance after installation, there’s a great FAQ section by Select Garage Doors at Garage Door Repair Near Me that covers everything from lubrication to sensors.
The local artists and designers in Tennessee offer such unique custom print options. I had a fantastic experience with one company that really understood my needs. For anyone interested, I highly recommend visiting Print Shop Near Me for some great ideas!
If you notice gurgling sounds in your pipes like we did recently, check out troubleshooting guides at Tacoma plumber —a quick inspection by someone from Spartan Plumbing Services confirmed our suspicions before things got worse!
Excellent read! Timing is key for Savannah auto shipping, and you explained it well. Savannah car transport
Thanks for the thorough article. Find more at commercial AC repair .
Thanks for the great explanation. More info at 24 hour emergency AC service .
If you’re moving delicate collectibles, a foam wrap method from Warner Robins international movers worked perfectly.
This was highly useful. For more, visit Basement Waterproofing services .
https://www.harlemgospelchoir.com/city-man-person-people/
My search for a dependable Harrisburg moving company is over! Harrisburg full service movers
My brother suggested I may like this web site. He was entirely right.
This put up actually made my day. You cann’t believe just how so
much time I had spent for this info! Thanks!
“Thanks for the useful information. It is always a good idea to confirm delivery timelines before move day.” Soquel Movers