多客户端,高实时性要求编程问题求教 本人编写中央监护系统,多个客户端同时不间断向服务器传递数据,要求服务器将收到的数据全部存下来,同时要将数据绘出来(数据包是一些图形数据,显示时只需从中挑出几个显示)。客户端是向服务器的不同端口发送数据。请问各位有什么好的解决方案?如能解决,定当高分相送!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这只是一个很普通的问题。创建一个SOCKET监听线程,不会有非议吧。当有连接请求时,建立连接并创建处理线程。创建多少个处理线程才是最合适的呢?简单分析一下:创建处理线程的目的只有一个,那就是提高响应连接请求的速度。为什么这样就能提高响应速度呢?因为监听线程在通讯线程结束之前,就可以响应下一个请求。处理过程越长,这种优势就越明显。创建多个处理线程对系统的处理速度有什么影响呢?显而易见,线程越多,线程调度占用的CUP时间就越多。可见,创建多处理线程只会消耗系统处理能力,而不会提高系统处理能力。当然,我们要做的软件,在理论上是系统能够承受的,如果确实面临对CUP的威协,那就要限制通讯线程的数量,并及时报警。 这只是一个很普通的问题。创建一个SOCKET监听线程,不会有非议吧。当有连接请求时,建立连接并创建处理线程。创建多少个处理线程才是最合适的呢?简单分析一下:创建处理线程的目的只有一个,那就是提高响应连接请求的速度。为什么这样就能提高响应速度呢?因为监听线程在通讯线程结束之前,就可以响应下一个请求。处理过程越长,这种优势就越明显。创建多个处理线程对系统的处理速度有什么影响呢?显而易见,线程越多,线程调度占用的CUP时间就越多。可见,创建多处理线程只会消耗系统处理能力,而不会提高系统处理能力。当然,我们要做的软件,在理论上是系统能够承受的,如果确实面临对CUP的威协,那就要限制通讯线程的数量,并及时报警。 to szqm123:可否给个例子程序,谢谢! 同意 Frank123(Frank) 所说 可以写一个消息排队器 专门负责客户端来的消息,使其能够平均分配 我想用两个进程,一个负责接收信息,另一个是处理信息用的,接收信息的直接select+noblock这样反正接收几百个套接字发送过来的信息是没有什么问题的,再做一个队列,每接收到就将接收到的信息插入到队列中,另一个处理进程从队列中取出信息,你机器有两个CPU的话,这两个可以同时进行的,不过要注意一下有个队列这个临界对象,用CS加以保护,应该不会有太大问题吧。用线程池的做法就是可以直接用堵塞型的,对每个接收消息的套接字生成一个进程,然后直接最原始的接收就可以了,不过最后也要加到那个消息队列中去(肯定是加指针啦)struct message{ ip,port,MESSAGEHEADER* mheader;};list<message> mydeque这样也可以,最好不要用vector为基础的队列,那个比较差劲,我想。假如用完成端口的话,我想应该就是将接收信息的那部分放到完成端口中去实现,用wsarecv(sock,buf,.....)这样的东东。 大家统统不要误人子弟了,windows nt下效率最高的是采用完成端口模型,利用内核异步IO处理,完成端口的工作者线程数量为cpu数量的2倍。本人有现成的自己开发的程序(经过海量数据测试过的),如有需要请联系东软股份大连分公司电力部:唐立刚 [email protected] 大家统统不要误人子弟了,windows nt下效率最高的是采用完成端口模型,利用内核异步IO处理,完成端口的工作者线程数量为cpu数量的2倍。本人有现成的自己开发的程序(经过海量数据测试过,八个客户端每秒发送一千个4k左右数据,经过一昼夜运行交换数据达到每客户端千万数量级),如有需要请联系东软股份大连分公司电力部:唐立刚 [email protected] 如何分析aspx并获取里的下载链接 对话框 获取按钮句柄问题 如何向COM的接口传递回调函数 如何在一个单文档程序当中嵌入对话框程序 菜鸟问题,在线等待:COM中如何使用多线程(ATL)???有效有分,急急急!!!! 请问怎么把一个有标题的窗口变成全屏幕呢? 小弟初学VC有一事请教 怎样解决这两个问题 高手请进。。。。。。。+谁要vc++de的电子书? sorry,没有分了。。。以后补好吗? 一个关于cbWndExtra的疑问? 怎样在DLL中导出一个C++类?
创建一个SOCKET监听线程,不会有非议吧。
当有连接请求时,建立连接并创建处理线程。
创建多少个处理线程才是最合适的呢?简单分析一下:
创建处理线程的目的只有一个,那就是提高响应连接请求的速度。
为什么这样就能提高响应速度呢?
因为监听线程在通讯线程结束之前,就可以响应下一个请求。
处理过程越长,这种优势就越明显。
创建多个处理线程对系统的处理速度有什么影响呢?
显而易见,线程越多,线程调度占用的CUP时间就越多。
可见,创建多处理线程只会消耗系统处理能力,而不会提高系统处理能力。
当然,我们要做的软件,在理论上是系统能够承受的,如果确实面临对CUP的威协,那就要限制通讯线程的数量,并及时报警。
创建一个SOCKET监听线程,不会有非议吧。
当有连接请求时,建立连接并创建处理线程。
创建多少个处理线程才是最合适的呢?简单分析一下:
创建处理线程的目的只有一个,那就是提高响应连接请求的速度。
为什么这样就能提高响应速度呢?
因为监听线程在通讯线程结束之前,就可以响应下一个请求。
处理过程越长,这种优势就越明显。
创建多个处理线程对系统的处理速度有什么影响呢?
显而易见,线程越多,线程调度占用的CUP时间就越多。
可见,创建多处理线程只会消耗系统处理能力,而不会提高系统处理能力。
当然,我们要做的软件,在理论上是系统能够承受的,如果确实面临对CUP的威协,那就要限制通讯线程的数量,并及时报警。
可否给个例子程序,谢谢!
可以写一个消息排队器 专门负责客户端来的消息,使其能够平均分配
这样反正接收几百个套接字发送过来的信息是没有什么问题的,再做一个队列,每接收到就将接收到的信息插入到队列中,
另一个处理进程从队列中取出信息,你机器有两个CPU的话,这两个可以同时进行的,不过要注意一下有个队列这个临界对象,用CS加以保护,应该不会有太大问题吧。用线程池的做法就是可以直接用堵塞型的,
对每个接收消息的套接字生成一个进程,然后直接最原始的接收就可以了,不过最后也要加到那个消息队列中去(肯定是加指针啦)
struct message
{
ip,port,MESSAGEHEADER* mheader;
};
list<message> mydeque这样也可以,最好不要用vector为基础的队列,那个比较差劲,我想。
假如用完成端口的话,我想应该就是将接收信息的那部分放到完成端口中去实现,用wsarecv(sock,buf,.....)这样的东东。
利用内核异步IO处理,完成端口的工作者线程数量为cpu数量的2倍。
本人有现成的自己开发的程序(经过海量数据测试过的),
如有需要请联系
东软股份大连分公司电力部:唐立刚
[email protected]
利用内核异步IO处理,完成端口的工作者线程数量为cpu数量的2倍。
本人有现成的自己开发的程序(经过海量数据测试过,八个客户端每秒发送一千个
4k左右数据,经过一昼夜运行交换数据达到每客户端千万数量级),
如有需要请联系
东软股份大连分公司电力部:唐立刚
[email protected]