首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TCP客户端比1多4个连接有效吗?

TCP客户端比1多4个连接有效吗?
EN

Stack Overflow用户
提问于 2013-04-30 09:05:09
回答 1查看 169关注 0票数 0

我已经在C#中编写了一个具有写和读功能的TCP客户端,所有这些都是按照预期在命令行程序中处理单个线程的。

TCP服务器支持每个用户/ip地址最多4个连接,我被告知,最好使用4个线程中的所有4个连接来改善和优化性能。之所以如此,是因为我编写的软件性能非常关键,并且每隔100毫秒运行一次。

这是正确的吗?我应该使用所有四个连接吗?如果是的话,使用一个TCP客户机来处理这个问题的最好方法是什么?

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

非常感谢,戴夫

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-30 10:28:38

答案很大程度上取决于客户端和服务器的硬件和特定条件--如果服务器位于单个核心系统上,并且无论如何只能以串行方式处理请求,那么您将看不到任何好处。但是,如果它是一个四核服务器,并且每个服务器插槽都被卸载到一个单独的核心中,那么您将看到好处,因为每个请求都可以并行处理(假设每个服务器连接也没有为服务器上的共享资源进行任何操作)。

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

代码语言:javascript
复制
object lock = new object();

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

如果每个客户端都是独立的,没有对共享资源的访问,那么您就没有需要保护的共享资源。

您可以简单地创建客户端类的一个新实例,并在执行过程中对其执行一些函数,如果需要,可以传递一个参数(在这里,我们将整数i作为参数传递给TestClient类的run函数,以便对4个单独的客户机类执行client.Run(i),它们都位于不同的线程中):

代码语言:javascript
复制
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 )类方法只是建立连接并进行调用,那么它需要对任何响应执行所需的操作,那么这个方法应该工作得很好。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16296073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档