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
}
1win фора шартгузорӣ [url=http://1win26514.help]http://1win26514.help[/url]
This shift toward AI visibility tracking is long overdue for enterprise brands. We’ve all seen that 30% CTR drop as search intent shifts toward the AI overview, and it is changing how we report value to stakeholders Check out the post right here
Recovering from a minor injury? Seek a qualified Melbourne trainer through personal trainer Melbourne CBD .
Solid note on landscaping lighting voltage. commercial electrical repair Boston in Boston balanced loads to stop frequent bulb failures.
Great factor approximately difference orders derailing budgets. Clear scopes and written approvals are a must-have, plus a 10–15% contingency check here
pin-up tək mərc [url=https://www.pinup2010.help]https://www.pinup2010.help[/url]
Appreciate the thorough information. For more, visit bufete jurídico Galicia .
I’ve seen a few agencies try this, but separating product development from client delivery is the real hurdle. Keeping that internal tool sharp through daily dogfooding is great, but shifting into SaaS mode often kills the agency focus https://unsplash.com/@ronald_ellis4
I totally agree that we need more engineering focus in SEO leadership. Relying on generic third-party SaaS tools just keeps us in the same box as our competitors. Building proprietary tools is the only real way to gain a unique edge these days SEO agency discovery phase
Every day, it seems like we learn more about the power of regenerative medicine, especially through efforts at regenerative medicine doctor for aging .
Interesting breakdown on the AI visibility landscape. I’ve been struggling with the drift in results when testing from Berlin at 9am vs 3pm; the variance is massive claude safety guardrails impact
Appreciate the thorough information. For more, visit mosquiteras a medida .
Need a licensed emergency electrician who can arrive within the hour— local electrical companies Sydney looks solid.
The shift toward AI visibility tracking is long overdue for global teams, especially with zero-click searches eating into our traditional organic traffic https://www.animenewsnetwork.com/bbs/phpBB2/profile.php?mode=viewprofile&u=1180093
Seeing those €18,000/month retainers becoming the new standard across the board is definitely making my procurement team sweat a bit for our 2026 budget. It’s a massive jump from what we’ve seen historically https://www.protopage.com/elizabeth.myers78#Bookmarks
I suspected a slow refrigerant leak; affordable ac repair used dye to find and repair it.
Good points about sealing gaps around doors. I used a step-by-step from affordable exterminator service .
pin-up sənəd yükləmə [url=https://pinup2010.help]https://pinup2010.help[/url]
Thanks for the clear advice. More at cocinas italianas Granada .
The group protection services capture my eye. Are there gated entries or safety cameras in the course of? Maybelle Manor
Вывод из запоя на дому с быстрым облегчением в Екатеринбурге является эффективным методом для тех, кто хочет быстро избавиться от неприятных симптомов абстиненции, не выходя из дома. Основное преимущество этого метода — это быстрый результат, минимальные риски для здоровья и отсутствие необходимости в стационарном лечении. Процедура, проводимая опытным медицинским специалистом, помогает не только устранить симптомы похмелья, но и восстановить нормальное состояние организма без стресса и неудобств для пациента.
Исследовать вопрос подробнее – http://vyvod-iz-zapoya-na-domu-ekaterinburg-19.ru
The cost of roof installation can vary so much. Glad to see you address that! Southfield residents can find great deals at Siding installation Southfield MI .
I have been debating doing this with our internal reporting tool. The idea of separating product development from client delivery is the biggest hurdle for my team right now https://www.instapaper.com/read/2008513627
Appreciate the detailed post. Find more at albergue de peregrinos Palas de Rei .
This breakdown of AI visibility tracking is timely, but I’m curious about the granularity. Testing LLM behavior across 195 countries is a massive undertaking, especially regarding local context https://orcid.org/0009-0002-0365-4520
I completely agree that we’ve relied too heavily on generic third-party dashboards lately https://0u1eb.stick.ws/
The shift toward AI visibility metrics is crucial for EU enterprise SEO right now. Seeing a 30% CTR drop across our core informational keywords really forces a total rethink of our global strategy https://edward_fleming6.raindrop.page/bookmarks-70475538
1win вебсайти расмӣ [url=http://1win26514.help]http://1win26514.help[/url]
Energy-efficient appliances, solar readiness, and smart home features add real value to new homes. Housing Development Homes for sale
Kitchen small appliance circuits are often overlooked; electrical services Phoenix Phoenix, AZ made sure ours met code.
Such practical advice regarding roof installation processes; eager to connect with Roof Repair Oswego
Этот информативный текст сочетает в себе темы здоровья и зависимости. Мы обсудим, как хронические заболевания могут усугубить зависимости и наоборот, как зависимость может влиять на общее состояние здоровья. Читатели получат представление о комплексном подходе к лечению как физического, так и психического состояния.
Лучшее решение — прямо здесь – [url=https://newbabe.ru/sovety/skrytoe-vliyanie-otcovskogo-alkogolizma-na-detstvo.html]наркологический стационар санкт петербург[/url]
This is an interesting breakdown of the current tracking landscape ai output parsing changes
Эта публикация погружает вас в мир увлекательных фактов и удивительных открытий. Мы расскажем о ключевых событиях, которые изменили ход истории, и приоткроем завесу над научными достижениями, которые вдохновили миллионы. Узнайте, чему может научить нас прошлое и как применить эти знания в будущем.
Продолжить изучение – [url=https://catsway.ru/kak-zaschitit-svoy-dom-i-sohranit-zdorove/]капельница от запоя на дому цена[/url]
Curious about pricing traits in housing tendencies for sale? This web site has insightful listings—stopover at Housing Development Homes for sale .
mostbet букмекерская контора официальный сайт [url=http://mostbet15384.help]http://mostbet15384.help[/url]
Well done! Find more at respite care .
Thanks for clarifying breaker sizing—panel audits at Plano emergency electrician .
Panel dating helps plan upgrades; identification guide at commercial electrician in Spicewood Spicewood, TX .
The community occasions calendar and eco-friendly areas upload genuine magnitude to dwelling here. Listings: Housing Development Homes for sale
The cost proposition for households is apparent. Do you offer personal loan help techniques for people today? Maybelle Manor
мостбет служба поддержки [url=https://www.mostbet15384.help]https://www.mostbet15384.help[/url]
как скачать приложение 1win [url=https://1win59801.help/]https://1win59801.help/[/url]
mostbet скачать [url=https://mostbet94827.help/]https://mostbet94827.help/[/url]
pin-up bonus ləğv et [url=https://pinup2010.help/]https://pinup2010.help/[/url]
1вин экспресс [url=https://www.1win59801.help]https://www.1win59801.help[/url]
mostbet plinko casino [url=https://www.mostbet94827.help]mostbet plinko casino[/url]
Appreciate the thorough write-up. Find more at abogado de familia Santiago .
Loved the clean panel wiring photos; I learned routing tricks on Baton Rouge local electrical services .
мелбет зеркало [url=https://www.melbet49375.help]https://www.melbet49375.help[/url]