为什么进程通信效率要大于线程通信
今天学习时做了下面的memo,特此做个记录
进程通信
/*
* ***为了测试进程间的通信***
* 先声明一个全局变量,然后创建一个子进程
* 在父进程中改变这个全局变量,但是在子进程是发现这个全局变量并没有改变
* 说明:进程间通信相当于两个编译链接的可运行程序 (a.out 和 b.out)
* 间接说明进程切换系统开销大(要保存上下文),通信效率低
*/
int env = 3;
int main(void)
{
// 创建子进程
int ret = -1;
ret = fork();
if(ret == 0)
{
// 子进程
sleep(2);
printf("env2 = %d.\n", env);
}
else if(ret > 0)
{
// 父进程
printf("env1 = %d.\n", env);
env = 5;
}
else
{
perror("fork error\n");
return -1;
}
return 0;
}
线程通信
/*
* ***为了测试线程间的通信***
* 先声明一个全局变量,然后创建一个子线程
* 在主进程中改变这个全局变量,然后在子线程这个全局变量被改变了
* 说明:线程间通信相当于一个程序中的两个函数
* 间接说明线程切换效率高
*/
int env = 3;
void *threadfunc(void *arg)
{
printf("env2 = %d.\n", env);
env = 10;
}
int main(void)
{
// 创建子进程
int ret = -1;
pthread_t pth = -1;
ret = pthread_create(&pth, NULL, threadfunc, NULL);
if(ret != 0)
{
printf("pthread create error.\n");
return -1;
}
printf("env1 = %d.\n", env);
env = 5;
sleep(1);
return 0;
}