【问题标题】:using mutex or not for concurrent files sending over tcp sockets对通过 tcp 套接字发送的并发文件使用或不使用互斥锁
【发布时间】:2018-10-18 09:36:51
【问题描述】:

我开发了一个多线程系统,它为每个客户端请求创建一个子进程,以通过 tcp 套接字读取文件并将其发送到客户端。

我很难确定每次读取文件时使用互斥锁是否会提高性能,还是让子进程在不使用互斥锁的情况下同时从硬盘读取文件会更好。

文件大小平均为 500 ko,我们估计同时 tcp 连接最多为每分钟 2000 个。

PS : 程序以 2000 字节为单位读取每个文件,发送每个缓冲区并循环直到传输完成

【问题讨论】:

  • 让操作系统和磁盘驱动程序以及磁盘和网络进行互斥。不要试图提供帮助。 需要时使用互斥锁。
  • 同意谢谢,但如果同时有太多并发连接读取文件,会不会耗尽服务器资源。从长远来看,硬盘驱动器不会变慢并压碎吗?
  • 如果你同意,我不知道你为什么要问。您可能希望限制活动并发连接的数量,但这与互斥锁没有任何关系。
  • 谢谢,但这种不尊重是不必要的

标签: multithreading sockets tcp concurrency


【解决方案1】:

我一直在处理这些类型的问题:哪些操作由谁在哪些资源上执行?

正在执行的一些操作是:

  • 读取文件(可能共享?)
    • 操作系统(Linux?)是否保证文件读取是线程安全的? 是的looks like it。如果情况确实如此(我不太熟悉),那么跨进程协调互斥锁以进行文件访问将是不必要的开销。
  • 每个进程写入 TCP
    • 这应该不是并发问题,因为每个进程都处理自己的 TCP 连接

如果发布的链接反映了现实,则不需要跨进程协调(互斥体)

【讨论】:

  • 嗨,是的,我的服务器在 Linux 上,我确实利用系统调用函数来访问文件描述符,这些函数在所有主流的类 UNIX 操作系统中都是线程安全的。所以我不需要互斥锁。谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 2017-03-14
相关资源
最近更新 更多