P2Psim分析笔记(2)-程序架构简述

简介:
本文在我的博客《查理的书架》最早发布,并在第一时间更新到51CTO的《Nathan的技术空间》上。
   这是我整理P2PSim这个仿真软件包的第二篇笔记。第一篇是《P2PSim在g++ 4.3下的编译》,在第一篇里面介绍了P2PSim 0.3在编译和按照中的碰到的问题以及解决方式。本篇主要给出P2PSim的实现架构,帮助需要进行代码分析的朋友对P2PSim能有个大体的构架了解。在些这篇时候,作者也还未完成对整体代码的通读,所以对全局的掌握还不充分,如有错误,请各位指出和包涵。

P2PSim简述
    这是一个比较简单的p2p模拟软件包,是MIT的一个老兄搞的玩也。在2006年出了最后一版0.3后再没更新了。需要的朋友可去 http://pdos.csail.mit.edu/p2psim/下载。国内不少paper用这个软件包来做仿真,网上也有不少的代码分析笔记,比较详细的是kikiKind在CSDN上的p2psim学习笔记,但是写到后来就晦涩难懂了,完全不是给旁人看的。他给出了p2psim中类的继承关系图,以及关于vividi这个错误的fix。那个类图的资料在P2Psim的官网上很难找到链接了,所以这是kikikind朋友的最大贡献。但是他给出的贴图却是错误的,把第一张图贴了两遍,第二张图给漏了。然后所有网络转载都一样错。此外我在g++ 4.3上碰到更多的错误,他都没有提及,因此不是很全面,此外他在对libtask以及main函数的分析都很粗略,让人很难跟。综合来说,这个笔记是他写给他自己看的,而不是给网友看的。我个人不是很满意,所以我在这把他所遗漏和错误的地方都补上。希望对各位有用。在本篇笔记里面,我从便于各位读者理解学习的顺序来组织内容,而不是从代码分析的学习次序来说明。
    首先是P2Psim的实现基础。这个软件包的实现是基于单进程多任务方式工作的。他本质上是基于一个叫LibTask的C语言软件包来实现在单个进程内进行多个任务的调度和切换。这个包在他的源代码的/libtask目录下。 这个包是MIT开发的,目前在google code的网站上有登记,地址是 http://code.google.com/p/libtask/,可以在这个网站上查到这个库的基本api的说明。可以直接看这个说明来理解这个库的实用,而不需要去看/libtask目录下的代码来分析到底这个库在做什么。此外,在P2PSim里面,作者把这个库封装到了Threadmanager和Thread两个类。前者Threadmanager用来封装全局的task的pool的,而后者封装了各个task的api。这样P2PSim就实现了C++这级的多任务调度。
    其次,我把kikikind老兄的类继承图重新贴一遍,来帮助大家理解程序架构。在这个图里面,我们看到从threaded类一共派生出EventQueue, Network,和EventGenerator三个类,这三个类就是程序在运行时候的3个主要并发任务。
 
至于图中的其他部分,等以后的具体分析的时候再慢慢说明。
    因此,综上所述,P2Psim是一个根据libtask所提出的架构所写的一个程序,因此在/p2psim目录下,main.c程序里面没有main函数,而是taskmain函数,这个函数会被libtask作为第一个task而调用启动,功能类似main函数,连调用参数都差不多。然后在这个taskmain中,间接建立了上述其他几个并发任务。
    到这里,读者应该对p2psim的大体构架有个简单认识了。 下次我打算把taskmain函数里面的初始化顺序介绍一下。





     本文转自nathanxu 51CTO博客,原文链接:http://blog.51cto.com/nathanxu/245729,如需转载请自行联系原作者

相关文章
|
2月前
|
前端开发 测试技术 数据处理
Kotlin教程笔记 - MVP与MVVM架构设计的对比
Kotlin教程笔记 - MVP与MVVM架构设计的对比
60 4
|
2月前
|
前端开发 JavaScript 测试技术
Kotlin教程笔记 - 适合构建中大型项目的架构模式全面对比
Kotlin教程笔记 - 适合构建中大型项目的架构模式全面对比
38 3
|
2月前
|
存储 前端开发 Java
Kotlin教程笔记 - MVVM架构怎样避免内存泄漏
Kotlin教程笔记 - MVVM架构怎样避免内存泄漏
31 2
|
4月前
|
安全 数据处理 数据安全/隐私保护
C/S架构与B/S架构的适用场景分析
C/S架构(客户端/服务器架构)与B/S架构(浏览器/服务器架构)在适用场景上各有特点,主要取决于应用的具体需求、用户群体、系统维护成本、跨平台需求等因素。
341 6
|
15天前
|
机器学习/深度学习 存储 人工智能
基于AI的实时监控系统:技术架构与挑战分析
AI视频监控系统利用计算机视觉和深度学习技术,实现实时分析与智能识别,显著提升高风险场所如监狱的安全性。系统架构包括数据采集、预处理、行为分析、实时决策及数据存储层,涵盖高分辨率视频传输、图像增强、目标检测、异常行为识别等关键技术。面对算法优化、实时性和系统集成等挑战,通过数据增强、边缘计算和模块化设计等方法解决。未来,AI技术的进步将进一步提高监控系统的智能化水平和应对复杂安全挑战的能力。
|
2月前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
2月前
|
XML 前端开发 Android开发
Kotlin教程笔记(80) - MVVM架构设计
Kotlin教程笔记(80) - MVVM架构设计
|
3月前
|
机器学习/深度学习 网络架构 计算机视觉
目标检测笔记(一):不同模型的网络架构介绍和代码
这篇文章介绍了ShuffleNetV2网络架构及其代码实现,包括模型结构、代码细节和不同版本的模型。ShuffleNetV2是一个高效的卷积神经网络,适用于深度学习中的目标检测任务。
121 1
目标检测笔记(一):不同模型的网络架构介绍和代码
|
2月前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
95 4
|
2月前
|
XML 前端开发 Android开发
Kotlin教程笔记(80) - MVVM架构设计
Kotlin教程笔记(80) - MVVM架构设计

热门文章

最新文章