none
Socket异步,比如模拟1000用户,同时Send的问题 RRS feed

  • 问题

  • 想求大家的一个思路。我想模拟LoadRunner。用Socket实现模拟大量用户同时登录。就是1000个Socket同时Send.我之前是起一个线程,通过一个计数标志,当数量到达1000时,各个线程发送。但是我发现各个线程之间争夺资源导致效率极其低下。还不如一个个发送快。
    2013年12月6日 13:34

答案

全部回复

  • 你好:

    欢迎来到MSDN中文论坛。

    你的需求可能要分成两种情况:

    1. 模拟1000个用户,但是不要求1000个用户在同一个时间点同时连接到服务器。

    这种情况只需要使用Task就可以了,它可以有效利用线程池,只需要让它自己来管理线程就可以了。但是线程池为每个处理器分配的默认最大上限是25个线程(.net2.0,且与硬件情况有关),可以手动修改这个上限,但是手动修改的话就等于是用Thread了。

    2. 要求这1000个用户在同一个时间点同时连接到服务器,这我觉得基本上没有办法模拟。

    我认为你应该尽量使用最少的用户来作登陆模拟,甚至只需要2个就够了,主要是看你服务端处理的请求逻辑是否有问题。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年12月9日 7:37
    版主
  • 你是创建了 1000 个线程吗?

    你可以尝试让这 1000 个线程都在同一个 event 上等待,等你的计数达到 1000 时,调用一次 event.set。

    当然,通常来说,不这么做,而是通过 Request/Sec 来度量。你可以使用 Socket 的 BeginSend 来在多个线程内发送数据,然后度量 Request/Sec 值。

    2013年12月9日 7:46
  • 最后使用parallel.for 可以比较好的模拟这样的情况。谢谢大家。
    • 已标记为答案 小八究 2013年12月20日 4:43
    2013年12月20日 4:43
  • 最后使用了parallel.for 来解决并行问题。这些都值得去研究呀,谢谢大家。
    2013年12月20日 4:45