具有代表性的并发服务器端实现模型和发:

1、多进程服务器:通过创建多个进程提供服务。

2、多路复用服务器:通过捆绑并统一管理I/O对象提供服务。

3、多线程服务器:通过生成与客户端等量的线程提供服务。

 

进程:“占用内存空间的正在运行的程序”。

从操作系统的角度看,进程是程序流的基本单位,若创建多个进程,则操作系统将同时运行。有时一个程序运行过程中也会产生对个进程。接下来要创建的多进程服务器就是其中的代表。编写服务器端前,先了解一下通过程序创建进程的方法。

1、进程ID

无论进程是如何创建的,所有进程都会从操作系统分配到ID,此ID称为“进程ID”,其值是大于2的整数,1要分配给操作系统启动后的首个进程。

通过命令ps au 查看进程信息

多进程服务器端

 

2、通过调用fork函数创建进程

创建进程的方法有很多,下面介绍用于创建多进程服务器端的fork函数

#include <unistd.h>
/* Clone the calling process, creating an exact copy.
   Return -1 for errors, 0 to the new process,
   and the process ID of the new process to the old process.  */
extern __pid_t fork (void) __THROWNL;

成功时返回进程ID,失败时返回-1。for函数将创建调用的进程副本,复制正在运行的,调用fork函数的进程。两个进程都将执行fork函数调用后的语句。但由于通过同一个进程、复制相同的内存空间,之后的程序流要根据fork函数的返回值加以区分。

父进程:fork函数返回子进程ID

子进程:fork函数返回0

以时间代码为例

 1 #include <stdio.h>
 2 #include <unistd.h>
 3 
 4 int gval = 10;
 5 int main(int argc, char *argv[]) {
 6     pid_t pid;
 7     int lval = 20;
 8     gval ++, lval += 5;
 9 
10     pid = fork();
11     if(pid == 0)
12         gval += 2, lval += 2;
13     else
14         gval -= 2, lval -= 2;
15     if(pid == 0)
16         printf("Child Proc: [%d, %d] \n",gval, lval);
17     else
18         printf("Parent Proc: [%d, %d] \n",gval, lval);
19     return 0;
20 }
View Code

相关文章:

  • 2021-11-17
  • 2021-07-19
  • 2021-05-31
  • 2022-12-23
  • 2021-11-16
  • 2022-01-17
  • 2022-12-23
猜你喜欢
  • 2021-08-31
  • 2021-11-01
  • 2021-07-26
  • 2022-12-23
  • 2021-08-02
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案