0

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

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

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

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

非常感谢,戴夫

4

1 回答 1

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) 类方法然后只是建立连接并进行调用,然后对任何响应执行它需要做的事情,那么这应该可以正常工作。

希望这可以帮助。

于 2013-04-30T10:28:38.680 回答