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
}
Этот обзор медицинских исследований собрал самое важное из последних публикаций в области медицины. Мы проанализировали ключевые находки и представили их в доступной форме, чтобы читатели могли легко ориентироваться в актуальных темах. Этот материал станет отличным подспорьем для изучения медицины.
Заходи — там интересно – [url=https://life-sovet.ru/kak-spravitsya-s-pohmelem/]вывод из запоя круглосуточно[/url]
The potential dangers of not using a professional utility locator can’t be overstated; thanks for sharing this info! Fresno Underground Utility Locating
Romantik komediler arasında taze bir soluk olmuş. Spoilersız inceleme: Diyarbakır escort girls
Just booked a virtual pre-move survey through Shakopee commercial movers —quick way to get accurate quotes from Shakopee.
Van’da yeni insanlarla tanışmak için önerdiğiniz güvenli platformlar var mı? Ben de female van escort üzerinden birkaç kişiyle sohbet ettim, deneyimlerinizi merak ediyorum.
The part on hydro-jetting frequency is spot on. We do semiannual jetting and quarterly pumping based on effluent TSS/FOG readings. Calculator at grease trap maintenance service helped set intervals.
Boya sonrası garanti veriyorlar; olası rötuşlarda hızlı geri dönüş aldım. İlgilenenler onaylı boya badana şirketleri Bursa ’e uğrasın.
Well done! Find more at reclamación de prestaciones Sevilla .
Huntsville movers can get busy at month-end— Huntsville moving companies helped me find mid-month discounts.
Этот обзор содержит информацию о передовых достижениях в области медицины. Мы разберем инновационные технологии, которые меняют подход к лечению и диагностике, а также их влияние на эффективность оказания медицинской помощи.
Подробнее – [url=https://proguby.ru/uhod/oteki-lica-i-sineva-gub-posle-prazdnikov]вывод из запоя наркология[/url]
Your awareness on artisanal details—rattan lamps, indigo dyes, and teak accents—reminds me why Baanlooknang interiors on no account go out of favor. For a curated checklist of artisans and booking possibilities, see dig this .
Thanks for the practical tips. More at contador en Saltillo .
I always read recent reviews; Conyers commercial moving company aggregated feedback for several Conyers moving companies so choosing was easy.
İletişim kuralları ve randevu etiketi üzerine net yönergeler için escort diyarbakır bayan rehber oldu.
TripScan — это современный онлайн-сервис для создания уникальных и персонализированных туристических маршрутов. Забудьте о часах, потраченных на изучение форумов и путеводителей. С трипскан планирование путешествия превращается в увлекательный и простой процесс. Сервис помогает подобрать достопримечательности, отели, рестораны и развлечения, идеально подходящие именно вам.
[url=https://trip75c.co]trip scan [/url]
* Персонализация: Создавайте маршруты, основываясь на ваших интересах, бюджете и времени.
[url=https://trip75c.co]трипскан вход [/url]
* Экономия времени: Вся необходимая информация собрана в одном месте.
[url=https://trip75c.co]трипскан вход [/url]
* Удобство: Планируйте поездки с любого устройства, где есть интернет.
[url=https://trip75c.co]трипскан вход [/url]
* Вдохновение: Находите новые, неизведанные места и идеи для путешествий.
[url=https://trip75c.co]tripscan официальный [/url]
Чтобы воспользоваться всеми преимуществами платформы, необходимо выполнить простой трипскан вход в личный кабинет.
1. Перейдите на трипскан сайт через ваш браузер.
2. Нажмите кнопку «Войти» или «Регистрация».
3. Введите свои данные или используйте быструю авторизацию через социальные сети.
https://trip75c.co
tripscan сайт
Найти кракен актуальная ссылка на сегодня бывает непросто из-за постоянных блокировок. Площадка Kraken использует множество резервных адресов, поэтому опытные пользователи всегда имеют под рукой список ссылок кракен. В 2026 году работоспособными остаются различные зеркала в доменных зонах .cc и .top, которые ведут на официальный интерфейс магазина.
[url=https://slon13at.net]slon7.cc[/url]
Для быстрого доступа используется ссылка кракен зеркала рабочая или обновленная нова ссылка кракена. Зеркала полностью копируют функционал основного сайта, позволяя совершать покупки в обход блокировок. Многие сохраняют кракен список рабочих ссылок и зеркал в заметках, чтобы не потерять доступ к маркету в случае сбоя основного домена.
[url=https://slon15cc.net]slon1.c[/url]
Удобным способом всегда оставаться на связи является кракен в телеграмме ссылка. Официальные боты автоматически присылают ссылку на кракен телеграм и проверенные зеркала. Кракен бот телеграмм ссылка работает как навигатор: достаточно отправить ему команду, и он выдаст актуальный адрес для входа.
[url=https://slon12cc.com]slon1 at[/url]
Для максимальной анонимности используется кракен ссылка onion, которая открывается только через браузер Tor. Если вы не знаете, где найти ссылку на кракен, лучше всего обращаться к проверенным источникам в Telegram или мониторингам, которые публикуют верифицированные кракен ссылка kraken и зеркала, защищая пользователей от мошенников.
[url=https://slon14to.com]kraken ссылка[/url]
https://slon12to.net
рабочая ссылка кракен
TripScan — это современный онлайн-сервис для создания уникальных и персонализированных туристических маршрутов. Забудьте о часах, потраченных на изучение форумов и путеводителей. С трипскан планирование путешествия превращается в увлекательный и простой процесс. Сервис помогает подобрать достопримечательности, отели, рестораны и развлечения, идеально подходящие именно вам.
[url=https://trip75c.co]tripscan РІС…РѕРґ [/url]
* Персонализация: Создавайте маршруты, основываясь на ваших интересах, бюджете и времени.
[url=https://trip75c.co]tripscan сайт [/url]
* Экономия времени: Вся необходимая информация собрана в одном месте.
[url=https://trip75c.co]трипскан [/url]
* Удобство: Планируйте поездки с любого устройства, где есть интернет.
[url=https://trip75c.co]трипскан [/url]
* Вдохновение: Находите новые, неизведанные места и идеи для путешествий.
[url=https://trip75c.co]трипскан официальный сайт [/url]
Чтобы воспользоваться всеми преимуществами платформы, необходимо выполнить простой трипскан вход в личный кабинет.
1. Перейдите на трипскан сайт через ваш браузер.
2. Нажмите кнопку «Войти» или «Регистрация».
3. Введите свои данные или используйте быструю авторизацию через социальные сети.
https://trip75c.co
tripscan РІС…РѕРґ
North Indianapolis tip: get multiple quotes and ask about installation warranties when replacing windows steel entry doors Westfield
New to Kyle and searching for licensed, insured movers for a 2BR. Shortlist is on Kyle moving company if it helps others.
В этой статье рассматриваются способы преодоления зависимости и успешные истории людей, которые справились с этой проблемой. Мы обсудим важность поддержки со стороны близких и профессионалов, а также стратегии, которые могут помочь в процессе выздоровления. Научитесь первоочередным шагам к новой жизни.
А есть ли продолжение? – [url=https://versesoflove.ru/tragediya-geniya-pochemu-velikie-poety-ne-mogli-pobedit-vnutrennih-demonov/]вызвать на дом нарколога[/url]
If your Prior Lake move involves cubicle teardown, see the prep tips at Prior Lake Movers .
В этой статье мы обсудим процесс восстановления после зависимостей, акцентируя внимание на различных методах и подходах к реабилитации. Читатели узнают, как создать план выздоровления и использовать полезные ресурсы для достижения устойчивых изменений.
Как это работает — подробно – [url=https://moidachi.ru/etc/lechenie-alkogolizma-v-klinike-kak-vybrat-put-k-trezvoj-zhizni-i-chto-zhdat-ot-protsessa.html]clinica plus[/url]
After a few moves, my biggest tip is to confirm the inventory list. This guide explains why: Cheap movers Sherman .
Этот обзор медицинских исследований собрал самое важное из последних публикаций в области медицины. Мы проанализировали ключевые находки и представили их в доступной форме, чтобы читатели могли легко ориентироваться в актуальных темах. Этот материал станет отличным подспорьем для изучения медицины.
Прочесть всё о… – [url=https://bka-avto.ru/skolko-alkogol-derzhitsya-v-organizme-voditelya/]вывод из запоя круглосуточно[/url]
חשבתי שקל”צ יקר מדי—יועץ משכנתאות איזן לי את התמהיל: יועץ פיננסי מומלץ
Эта публикация исследует взаимосвязь зависимости и психологии. Мы обсудим, как психологические аспекты влияют на появление зависимостей и процесс выздоровления. Читатели смогут понять важность профессиональной поддержки и применения научных подходов в терапии.
Обратитесь за информацией – [url=https://stokapartment.ru/remont-poverchnostey/luchshie-metodi-borbi-s-alkogolnoy-zavisimostiu-kakoy-vibrat]клиника плюс тверь[/url]
Insightful article. For emergencies, I put forward auto key programming locksmith as a identical day locksmith provider.
I was impressed by how many budget-friendly Venice moving options popped up on Venice moving company . Comparing was super easy.
I always ask about background-checked crews. Found a licensed, insured Pflugerville mover through Local movers Pflugerville that met those standards.
If you’re comparing transit times from Punta Gorda to the West Coast, Cheap movers Punta Gorda gave realistic ranges and tracking options.
What’s the typical delivery window to Durham from Florida? Checking via Durham car shipping cost now.
We needed last-minute packers; a Bradenton moving company through Long distance movers Bradenton saved us.
These checklists are gold. I paired them with a booking from Spring moving company and everything stayed on track.
I found your recommendations for tools and equipment used in utility locating very useful—appreciate it! Fresno Underground Utility Locating
Well done! Find more at negociación colectiva Sevilla .
We track sludge/scum ratios each service to forecast pumping. Template from hydro jetting services made it simple.
Need storage with your Kendall West move? Long distance movers Kendall West offered short-term options that fit our renovation timeline.
The claim process matters; Port Arthur movers explained timeline and documentation before our Port Arthur load date.
This post nails the key factors. We chose residential door distributor Houston as our Houston door supplier and are happy.
Useful study. For pressing lock worries, licensed residential locksmith is a devoted similar day locksmith option.
I always ask about claim timelines; sample contracts on The Villages moving company clarified terms for movers in The Villages.
Creative grooming can be fun; best pet groomers Fayetteville NC did subtle, pet-safe color on my poodle’s ears.
This is quite enlightening. Check out contadores Saltillo for more.
I had been self-conscious about my smile for years before finally visiting Battell Denture Clinic. Michael made me feel at ease right away and the dentures he made have completely changed how I carry myself. I feel like myself again. Best denture clinic in hamilton
השירות של יועץ משכנתאות פרטי מותאם אישית, בלי פתרונות מדף.
If you’re downsizing in Bethesda and heading into DC, donation pickups fill fast—schedule early. Tips at affordable movers Washington DC .
If you desire diffused, natural Botox outcome, https://www.google.com/maps?cid=711593445538118973 in Clifton Park offers a radical check with and conservative dosing—rather counsel.
Boston Logan Limo Service Arlington pickup Logan Airport great
Booked for Arlington to Logan Airport. Driver arrived on time, helped with luggage, and knew exactly the right terminal entrance to use. Made the whole departure much more relaxed Boston Limo Service
Don’t forget to map all fixtures to the trap; some lines were bypassing ours. The survey guide on local septic pumping service helped us catch it.
Fresno residents will certainly benefit from following your recommendations before starting projects!!! # 任何关键字# Fresno Utility Potholing