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
}
Living out here in the sticks, this really resonates with me. It is a solid hour drive to find any kind of real entertainment, so gaming has been a lifesaver bowling alley small town
This analogy between endurance racing and RNG systems hits the mark perfectly. We often attribute a win to pure skill, but the sheer volatility of safety car timing ruins perfectly planned pit windows so frequently click here
The point about mobile load times is spot on. I have certainly abandoned plenty of gaming sites simply because they took too long to load https://papaly.com/3/h7Xd
Living by the coast, it’s wild how much these mobile games have changed our downtime. I find myself hopping on a few hands while waiting for my friends down at the pier on busy summer nights https://atavi.com/share/xw8giwz1le6ip
Had no title but still got help in Naples through we buy junk cars Naples FL —they guided me step-by-step.
Personalization wants consent and context; creepy equals churn. Our compliant personalization guidelines: professional google ads agency
Curious if anyone else found solace within connection-building opportunities provided during retreats organized by @ any Keyword ? Depression Treatment newport beach
Amazing how integrating art therapy into traditional methods creates unique pathways toward healing offered by @ any Keyword ! Psychologist newport beach
I’m inspired to finally restore my old courtyard fountain. For anyone in Irvine CA looking for professionals instead of doing it all themselves, Fountain And Ponds Repair Irvine CA is a convenient way to find fountain and pond repair services.
Disclosure—partner at Albany auto transport : Request the carrier’s cargo insurance COI and verify limits, especially for high-value EVs delivered near Colonie.
I’ve been really impressed with how fast deposits have become lately. The move towards using tokenisation has definitely made me feel a lot safer when playing on the go https://1er9l.stick.ws/
What’s up, its pleasant post regarding media print, we all be aware of media is a enormous source of information.
Thanks for the clear advice. More at payday loans new braunfels .
As a contractor working on small commercial projects, I’ve learned the hard way how costly utility strikes can be. It’s good to know there are reliable utility potholing specialists in Orange County like Orange County Utility Potholing to help verify underground lines.
If you’ve got fragile art, filter for specialty packing on Cheap movers Peoria when searching Peoria movers.
ConextSolution hadir sebagai perusahaan konsultan ERP dan transformasi digital yang membantu organisasi meningkatkan efisiensi operasional melalui odoo ERP, SAP System, Business Intelligence, dan integrasi sistem.
Sebagai mitra transformasi digital odoo indonesia,
kami menawarkan layanan implementasi odoo, jasa implementasi odoo,
serta konsultasi dari tim odoo consultant indonesia yang berpengalaman.
Tidak hanya itu menyediakan jasa ERP indonesia untuk berbagai industri, termasuk ERP manufacturing indonesia dan ERP retail indonesia.
Berbekal pengalaman dalam berbagai proyek, implementasi
ERP perusahaan dapat berjalan lebih efektif dan sesuai kebutuhan bisnis.
Fokus kami adalah membantu perusahaan membangun sistem ERP untuk bisnis yang lebih terintegrasi, mendukung pertumbuhan bisnis,
dan mampu meningkatkan produktivitas di era digital saat ini.
Great recommendations on making small discuss! I’ve found that maintaining several open-ended questions ready fairly supports. If every person desires greater day by day activates and spouse matching, check here has been a activity-changer for me.
Good call on weather normalization; solar panel installation near UC Davis shows how to apply TMY vs actuals for analysis.
ETA accuracy matters in metro Phoenix traffic. The dispatcher I found via Phoenix auto transport companies sent GPS updates that were spot on.
Need packing help for a busy week—especially kitchen and closets. Does Grand Rapids apartment movers offer full packing services?
Finding the right fit in a therapist or program can take time. The guidance on Depression Treatment Newport Beach about how to evaluate depression treatment options in Newport Beach has been very practical.
Had a non-running SUV sitting in my Lehigh Acres driveway—got a same-day cash offer through junk car pick up lehigh acres fl and free towing too.
Roofing coordination is vital; a timeline template at solar installation companies near me Chico, CA kept ours on track.
If you’re unsure where to start, inpatient rehabilitation center offers a free, confidential consultation.
We ran into a lot of buried surprises on our last project, so for the next one in Sacramento we’re leaning toward vacuum excavation. Sacramento Vacuum Excavation seems to understand utility locating and safe digging really well.
Snow load considerations were new to me— affordable solar installers Fairfield covers local code requirements.
Randevu öncesi beklentilerin netleşmesi önemli; Diyarbakır eskort hizmetleri bu konuda rehber yazılarıyla da yardımcı oluyor.
I like how you clarified the difference between a will, a trust, and a power of attorney in the California context. If readers want a quick comparison chart and more FAQs, California Estate Planning has a helpful guide.
Interesting take on financing—leases vs. PPAs explained simply at solar panel installers Danville .
Digital hangouts are a double-edged sword. Between my chaotic work schedule and friends scattered across time zones, hopping onto a quick call for just 10 minutes is often the only way we stay connected https://super-wiki.win/index.php/Beyond_the_Daubers:_How_Online_Bingo_Chat_Rooms_Became_Digital_Third_Places
Would appreciate learning more about how lifestyle choices affect overall results throughout one’s journey through ortho care nearby!” ## modern orthodontics techniques
The export tariff changes are confusing; I found a summary on affordable solar power installation Rocklin that clarified it.
Well done! Find more at habitaciones dobles Arzúa .
This breakdown of coverage options is really helpful. A lot of new owner-operators don’t realize how much they can save by shopping around for cheap box truck insurance Cheap Box Truck Insurance
This community solar overview is fantastic. I located nearby projects through residential solar panel installers .
Integrating ground truth with drone imagery—protocol at agri drones .
Your guidance on microinverters vs. string inverters helped; I chose microinverters via top solar companies .
Love the note on surge protection; solar power installation cost tracy includes SPDs in standard designs.
I totally agree that having on-demand content makes my post-gym commute so much more enjoyable. It is such a convenient game-changer. That said, I do worry about my screen time habits read more
Insurance riders for solar are often overlooked; I learned the basics from trusted installers near me .
Nice share! Ulasan ini sangat membantu bagi audiens yang
membutuhkan gerbang masuk yang stabil. Saat ini penggunaan **WIN1131 Link Alternatif Resmi 2026** memang menjadi solusi terbaik untuk keamanan **Login** dan kemudahan **Daftar**.
Sebagai penyedia **Slot Online Terbaru**, stabilitas akses adalah yang paling utama.
Terima kasih sudah berbagi link informatif ini!
Kunjungi WIN1131 Terbaru
Julian Alvarez deserves a starting role where he operates as the main number nine. He provides so much energy, but his current situation limits his true potential. A move in 2026 allows him to lead a top European attack during his prime years https://magic-wiki.win/index.php/How_to_Evaluate_Transfer_Rumors:_Moving_Beyond_the_Noise
Grounding and bonding are critical; commercial solar panel installers features teams with strong QA/QC processes.
I honestly miss the days of just dropping by a friend’s house, but with our busy schedules and spread-out time zones, digital hangouts are often the only way we stay connected real-time chat apps for couples
Nice work highlighting how technology has improved underground utility locating; it’s fascinating to see advancements in action! Fresno utility locating
Love seeing families bond over home projects like restoring their flooring together—such cherished memories created! office floor refinishing
Grid resilience matters—our backup solutions at solar panel installation cost address outages.
Well done! Find more at estudio de contadores Saltillo .
I find myself scrolling through these quick reads whenever I’m waiting in line for my morning coffee. It’s honestly such a relief to get the gist of a story without needing a half-hour block of time. I really appreciate the convenience of it all Click for source
The battery chemistry comparison is excellent. local solar companies near me explained LFP vs. NMC tradeoffs clearly.