另一个进程和线程问题

时间:2011-06-04 04:02:13

标签: c linux pthreads

此问题与Many processes executed by one threadSocket server or file server implementation using multiple threads: concept not clear有关。

我仍然不清楚一些事情。现在,套接字服务器或文件服务器的客户端和服务器不需要在不同的机器中(当然也可以)。

服务器接收的请求来自不同的PROCESSES,但它们由线程处理(比如每个进程一个),并且这些任务线程属于不同的进程(服务器进程)。我感到困惑的是,如何通过单个进程的线程处理来自不同进程的调用,并且这些线程使用“共享内存”架构进行通信,这种架构非常“线程”,与“PROCESSES”非常不同

由于

1 个答案:

答案 0 :(得分:2)

一些简单的基础工作。您的服务器进程包含一个或多个线程来处理来自任意数量的客户端进程的请求。客户端和服务器可以位于相同或不同的计算机上。客户端和服务器通过套接字“连接”,套接字用于将请求从客户端发送到服务器。一旦处理完请求,将使用相同的套接字向客户端提供响应。每个客户端都有一个与服务器的唯一连接。

如上所述,有许多方法可以实现服务器。一种可能性是服务器有一个线程使用select()处理套接字。让我们称之为主线程。服务器进程还将有几个线程负责处理请求和响应客户端。让我们调用这些工作线程。

当主线程从其客户端的一个套接字收到消息时,主线程将接受此请求并将其交给其中一个工作线程进行处理。工作线程将接受该请求并处理它,然后使用原始套接字进行响应。

此服务器模型使用生产者/消费者模型,其中主线程是生产者(因为它从套接字获取请求并生成需要处理的工作),而消费者是工作线程。

实现这种类型的服务器存在一些挑战,所有这些都在各种数据结构和算法文本中进行了记录和讨论,其中最重要的是:

  • 主线程和工作线程如何通信?
  • 如何保护各个线程共享的数据不被同时修改?
  • 如何选择哪个工作线程应处理请求?

我希望这会有所帮助。