现在用了如下的方式,但是很明显是失败的。拿出来借鉴一下吧。
将处理过程拆分成几个部分分别是
请求处理、运用算法、交易处理
再通过Observable/Observer依次通知下面的处理操作。本来还想通过将各部分的处理以多线程的方式处理,并放入到线程池根据各个部分的处理快慢来调配线程数目。但是后来等我写好后发现Observer不是说通知到别人就算好了,而是要等到别人处理完成。所以这是一个很失败的试验!
将处理过程拆分成几个部分分别是
请求处理、运用算法、交易处理
再通过Observable/Observer依次通知下面的处理操作。本来还想通过将各部分的处理以多线程的方式处理,并放入到线程池根据各个部分的处理快慢来调配线程数目。但是后来等我写好后发现Observer不是说通知到别人就算好了,而是要等到别人处理完成。所以这是一个很失败的试验!
管理请求队列,请问有什么可循么?如何去做呢?如何去保证不丢失和快速反应呢?
To: songbo_pp(皮皮) 说的是不错,但是问题是我现在不想用任何现成queue产品。
当然是可以自己去实现queue,那又该如何去弄呢?我现在的考虑也是借鉴了一些队列的概念:
就是在目前分段处理的前提下,使用一个容器(Q)保存下一个阶段要处理的内容,比如
请求处理:将请求接收到后,放到数据库,同时往容器(Q)里放入请求内容。
容器(Q):开线程查看自己的请求的长度,并根据这个长度调整“运用算法”的线程数量
运用算法:是个线程,只关心自己的算法处理!不知道这样可行否,请大家指正。
2。接口服务器收到一个请求,压入请求队列;
3。用一个线程遍历请求队列,取出一个新的请求,然后再遍历注册过的计算服务器,如果存在一台不忙的计算服务器,将请求推给它,并设为忙标志;如果计算服务器都忙,等待下一轮。
4。计算服务器收到请求后,开始处理,处理完后将结果给接口服务器,这个结果可能是成功的,也可能是不成功的,接口服务器收到后,找到所对应的请求,弹出队列,向客户机发送结果,同时还要将计算服务器的标志改为不忙,让该计算服务器等待下一次任务。 这样就完成了一个简单的流程。
例外控制:
计算服务器出错,比如异常和断开。
可以进一步封装客户机请求,比如增加开始处理时间。超时的请求应重新分配计算服务器。这样的话就不会存在丢失。 快速响应,就是我所说的这种方法,分布式计算。
我又加了100分,欢迎任何建议!
除非“算法服务器”有多CPU(4个?5个?),否则仍然难以达到速度要求。
多线程,归根结底也是线性的时间利用, 300×10=3000=3秒。
所以不管是多线程还是队列管理,3秒远大于1秒2、花时间在服务器端把 3秒硬挤进1秒 里面,还不如多话时间考虑终端与服务器间的安全通信
成果功效可以贯穿整个系统3、如果没有办法 98% 保证服务器与终端通信安全,分布式计算也是个好方法,但要有资金实力
你的意思我还不是很清楚,能举个例子么?
《《《《《《《《《《《《《
将处理过程拆分成几个部分分别是
请求处理、运用算法、交易处理
再通过Observable/Observer依次通知下面的处理操作。本来还想通过将各部分的处理以多线程的方式处理,并放入到线程池根据各个部分的处理快慢来调配线程数目。 但是后来等我写好后发现Observer不是说通知到别人就算好了,而是要等到别人处理完成。所以这是一个很失败的试验!
》》》》》》》》》》》》》》
我的意思是“请求处理”做好了,我就走人了,不用管我后面的了。但是后面的又要知道“请求处理”已经做好了,要继续“请求处理”未竟的事业:) 对你先前的想法,我是这样想的:就是把“请求处理”作为“接口服务器”余下的步骤作为“计算服务器”。 如何?
是这样的,我觉得可以将运用算法、交易处理合二为一,因为运用算法也是为交易处理作准备数据,应该属于交易处理的一部分,当然搂主的具体情况也可能并不是这样的。
我再研究研究。 谢谢答复!