【发布时间】:2012-01-15 19:46:11
【问题描述】:
我正在开发一个通过套接字接收 tcp 数据的低延迟金融应用程序。
这就是我建立套接字连接和接收字节的方式:
public class IncomingData
{
Socket _Socket;
byte[] buffer = new byte[4096];
public static void Connect(IPEndPoint endPoint)
{
_Socket = new Socket(
AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
_Socket.Connect(endPoint);
}
public static void ReadSocket(int ReadQty)
{
_Socket.Receive(buffer, 0, ReadQty, SocketFlags.None);
}
}
我听说当你在 Stream 套接字上调用 Receive() 时,调用线程被置于休眠状态,并在接收到数据时被唤醒。我希望线程全速运行(使用 CPU 容量)。
有没有办法使用 Stream 套接字来做到这一点?如果唯一的方法是使用原始套接字,您能否提供一个示例?
【问题讨论】:
-
在没有数据的情况下将线程置于睡眠模式,从资源管理的角度来看,实际上是一件好事。我不太明白你充分利用 CPU 容量的观点。如果数据还没有,你期望 CPU 运行什么?只是一个空循环不断轮询数据?
-
是的,我想做一个持续轮询数据的 while 循环。基本上这样一个线程就不必花费任何时间来唤醒。
-
这完成了完全相反的,线程将耗尽它的量子并且暂时不会被调度。它显着增加了延迟。
-
您想要超快但您使用的是 TCP?丢包时会发生什么? TCP 会阻塞所有传入的数据,直到重传成功。
标签: c# sockets networking raw-sockets low-latency