`
daemon_chen
  • 浏览: 4267 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

UTM 用户线程模型

阅读更多

 

1.Utm-简介

 

GitHub: https://github.com/dga4654dan/UTM ( utm相关:https://github.com/dga4654dan/QTM)

Git@OSC: http://git.oschina.net/daemon_c/UTM ( utm相关:http://git.oschina.net/daemon_c/QTM)

 

 

UTM-Demo

GitHub: https://github.com/dga4654dan/UTM-DEMO(SmartFoxServer,Netty)

Git@OSC: http://git.oschina.net/daemon_c/UTM-demo(SmartFoxServer,Netty)

 

 

在一些金融交易处理、游戏数据处理等逻辑较为复杂的领域中,各个接口可能会交叉使用和修改一些资源数据,这样就很容易导致一些并发的问题,如果对于每个资源都要考虑如何保证其并发安全问题,那么整个分析过程就会变得很复杂,而复杂的逻辑往往容易有所疏漏。

 

Utm就是设计来屏蔽单个用户的并发问题的,就是用户访问自己的资源是不需要考虑其并发安全问题的(多个用户访问的资源依然需要处理),主要想法是将用户的请求排序并调用线程池中的线程依次处理。

 

一个简单的场景:用户买入一个东西的总额是受限制的,用户a发起两次买入请求(请求1 和请求2)

在通常情况下,需要在用户买入请求中加入锁或者使用原子类,从而避免 请求1 和 请求2 同时处理导致超过限制;

而在utm下则不需要考虑类似问题,用户a的请求1执行完了才会执行请求2。

而现实业务中类似的场景有很多,使用utm确实使开发的复杂度降低。

 

这样就不会有说一个用户的两个请求被同时处理这样的情况,相对起来开发的复杂度就降低了很多,而且也意味着多个线程争抢资源的概率减少了(一个用户最多只有一个请求正在被处理)。用户的请求不会被并发处理,从单个用户上来是比原来要慢点,但从硬件相对整个用户群来说,通常的应用的用户的数量都会远远大于cpu的数量,所以这样不会导致cpu利用不足问题,相反utm能更好的将cpu资源分配给各个用户,竞争减少也意味着程序更高效了。Utm的核心qtm本身虽然会有一些锁操作,但都是一些小锁块,应对多个用户的每秒几千甚至上万个的请求并没有什么延迟,所以也就没有打算开发基于CAS版本的qtm的打算(服务处理的瓶颈通常出在涉及IO方面,特别是数据库处理,相比起来utm的开销有点微不足道)。

 

 

特点:

1.Utm保证用户生命流程的完整性和执行顺序。

(eg:一个用户登录,如果他已经登录了,那么旧的用户会被先退出,然后新的用户再登录)

(eg:用户发起 请求1 后 发起 请求2,则 请求1 一定先于 请求2 执行)

 

2.用户的请求被有序的执行,所以用户访问自己的资源是不需要考虑其并发安全问题,降低了开发的复杂度。

(eg:有一个用户未读消息的统计,在utm中就可以直接是一个int类型保存在内存中,如果在其他没有保证并发控制的地方则至少要声明为AtomicInteger 或者使用锁来维护这个字段)

 

3.提供用户资源接口,提供了用户生命流程中的各个重要点的切面,让开发者可以更好的管理自己定义的用户资源。

(eg:用户队列:在用户开始登陆标志位设置成功后 申请,当用户登录连接检查失败、用户退出的时候释放)

 

4.高并发性

Utm的核心qtm本身虽然有一些锁操作,但都是一些小锁块,可以应对多个用户的每秒几千甚至上万个的请求。

(服务处理的瓶颈通常出在涉及IO方面,特别是数据库处理,相比起来utm的开销太小)

 

5.具有良好的 兼容性

Utm可以非常容易得应用在不同的服务端(像SmartFoxServer, Netty等)

 

 

 

1. Utm简介

2. Utm 模块设计

3. Utm详细实现-用户生命流程

4. Utm详细实现-用户资源管理

5.Utm线程模型

6. Utm示例-公共部分

7. Utm示例-SmartFoxServer集成

8. Utm示例-Netty集成

 

 

 

分享到:
评论

相关推荐

    激光雷达UTM-30LX图像采集程序及数据C++

    C++库如PCL(Point Cloud Library)提供了强大的点云处理功能,可以将这些散乱的数据点转换成有序的点云模型,便于后续的三维重建和场景理解。 5. **应用示例** 数据采集和处理后的点云可用于多种应用,如障碍物...

    java编写的一个简单bbs网站完整代码

    2. **MVC设计模式**:作为一个Web应用,该项目可能采用了Model-View-Controller(模型-视图-控制器)设计模式,这是一种常见的Web应用程序架构,用于分离业务逻辑、数据模型和用户界面。 3. **数据库交互**:BBS...

    C++编写的GIS系统源代码

    1. **空间数据模型**:包括矢量数据模型(点、线、面)和栅格数据模型,这两种模型在GIS中都有其应用场景和优缺点。 2. **投影与坐标系统**:理解不同投影方式(如UTM、墨卡托等)及其转换对空间分析的影响。 3. **...

    osggis源码2016最新

    8. **用户界面与交互**:源码可能包含与用户交互的控件,如地图缩放、平移、旋转等操作,以及图层控制和查询功能。 9. **多线程编程**:在处理大量数据时,多线程编程可能被用到,以提高程序运行效率和响应速度。 ...

    电子地图(纯java编写)源码

    8. 异步处理与多线程:由于地图数据加载可能涉及网络通信,开发者可能使用Java的异步编程模型或者多线程技术,以确保用户界面的流畅性。 9. 导入与运行:项目中提到“内附操作方法”,意味着包含了如何在Eclipse...

    Visual C++开发GIS系统——开发实例剖析guangpan

    6. 多线程编程:为了实现高效的数据处理和响应,开发者可能需要使用多线程技术,让不同的任务在不同的线程上运行。 7. 地理编码和反编码:将地址转换为经纬度坐标(地理编码)和反之(反地理编码)是GIS系统中的...

    VC++ MAPX 导航程序

    7. **多线程与并发**:如果涉及到复杂的计算任务,如大量数据处理或网络请求,可能需要利用多线程技术,以提高程序性能和用户体验。 8. **错误处理与调试**:在开发过程中,良好的错误处理机制至关重要,以确保程序...

    C#写的地理信息系统初级代码

    C#提供了多线程和异步编程模型,可以用来并行处理任务,提高系统效率。 这份“C#写的地理信息系统初级代码”很可能包含了上述部分或全部知识点,为初学者提供了理解GIS开发的基础。由于没有具体的代码文件列表,...

    osgearth-2.8

    2. **地理坐标系统与投影**:osgEarth支持多种地理坐标系统和投影,如WGS84、UTM等,允许用户在不同的坐标系之间转换,这对于处理地球表面的数据是必不可少的。 3. **地形渲染**:osgEarth能够从多种数据源(如DEM...

    vc开发GIS矢量图形系统——开发实例剖析

    10. **用户界面设计**:使用MFC(Microsoft Foundation Classes)或Qt等库创建交互式GIS界面,支持地图缩放、平移、图层管理等功能。 11. **空间分析**:包括缓冲区分析、距离计算、叠置分析等,这些都是GIS系统的...

    基于C#开发的迷你GIS系统

    3. **多线程处理**:处理大数据量时,利用多线程优化性能,提升用户体验。 4. **WPF(Windows Presentation Foundation)**:更高级的UI框架,可以构建更美观、交互性更强的地图界面。 5. **Entity Framework**:...

    WGS84BJ54两种空间直角坐标系的转换,由空间直角坐标到大地坐标的转换.zip

    它基于椭球体模型,其中的参考椭球体是WGS84椭球,其参数为长半轴a = 6378137米,扁平率f = 1/298.257223563。WGS84坐标系的原点位于地球的质心,Z轴指向地球的平均极轴,X轴通过格林尼治平均天文台,Y轴与X轴和Z轴...

    地图匹配程序

    2. **GPS数据处理**:GPS数据包含经纬度坐标,需要转换为地图上的投影坐标,例如UTM坐标系。同时,由于GPS信号的误差,需要采用差分GPS(DGPS)或者卡尔曼滤波等方法来校正坐标。 3. **匹配算法**:常见的地图匹配...

    WorldWindJava-2.2.1源码

    4. **地形渲染**:源码包含地形数据的加载和渲染,可能使用了DEM(数字高程模型)数据,通过地形贴图和LOD(Level of Detail)技术实现平滑的地形过渡。 5. **卫星图像和地图叠加**:WorldWindJava可以加载各种卫星...

    OSG_Help.zip

    了解OSG的基本概念,如场景图、节点、几何对象、纹理和相机模型,对于理解osgEarth至关重要。 2. **地形渲染**:osgEarth的地形渲染功能强大,它可以加载多种地形数据格式,如USGS DEM、ASTER GDEM等,创建真实的3D...

    《GPS应用程序设计》GPS程序源代码

    这涉及到地理坐标系统和投影坐标系统的转换,如WGS84到UTM的转换。源代码中可能会包含相关的数学模型和转换函数。 位置计算不仅包括当前位置的确定,还可能涉及速度、方向和高度等参数的计算。这些都需要对三角函数...

    鹰眼功能的实现

    5. **地图投影**:地图数据通常以不同的投影方式存储,例如Mercator投影、UTM投影等。开发者需要理解地图投影的概念,知道如何在不同投影间转换,确保主地图和鹰眼视图的一致性。 6. **图像处理**:为了生成鹰眼...

    SharpMap WPF版

    9. **多线程**:为了提供流畅的用户体验,开发者可能需要在后台线程加载和处理数据,避免阻塞主线程。 10. **响应式设计**:WPF支持自适应布局,开发者可以创建适合不同屏幕尺寸和分辨率的应用。 总的来说,...

    League-of-Legends-Chat-Control:LoL聊天控制的源代码-Chat source code

    3. **事件驱动编程**:游戏中的聊天事件,如发送消息、接收消息、用户加入或离开聊天室等,可能被设计为事件驱动的模型。开发者可以通过这部分代码学习如何处理实时性要求高的游戏聊天系统的事件响应。 4. **多线程...

    计算机软件-编程源码-肰isualC开发GIS系统.zip

    1. 数据模型:GIS系统的基础是地理数据,包括矢量数据(点、线、面)和栅格数据。开发者需要理解和掌握如何在内存中表示和操作这些数据。 2. 地图投影:由于地球是曲面,而地图是平面,所以必须进行投影转换。...

Global site tag (gtag.js) - Google Analytics