c - 使用多线程的套接字服务器或文件服务器实现 : concept not clear

标签 c linux multithreading pthreads

请帮我理清这个概念。假设我们有一个使用线程实现的套接字端口服务器。套接字服务器监听套接字端口,并在消息到达时创建一个线程来为请求提供服务。

客户端代码向服务器发送给定数量的消息。此客户端代码也可以由多个用户从不同的机器运行。我知道客户端代码作为单独的进程运行。我是单独的进程向服务器发出请求,然后由服务器线程处理。

因此,客户端进程堆栈、用户地址空间、进程控制 block 等是否传递给处理其请求的服务器线程。

同理,如果是文件服务器,文件打开请求是由服务器线程实现的,那么fd是服务器文件描述符表的一部分还是调用进程。

如果能获得任何指向我可以阅读的资料的链接,我将不胜感激。 谢谢

最佳答案

不,客户端和服务器是不同的进程,甚至可能运行在不同的机器上。

客户端将要求操作系统(通过库)向服务器发送网络消息,服务器的操作系统将解压缩它们并将它们(通过库)定向到服务器进程。

现在“客户端处理线程”是另一回事,它们是服务器进程的子组件,在您的设置中,其中一个线程(在网络另一端处理客户端的线程)将接收数据并做任何需要做的事情(如有必要,可能包括回复)。

在文件服务器的情况下,操作系统提供的文件描述符永远不会“离开”文件服务器。文件服务器客户端创建他们需要的任何东西来镜像远程机器的内容。此类镜像可能包括文件描述符,但它们绝对不同于驻留在服务器上的文件描述符。客户端文件描述符绑定(bind)到接受请求操作并将其转换为网络调用的代码,而服务器文件描述符(可能)直接访问磁盘上的 block 。

关于c - 使用多线程的套接字服务器或文件服务器实现 : concept not clear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6228649/

相关文章:

c - 内存管理 C 和指针的 free()

c - 无论有没有 C 头文件中的包含保护,它仍然有效。那是为了什么?

linux - 如何在Linux中创建LPAR/WPAR?

linux - 不断将 Linux 命令的输出写入文件

python - 如何使用 matplotlib pyqt 和 Qthread 正确终止线程

c - 在多个线程之间共享套接字描述符

c - 结构通过引用问题

c - e1 && e2 是否等同于 e2 && e1?

linux - sed 命令复制有字符串的行

c# - Application Insight 的 TelemetryClient 线程安全吗?