现代操作系统提供了三种基本的构造并发程序的方法:
一个构造并发服务器的自然方法就是,在父进程中接受客户端连接请求,然后创建一个新的子进程来为每个新客户端提供服务。
有几点重要内容需要说明:
**优点:**进程有一个非常清晰的模型:共享文件表,但是不共享用户地址空间。
缺点:IPC通信开销高
基本的思 路就是使用 select 函数,要求内核挂起进程,只有在一个或多个 I/O 事件发生后,才将 控制返回给应用程序
具体实现:
while (1){
ready.set = read_set;
Select(listenfd+1, &ready_set, NULL, NULL, NULL);
if (FD_ISSET(STDIN_FILENO, feready.set))
command(); /* Read command line from stdin */
if (FD_ISSET(listenfd, &ready_set)) -C
clientlen = sizeof(struct sockaddr_storage);
connfd = Accept(listenfd, (SA *)&clientaddr, feclientlen);
echo(connfd); /* Echo client input until EOF */
Close(connfd);
}
}
**优点:**事件驱动常常比基于进程要高效得多,因为它们不需要进程上下文切换来调度新的流。
**缺点:**事件驱动设计一个明显的缺点就是编码复杂