讨论:GetProcessIoCounters中的IO到底指的是什么IO

沙老师 沙老师 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在做一个应用程序性能测量的程序,用到了这个函数,令人诧异的是,GOOGLE搜了个底朝天,根本没有关于其IO到底什么含义的详细解释,只有少数地方含糊地提到包含文件、网络等IO,无奈只得自己做实验,写了如下测试程序:


#include <windows.h>
#include <stdio.h>
#include <process.h>

void printIoDelta() {
static DWORD lastTickCount;
static IO_COUNTERS lastIoCounters;
DWORD tickCount;
IO_COUNTERS ioCounters;
static int firstTime = 1;

tickCount = GetTickCount();
if (!GetProcessIoCounters(GetCurrentProcess(), &ioCounters)) {
return;
}

if (firstTime) {
firstTime = 0;
printf(" Time Read Write Other Read(Bytes) Write(Bytes) Other(Bytes)\n");
printf("--------------------------------------------------------------------------------\n");
} else {
printf("%8lu%8llu%8llu%8llu%16llu%16llu%16llu\n",
tickCount - lastTickCount,
ioCounters.ReadOperationCount - lastIoCounters.ReadOperationCount,
ioCounters.WriteOperationCount - lastIoCounters.WriteOperationCount,
ioCounters.OtherOperationCount - lastIoCounters.OtherOperationCount,
ioCounters.ReadTransferCount - lastIoCounters.ReadTransferCount,
ioCounters.WriteTransferCount - lastIoCounters.WriteTransferCount,
ioCounters.OtherTransferCount - lastIoCounters.OtherTransferCount
);
}

lastTickCount = tickCount;
memcpy(&lastIoCounters, &ioCounters, sizeof(IO_COUNTERS));
}

void workerThread(void * dummy) {
int i;
FILE * fp;
char buff[500000];
WSADATA wsaData;
SOCKET s;
struct sockaddr_in localAddr;
struct sockaddr_in peerAddr;

memset(buff, 'X', sizeof(buff));

Sleep(2000);

// 写文件
fp = fopen("io.txt", "w");
if (fp) {
printf("fwrite = %d\n", fwrite(buff, 1, sizeof(buff), fp));
Sleep(10000);
// 关闭文件,测试Flush
printf("fclose\n");
fclose(fp);
Sleep(2000);
}

// 读文件
fp = fopen("io.txt", "r");
if (fp) {
printf("fread = %d\n", fread(buff, 1, sizeof(buff), fp));
fclose(fp);
Sleep(2000);
}

// 网络发

memset((void *)&localAddr, 0, sizeof(localAddr));
localAddr.sin_family = AF_INET;
localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
localAddr.sin_port = htons(0);
memset((void *)&peerAddr, 0, sizeof(peerAddr));
peerAddr.sin_family = AF_INET;
peerAddr.sin_addr.s_addr = inet_addr("10.65.19.7");
peerAddr.sin_port = htons(3389);

printf("WSAStartup\n");
WSAStartup(MAKEWORD(2, 2), &wsaData);
Sleep(2000);

// UDP
printf("socket\n");
s = socket(AF_INET, SOCK_DGRAM, 0);
Sleep(2000);

printf("bind\n");
bind(s, (struct sockaddr *)&localAddr, sizeof(localAddr));
Sleep(2000);
for (i = 0; i < 20; i++) {
printf("sendto = %d\n", sendto(s, buff, i * 100, 0, (SOCKADDR *) &peerAddr, sizeof(peerAddr)));
Sleep(2000);
}
printf("closesocket\n");
closesocket(s);
Sleep(2000);

// TCP
printf("socket\n");
s = socket(AF_INET, SOCK_STREAM, 0);
Sleep(2000);

printf("bind\n");
bind(s, (struct sockaddr *)&localAddr, sizeof(localAddr));
Sleep(2000);

printf("connect\n");
connect(s, (SOCKADDR *) &peerAddr, sizeof(peerAddr));
Sleep(2000);

printf("send = %d\n", send(s, buff, sizeof(buff), 0));
Sleep(2000);

printf("closesocket\n");
closesocket(s);
Sleep(2000);

printf("WSACleanup\n");
WSACleanup();
}

int main(int argc, char ** argv) {
// 启动工作线程
_beginthread(workerThread, 0, 0);

printf("Ctrl-C to exit\n\n");
for (;;) {
printIoDelta();
Sleep(1000);
}
return 0;
}


其原理是在主线程中每隔1秒输出GetProcessIoCounters获取的6和数值相对于上1秒的差值,然后在工作线程中文件读写、TCP和UDP的发送操作。
...全文

相关推荐

29Linux基础命令详解——用户管理.docx

29Linux基础命令详解——用户管理

云计算练习生

科技服务机构如何通过数据分析增强服务竞争力?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

vue+springboot基于 Java 的南昌实利广告公司的员工管理系统的设计与实现_oj680rl3毕业设计源码数据库.zip

vue+springboot基于 Java 的南昌实利广告公司的员工管理系统的设计与实现_oj680rl3毕业设计源码数据库.zip

源码论文专家

车辆缺陷分割数据集4000张json格式.zip

数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):4000 标注数量(json文件个数):4000 标注类别数:1 标注类别名称:["defect"] 每个类别标注的框数: defect count = 8740 总框数:8740 使用标注工具:labelme=5.5.0 所在仓库:firc-dataset 图片分辨率:640x640 标注规则:对类别进行画多边形框polygon 重要说明:可以将数据集用labelme打开编辑,json数据集需自己转成mask或者yolo格式或者coco格式作语义分割或者实例分割 特别声明:本数据集不对训练的模型或者权重文件精度作任何保证

不会仰游的河马君

高校如何利用技术转移服务转化科研成果并提升影响力?.docx

高校如何利用技术转移服务转化科研成果并提升影响力?

BIZKEEN
评论 14
收藏 已收藏
分享
返回顶部
沙老师
网络编程 18,356 成员 64,161 内容