我正在编写客户端和服务器程序来演示客户端和服务器进程之间的IPC。例如,客户端线程可以向服务器发送数据(在这种情况下使用System V共享内存段完成)。创建共享内存段的选择是:system v和posix共享内存命令。
在我们到目前为止创建的设置中,客户端只向服务器发送一个请求,服务器将计算值返回给客户端。但是,我想模拟从客户端创建多个请求,因此想要生成多个线程,每个线程创建一个共享内存段,服务器访问并存储该值。
回到主要问题,快速搜索如何在linux环境中使用线程link(Ubuntu 16.04 Kernel:4.13.0-36-generic)表明我们可以使用pthreads。使用pthreads(代表POSIX线程)会以任何方式影响内存段的使用吗?我应该注意哪些不兼容性?
编辑:问题不在于如何设计这样的系统,而是要了解更多关于启动内存段的线程安全性。这两段描述是为了给出一些问题的背景。
答案 0 :(得分:0)
此处必须注意不要将进程内通信(IPC)与进程间通信混淆。 SysV和Posix共享内存是指前者(进程之间的通信),Posix Threads处理后者(使用多个线程的进程内的通信/同步)。
也就是说,假设您的客户端和服务器是单独的进程(不是进程中的线程),使用posix-threads为您的服务器处理多个是合理的请求一次,但使用IPC在客户端和服务器之间来回传递请求和响应。
在不了解有关您的问题的更多详细信息的情况下,处理此问题的第一种方法是创建一个线程池,其中每个线程负责来自单个客户端的处理。单个服务器线程可以负责服务所有客户端请求,将它们卸载到单个工作线程以进行处理,然后再检索答案以发送回客户端。这种方法很好地将IPC工作与多线程处理分开。