TCP客户端是4个连接比1更有效吗?

时间:2013-04-30 09:05:10

标签: c# tcp tcpclient

我已经在C#中编写了一个具有写入和读取功能的TCP客户端,并且所有这些都在命令行程序中的单个线程上按预期工作。

TCP服务器每个用户/ IP地址最多支持4个连接,我被告知最好利用4个线程中的所有4个连接来改善和优化性能。原因是因为我编写的软件性能至关重要,并且间隔时间仅为100毫秒。

这是对的吗?我应该使用所有四个连接吗?如果是这样,使用单个TCP客户端解决此问题的最佳方法是什么?

编辑:很抱歉,我的意思是对tcp服务器的写入/读取操作每100毫秒发生一次。实际响应明显要快得多,毫秒或更短。

非常感谢, 戴夫

1 个答案:

答案 0 :(得分:1)

大部分答案取决于客户端和服务器的硬件和特定条件 - 如果服务器位于单核系统上并且只处理串行请求,那么您将看不到任何好处。然而,如果它是一个四核服务器并且每个服务器插槽被卸载到一个单独的核心中,那么您将看到好处,因为每个请求可以并行处理(假设每个服务器连接也不是为了服务器上的共享资源而做任何事情它确实)。

至于最好的方法,这在某种程度上取决于你正在做什么 - 如果你有一个场景,每个客户端得到一个结果,它写入一些共享资源,你必须确保你正确处理这个,例如,通过在写入共享资源的代码周围创建一个锁:

object lock = new object();

lock(lock)
{
    // write to the shared resource
}

如果每个客户端都拥有自己独立的东西而无法访问共享资源,那么您就没有需要保护的共享资源。

你可以简单地创建一个新的客户端类实例,然后根据需要执行一些函数,如果需要的话传递一个参数(这里我们将整数i作为参数传递给TestClient类的run函数,如client.Run(i)在4个单独的客户端类中执行,所有客户端都在不同的线程中执行:

for (int i = 0; i < 4; i++)
{
    TestClient client = new TestClient();
    Thread thread = new Thread(new ParameterizedThreadStart(client.Run));
    thread.Start(i);
}

如果你的TestClient.Run(int i)类方法只是建立连接并进行调用,那么它做了什么需要处理任何响应然后这应该工作正常。

希望这有帮助。