流水线上的思考——异步程序开发模型(3)

流水线上的思考——异步程序开发模型(3)

大家好,又见面了,我是全栈君。

上次我们讨论了关于业务之间无关联性的一种处理模式。但是对于很多的系统来说,这种无关性的处理方式是很少的,更多的恰恰是那些彼此之间存在一定联系的业务。例如:在网吧上网的玩家,一般来说他们会先进行上机,然后才下机。很少听说这个玩家还没有上机就需要下机的情况(如果有的话有可能这个系统有问题,或者出现了一些其它的原因)。 
这样的业务就存在一定的关联性,在我们系统处理过程中,势必要遵从他们的业务处理逻辑来进行处理,即业务中处理也需要一定的顺序性。
 
对于这种具有顺序性的业务,能否利用我们之前所使用的方法来进行处理呢?下面我们来简单地分析一下。
首先,我们之前讨论的处理模式,是在接收到业务数据以后,将这些业务数据直接投递给一个IOCP
的线程池来进行处理。这里我们会发现一个问题:当我们将业务1
发送给一个IOCP
线程池中的一个线程A
以后,再投递第二个业务2
时,业务处理是否为顺序的呢?如果是顺序的,那么我们就可以继续使用这种处理方式;但如果不是顺序的,那么我们肯定不能再使用这种方法。
很不幸,根据《windows
核心编程(第五版)》中所讲和本人亲身测试,对于IOCP
线程池的处理并不是顺序处理的。这就意味着我们需要重新构思一个方式来进行处理。
 
这种问题,估计每个人都有自己的处理方法,我在这里讲的处理方法仅是抛砖引玉。
我采用的是对象和线程管理的处理方法。就上面具的例子来说,就是每个网吧和一个线程进行绑定的方法。这样一来,针对每个网吧的业务数据来看,他的处理必然是顺序的,即处理完业务1
后再处理业务2
 
处理过程如下图:
流水线上的思考——异步程序开发模型(3)
 
可以看到业务从IOCP
网络线程中接收到以后,需要针对此业务属于哪个对象进行区分。然后从这个对象中得到处理该对象的线程。并将这个业务投递给这个线程进行处理。
 
今天我们讨论了对于业务具有顺序性的数据如何进行处理的方法。并且提出了一种解决的参考方法。这种方法不一定完全适合于您,如果您知道更好的方法请您留言。
 
通过这三篇文章,我们从一个流水线工作方式为入口,粗略讨论了在软件开发方面如何做到类似流水线这种开发模型。其中必然存在一些不足的地方,还请大家指出,谢谢。
本文转自狗窝博客51CTO博客,原文链接http://blog.51cto.com/fxh7622/1152176如需转载请自行联系原作者

fxh7622

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108057.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C++ Boost全库简介

    C++ Boost全库简介

    2021年9月2日
    74
  • 解决opacity属性在低版本IE浏览器下失效的方法

    解决opacity属性在低版本IE浏览器下失效的方法以前,一直都以为ie9以下的版本不支持opacity属性。所以就同时使用opacity和ie独特的filter蒙版。但是有些时候需要一些动态的效果,就比如层的渐渐消失,隐藏,就需要使用动态变化的opacity,这种情况下,同时使用opacity和filter就显的有点麻烦了。其实,只使用opacity+jquery就完全解决这个问题。用法如下:<scripttype…

    2022年5月15日
    56
  • 一比一还原axios源码(八)—— 其他功能

    到此,我们完成了axios的绝大部分的功能,接下来我们来补全一下其他的小功能。一、withCredentials这个参数可以可以表明是否是一个跨域的请求。那这个的使用场景是啥呢?就是我们在同域的请

    2022年3月25日
    38
  • GT注册大全-终结动态修订版「建议收藏」

    GT注册大全-终结动态修订版「建议收藏」本次‘GT注册大全-终结动态修订版’的特点:1.仅中文名称共享软件范围来说为国内乃至世界范围最新最全,通用注册信息有效率最高;2.较之前版本删除了N多已完全失效的注册信息,增加了N多新旧有效注册信息;3.保持了GT注册大全原有的按软件发布时间排列,软件按同系列或同一制作公司及个人软件作者来合并,提供软件相关下载页面或直接下载链接,非通用注册信息一律标明,必要时附带说明等特点;4.进一步完善了‘GT

    2022年5月20日
    32
  • js也能写3D游戏?

    js也能写3D游戏?看完这本书《3DGameProgramingforKids》之后,发现3D游戏的学习,也可以使用javascript来写的。先要上这个网站https://threejs.org,然后下载它的three.js源码放到一个目录,比如js。然后放入这段代码: Myfirstthree.jsapp body{margin:0;} canvas{w

    2022年5月26日
    119
  • fflush和fsync的联系和区别「建议收藏」

    fflush和fsync的联系和区别「建议收藏」1.提供者fflush是libc.a中提供的方法,fsync是系统提供的系统调用。2.原形fflush接受一个参数FILE*.fflush(FILE*);fsync接受的时一个Int型的文件描述符。fsync(intfd);3.功能fflush:是把C库中的缓冲调用write函数写到磁盘[其实是写到内核的缓冲区]。fsync:是把内核缓冲刷到磁盘上。c库

    2022年5月13日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号