1. 探究printf的现象
我们分别在windows系统和linux系统上使用代码做以下操作:
输出"HelloWorld"十次,每次输出后暂停500毫秒。
1.1 windows系统上的代码
// windows系统
#include <stdio.h>
#include <windows.h>
int main()
{
for (int i = 0; i < 10; i++)
{
printf("Hello World %d", i);
Sleep(500); // 使用Sleep函数休眠500毫秒
}
return 0;
}
在windows系统上,我们使用windows.h
头文件中提供的Sleep
函数,每次输出后休眠500毫秒。
1.2 linux系统上的代码
// linux系统
#include <stdio.h>
#include <unistd.h>
int main()
{
for(int i = 0; i < 10; i++)
{
printf("Hello World %d", i);
usleep(1000 * 500); // 使用usleep函数休眠500毫秒
}
return 0;
}
在linux系统上,我们使用unistd.h
头文件中提供的usleep
函数,每次输出后休眠500毫秒。usleep
的单位为1微秒,1000微秒为1毫秒。代码中给usleep
传入1000
* 500,表示500毫秒。
两份代码除了休眠使用的函数不同,其他都是一致的,按理说效果也应当一致。我们来看看运行后的具体情况。
1.3 windows系统上的表现
windows系统上打印出一个HelloWorld
后,休眠500毫秒,再打印下一个。
1.4 linux系统上的表现
linux系统上,休眠5000毫秒,打印出所有HelloWorld
。
为了解释这个现象我们来学习一下输入与输出缓存。
2. 输入输出缓存区
举一个常见的例子,生活中我们往往会将衣服集满了一桶再洗,而不是只有一两件脏衣服也启动洗衣机导致浪费水电资源。
计算机中也有类似的思想,减少不必要的操作开销。