Dan*_*ano 11 c# mono multithreading
我正在用C#开发一个服务器.该服务器将充当备份服务的数据服务器:客户端将连续发送数据,大量数据,特别是在同一个tcp通道中发送最多五个文件的数据块.我会慢慢地向服务器发送数据,我不想杀死客户带宽,因此我不需要加速最大数据发送,因此,我可以使用单个tcp通道来处理所有事情.
这样说,实际上服务器使用BeginReceive方法从客户端获取数据,在Windows上,这意味着IOCP.我的问题是:BeginReceive将如何在linux/freebsd trough mono上执行?在Windows上,我已经阅读了很多东西,表现非常好,但是这个软件,服务器部分,将在linux或freebsd上运行单声道,我不知道这些方法是如何实现的!
更多,尝试减少(Begin | End)接收方法的Async State对象的继续分配我保留一个用于tcp连接,在BeginReceive回调中我复制数据然后再使用它(当然我不清除数据)因为我知道通过EndReceive返回值多少读取).缓冲区设置为8kb,所以我最大限度地复制8kb的数据,它不应该杀死resoruces.
我的目标是最多可以达到400/500的连接数.它不是那么多,但同时,服务器(机器)将通过LVM + Linux软件Raid镜像和使用clamav进行防病毒检查,通过自己的文件系统(首先在C#中使用保险丝开发,后来在C中开发)来处理文件软件必须尽可能轻!
编辑:我忘了说机器将(可能)是英特尔酷睿2双核2.66+ GHz(3 MB L2 - FSB 1066 MHz),2 GB内存,SO使用64位.
单声道是使用epoll(libevent)还是kqueue(在freebsd上)?我应该做一些特定的事情来尝试最大化表现?我可以做些什么来不杀死接收数据包的资源吗?
我知道有点晚了,但我刚刚发现这个问题......
Mono 能够处理您需要的连接数量以及更多。我定期测试具有超过 1k 个并发连接的 xsp2(Mono ASP.NET 独立服务器)。如果这将是高负载情况,您应该稍微设置 MONO_THREADS_PER_CPU,直到找到 ThreadPool 的正确线程数。
在 Linux 上,Mono 在可用时使用 epoll(现在总是如此)。