论述题 2.  在MMO游戏中,服务器采用Linux操作系统,网络通信与游戏逻辑处理进程一般是分离的。例如,GameSvr进程处理游戏逻辑,TCPSvr进程处理网络通信。Linux操作系统提供了很多机制可以实现GameSvr和TCPSvr进程之间的数据通信。请列出两种你认为最好的机制,并为主(最好)次(次佳)描述它们实现的框架、优缺点对比和应用中的注意事项。
【正确答案】系统进程之间通信的主要方法有信号、信号量、管道、消息和共享内存。信号量和信号主要用于触发,而不是用于传递数据。所以,数据通信的主要方法是管道、消息和共享内存,以下将分别对这些方式进行具体分析。
   (1)管道
   管道是由内核管理的一个环形缓冲区,类似于放入内存中的一个纸条,它允许两个进程以生产者/消费者的模型进行通信。如图所示,当两个进程利用管道文件进行通信时,一个进程为写进程,另一个进程为读进程,写进程通过写端(发送端)往管道文件中写入信息,读进程通过读端(接收端)从管道文件中读取信息,两个进程协调不断地进行写、读,便会构成双方通过管道传递信息的流水线。当管道中没有信息时,从管道中读取的进程会等待,直到另一端的进程放入信息。当管道被放满信息时,尝试放入信息的进程会等待,直到另一端的进程取出信息。当两个进程都终结的时候,管道也自动消失。
   
【答案解析】