我已经在C#中编写了一个具有写和读功能的TCP客户端,所有这些都是按照预期在命令行程序中处理单个线程的。
TCP服务器支持每个用户/ip地址最多4个连接,我被告知,最好使用4个线程中的所有4个连接来改善和优化性能。之所以如此,是因为我编写的软件性能非常关键,并且每隔100毫秒运行一次。
这是正确的吗?我应该使用所有四个连接吗?如果是的话,使用一个TCP客户机来处理这个问题的最好方法是什么?
编辑:对不起,我的意思是,对服务器的写/读操作每100毫秒发生一次。实际的反应显然要快得多,一毫秒或更少。
非常感谢,戴夫
发布于 2013-04-30 10:28:38
答案很大程度上取决于客户端和服务器的硬件和特定条件--如果服务器位于单个核心系统上,并且无论如何只能以串行方式处理请求,那么您将看不到任何好处。但是,如果它是一个四核服务器,并且每个服务器插槽都被卸载到一个单独的核心中,那么您将看到好处,因为每个请求都可以并行处理(假设每个服务器连接也没有为服务器上的共享资源进行任何操作)。
至于最好的方法,这在一定程度上也取决于您在做什么--如果您有一个场景,每个客户端都会得到它写入某些共享资源的结果,那么您必须确保正确地处理这个问题,例如,在写入到共享资源的代码周围创建一个锁:
object lock = new object();
lock(lock)
{
// write to the shared resource
}如果每个客户端都是独立的,没有对共享资源的访问,那么您就没有需要保护的共享资源。
您可以简单地创建客户端类的一个新实例,并在执行过程中对其执行一些函数,如果需要,可以传递一个参数(在这里,我们将整数i作为参数传递给TestClient类的run函数,以便对4个单独的客户机类执行client.Run(i),它们都位于不同的线程中):
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 )类方法只是建立连接并进行调用,那么它需要对任何响应执行所需的操作,那么这个方法应该工作得很好。
希望这能有所帮助。
https://stackoverflow.com/questions/16296073
复制相似问题