Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 另一个进程和线程问题_C_Linux_Pthreads - Fatal编程技术网

C 另一个进程和线程问题

C 另一个进程和线程问题,c,linux,pthreads,C,Linux,Pthreads,这个问题与和有关 有几件事我还不清楚。现在,套接字服务器或文件服务器的客户机和服务器不需要位于不同的机器中(当然也可以) 服务器接收的请求来自不同的进程,但它们是由线程处理的(比如说每个进程一个),这些任务线程属于不同的进程(服务器进程)。我感到困惑的是,来自不同进程的调用如何由单个进程的线程处理,而这些线程如何使用“共享内存”体系结构进行通信,这种体系结构是如此“线程”,与“进程”非常不同 感谢一些简单的基础工作。您的服务器进程包含一个或多个线程,用于处理来自任意数量客户端进程的请求。客户端和

这个问题与和有关

有几件事我还不清楚。现在,套接字服务器或文件服务器的客户机和服务器不需要位于不同的机器中(当然也可以)

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


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

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

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

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

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

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

我希望这能有所帮助。

@Lou…谢谢你。这绝对有帮助。如果您能在以下方面帮助我,我将不胜感激:假设我有一个主线程a正在侦听来自诸如open()、read()、write()等应用程序进程的文件系统调用等等。A检查调用进程id,并将处理系统调用的任务分配给一个工作线程。现在,我对原始的glibc系统调用进行了包装,并添加了一些我自己的。现在,主线程A应该在哪里侦听系统调用?@Juggler。。。听起来你说的是内核线程。我这样说的原因是,处理通过套接字传入的来自其客户机的请求的服务器不知道(也不关心)客户机的pid是什么。请澄清。