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
}
mostbet depozyt visa [url=http://mostbet2001.help/]http://mostbet2001.help/[/url]
On benefactor administration: reducing desire intervals injure our oocyte yield. We returned to a 2-week rhythm after checking out the information summaries at commercial cattle genetics programs .
I just could not go away your website before suggesting that
I extremely enjoyed the standard information an individual supply to your visitors?
Is gonna be back steadily to investigate cross-check new posts
Look at my site … bingo sunshine north (https://Goplayslots.net/)
Процесс проведения капельницы от похмелья обычно включает в себя несколько ключевых этапов. Несмотря на простоту процедуры, важно, чтобы её проводил квалифицированный специалист. Каждый этап — от консультации до завершения процедуры — направлен на безопасность пациента и максимальную эффективность лечения.
Изучить вопрос глубже – [url=https://kapelnicza-ot-pokhmelya-samara-6.ru/]капельница от похмелья на дому самара[/url]
Для жителей Екатеринбурга наркологическая клиника «Частный медик 24» предлагает платную услугу выезда врача на дом для проведения капельницы от похмелья. Когда человек переживает сильные симптомы похмелья, такие как головная боль, тошнота, слабость, важно не тянуть с лечением и начать восстановление как можно скорее. Капельница от похмелья помогает хорошо облегчить самочувствие пациента, снять головную боль и улучшить общее состояние, восстановив водно-электролитный баланс в организме.
Подробнее можно узнать тут – [url=https://kapelnicza-ot-pokhmelya-ekaterinburg-4.ru/]капельница от похмелья екатеринбург[/url]
Retin-a gel at acnemedsrx
Their response time is splendid! Thanks to locksmith Orlando for buying me again into my home so shortly.
После введения растворов активные вещества быстро распределяются по организму. Это способствует выведению продуктов распада алкоголя, улучшению работы нервной системы и восстановлению энергетического баланса. Уже в процессе инфузии уменьшаются головная боль, тошнота и слабость.
Ознакомиться с деталями – [url=https://kapelnicza-ot-pokhmelya-samara-8.ru/]капельница от похмелья на дом[/url]
Mixed-use around the Medical District could reduce car dependence. I shared parking-lite design standards at housing development near me .
Капельница от похмелья с медицинским контролем представляет собой комплексную терапию, которая включает в себя различные препараты, направленные на быстрое восстановление организма. Каждый элемент процедуры подобран с учётом состояния пациента, что позволяет обеспечить максимальную эффективность лечения и минимизировать возможные риски.
Изучить вопрос глубже – [url=https://kapelnicza-ot-pokhmelya-nizhnij-novgorod-1.ru/]капельница от похмелья цена[/url]
Noise and dust control during the build matter to neighbors. Site management tips at housing development near me .
Капельница от похмелья — это медицинская процедура, направленная на быстрое устранение симптомов алкогольной интоксикации и восстановление нормальной работы организма. При выраженном похмельном синдроме самостоятельные методы часто оказываются недостаточными, поскольку не воздействуют на причины состояния. В наркологической клинике «Похмельная служба» используется инфузионная терапия с круглосуточным выездом специалиста, что позволяет начать лечение сразу после обращения.
Изучить вопрос глубже – [url=https://kapelnicza-ot-pokhmelya-voronezh-7.ru/]капельница от похмелья на дом воронеж[/url]
I found out to investigate the antique oil for fuel odor from a instruction on emergency brake repair Greensboro .
mostbet link [url=www.mostbet57648.help]www.mostbet57648.help[/url]
yesterday horse racing fast results greyhound racing – Vanessa
– and non runners
My Albany delivery driver did a thorough inspection; I set it all up through Albany car transportation services .
My hybrid move (I packed, they loaded) stayed cheap thanks to Office moving companies Grand Rapids .
Когда человек сталкивается с симптомами похмелья, такие как головная боль, тошнота, слабость, головокружение, важно быстро принять меры, чтобы предотвратить развитие более серьёзных проблем. Капельница от похмелья помогает в этом, выводя токсины из организма, восстанавливая нормальное функционирование внутренних органов и возвращая пациента к нормальной жизни. Важно, что мы обеспечиваем полную анонимность на всех этапах лечения, что особенно важно для тех, кто не хочет, чтобы его зависимость стала известна.
Получить дополнительные сведения – [url=https://kapelnicza-ot-pokhmelya-ekaterinburg-6.ru/]капельница от похмелья цена в екатеринбурге[/url]
Во всех этих случаях врач нужен не только для облегчения симптомов. Его задача — понять, можно ли ограничиться домашней терапией или уже сейчас необходимо менять маршрут лечения. Именно этот этап и делает домашний выезд профессиональной услугой, а не упрощённой заменой клиники.
Получить больше информации – [url=https://narkolog-na-dom-voronezh-3.ru/]запой нарколог на дом в воронеже[/url]
mostbet kosár meccsek [url=http://mostbet2025.help]http://mostbet2025.help[/url]
Капельница от похмелья — это медицинская процедура, направленная на устранение последствий алкогольной интоксикации и восстановление работы организма. В отличие от домашних методов, инфузионная терапия позволяет воздействовать на причину состояния, а не только на его проявления. В наркологической клинике «Похмельная служба» капельная терапия проводится с выездом специалиста на дом, что позволяет начать лечение без задержек и в комфортных условиях.
Разобраться лучше – [url=https://kapelnicza-ot-pokhmelya-voronezh-5.ru/]капельница от похмелья на дому воронеж[/url]
mostbet bezpečnost cz [url=http://mostbet2020.help/]http://mostbet2020.help/[/url]
Выезд нарколога на дом в Самаре представляет собой структурированный медицинский процесс, направленный на быстрое облегчение состояния пациента и устранение последствий интоксикации. Все этапы оказания помощи проводятся с учетом клинической картины, длительности употребления и индивидуальных особенностей организма. В случае алкоголизма могут быть предложены процедуры кодирования, а также вывод из состояния запоя. При необходимости подключается психиатр для дополнительной оценки и лечения.
Получить дополнительную информацию – [url=https://narkolog-na-dom-samara-6.ru/]врач нарколог на дом[/url]
Капельница от похмелья с контролем врача в Самаре представляет собой эффективную терапевтическую процедуру, позволяющую значительно улучшить самочувствие пациента за короткий срок. Врач, контролируя весь процесс, может точно определить, какие компоненты необходимы для каждого пациента. Состав капельницы зависит от симптомов похмелья, состояния пациента и его индивидуальных потребностей. Это позволяет обеспечить максимально безопасное и эффективное лечение, которое помогает организму быстро восстановиться.
Получить дополнительные сведения – [url=https://kapelnicza-ot-pokhmelya-samara-13.ru/]капельница от похмелья вызов на дом в самаре[/url]
Parking minimums should be balanced with good transit access. Policy insights at housing development West Lafayette .
Thanks for the tips on packing TVs; booked white-glove service I discovered on Peoria Mover’s Ultra Works for my Peoria move.
Ребят, хай! На днях наткнулся на обсуждение старых хитов и вспомнил про одну крутую вещь.
Вообще сейчас мало что нормального выходит, а тут как раз выложили рабочую версию с нормальной оптимизацией. Даже на моем старом ноуте фпс стабильный. Круто, что в этой версии все баги пофикшены.
Если кому тоже приспичило поиграть, полный обзор и файлы нашел на этом ресурсе: [url=https://x.com/SupremeGamesRU/status/2045255134356148398]Twitter[/url] . Админам респект за годный контент.
If you’re in Orlando and need an emergency locksmith, don’t hesitate to achieve out to locksmith in Orlando Florida ! They’re extremely good.
betting odds explained horse racing
My homepage https://horse-betting.Com/
For niche brands and parts in Feasterville, a Plumber Feasterville from plumber feasterville sourced everything quickly.
I’ve been trying to find the very best Gutters replacement company near me and kept discovering multiple exceptional reviews about A+ Gutters for Jacksonville gutters
I have actually been searching for a top rated Realtor near me in St Augustine and Shelby Hodges Group undoubtedly stands apart in St Augustine. Their regional competence, responsiveness, and performance history made my home search so much smoother realtor near me
Выезд нарколога на дом в Самаре организован так, чтобы пациент получил помощь без ожидания и без лишней нагрузки на организм. После обращения специалист приезжает по указанному адресу, проводит первичный осмотр, оценивает общее состояние, уровень интоксикации, показатели давления, пульса, дыхания и собирает краткий анамнез. На основании этой оценки врач определяет, можно ли безопасно оказывать помощь на дому, и подбирает подходящую схему лечения, включая возможное кодирование или вывод из алкоголизма. Такой формат позволяет начать медицинские мероприятия сразу после осмотра и быстро перейти к стабилизации состояния.
Подробнее – [url=https://narkolog-na-dom-samara-5.ru/]вызвать нарколога на дом[/url]
Ground-fault protection for kitchens is changing—great update. I track revisions on licensed electrician in Irving .
Для жителей Самары выезд нарколога на дом — это удобный и быстрый способ получить неотложную помощь при алкогольной или наркотической зависимости. Когда состояние пациента ухудшается и он не может самостоятельно обратиться за помощью, нарколог на дом становится единственным правильным решением. Важно понимать, что симптоматика абстиненции может развиваться стремительно, и чем быстрее будет оказана помощь, тем меньше рисков для здоровья пациента.
Получить дополнительные сведения – [url=https://narkolog-na-dom-samara-1.ru/]нарколог на дом вывод в самаре[/url]
mostbet bonus code [url=https://www.mostbet57648.help]https://www.mostbet57648.help[/url]
The thermostat wiring guide was concise; cross-checked color codes on residential electrician in Baton Rouge .
Перед постановкой капельницы специалист оценивает общее состояние пациента, измеряет давление, пульс, уточняет анамнез и возможные противопоказания. На основании этих данных формируется индивидуальный состав, который обеспечивает не только устранение симптомов похмелья, но и безопасное восстановление организма.
Ознакомиться с деталями – [url=https://kapelnicza-ot-pokhmelya-samara-7.ru/]капельница от похмелья самара[/url]
mostbet promo code [url=https://mostbet2025.help/]mostbet promo code[/url]
hogyan lehet kapcsolatba lépni a mostbet ügyfélszolgálattal [url=https://www.mostbet2025.help]https://www.mostbet2025.help[/url]
мелбет фора ставки [url=https://melbet16740.help]https://melbet16740.help[/url]
mostbet casino slots [url=http://mostbet2020.help]http://mostbet2020.help[/url]
mostbet problém s vkladem [url=http://mostbet2020.help/]http://mostbet2020.help/[/url]
Is there a surcharge for picking up in downtown Detroit parking garages? Wondering how Detroit car transport handles access.
мостбет вывод узбекистан [url=https://mostbet26849.help]https://mostbet26849.help[/url]
I have actually been searching for a trustworthy St Augustine real estate agent and Shelby Hodges Group hands down sticks out in St Augustine real estate agent near me
aviator mostbet strategia [url=www.mostbet2001.help]www.mostbet2001.help[/url]
Quality solution every single time with Pure Energy Electrical Services! They’re most certainly the best electrician near me in St Augustine.
electrician
The section on load balancing was gold—hire a pro via local commercial electrician Plano .
mostbet fără verificare e-mail [url=http://mostbet57648.help/]http://mostbet57648.help/[/url]