分类 程序开发 中的文章

[转]并发编程:Actors模型和CSP模型

一、前言

不同的编程模型与具体的语言无关,大部分现代语言都可以通过巧妙地结构处理实现不同的模型.杂谈的意思是很杂,想到哪儿写到哪儿,不对正确性负责 :D.

 

二、Actors模型

传统的并发模型主要由两种实现的形式,一是同一个进程下,多个线程天然的共享内存,由程序对读写做同步控制(有锁或无锁). 二是多个进程通过进程间通讯或者内存映射实现数据的同步.

Actors模型更多的使用消息机制来实现并发,目标是让开发者不再考虑线程这种东西,每个Actor最多同时只能进行一样工作,Actor内部可以有自己的变量和数据.

Actors模型避免了由操作系统进行任务调度的问题,在操作系统进程之上,多个Actor可能运行在同一个进程(或线程)中.这就节省了大量的Context切换.

在Actors模型中,每个Actor都有一个专属的命名”邮箱”, 其他Actor可以随时选择一个Actor通过邮箱收发数据,对于“邮箱”的维护,通常是使用发布订阅的机制实现的,比如我们可以定义发布者是自己,订阅者可以是某个Socket接口,另外的消息总线或者直接是目标Actor.

目前akka库是比较流行的Actors编程模型实现,支持Scala和Java语言.

 

三、CSP模型

CSP(Communicating Sequential Process)模型提供一种多个进程公用的“管道(channel)”, 这个channel中存放的是一个个”任务”.

目前正流行的go语言中的goroutine就是参考的CSP模型,原始的CSP中channel里的任务都是立即执行的,而go语言为其增加了一个缓存,即任务可以先暂存起来,等待执行进程准备好了再逐个按顺序执行.

 

四、CSP和Actor的区别

  • CSP进程通常是同步的(即任务被推送进Channel就立即执行,如果任务执行的线程正忙,则发送者就暂时无法推送新任务),Actor进程通常是异步的(消息传递给Actor后并不一定马上执行).
  • CSP中的Channel通常是匿名的, 即任务放进Channel之后你并不需要知道是哪个Channel在执行任务,而Actor是有“身份”的,你可以明确的知道哪个Actor在执行任务.
  • 在CSP中,我们只能通过Channel在任务间传递消息, 在Actor中我们可以直接从一个Actor往另一个Actor传输数据.
  • CSP中消息的交互是同步的,Actor中支持异步的消息交互.

 

五、参考文档

文章转载自:http://sobuhu.com/program/2014/09/07/concurrent-models.html

……

阅读全文

[转]高并发性能调试经验分享

作者:helloworlds 链接:https://zhuanlan.zhihu.com/p/21348220 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 引文 4月份的时候看到一道面试题,据说是腾讯校招面试官提的:在多线程和高并发环境下,如果有一个平……

阅读全文

[转]理解Python装饰器

作者:xlzd 链接:http://www.zhihu.com/question/26930016/answer/81263287 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。简单来讲,可以不严谨地把Python的装饰器看做一个包装函数的函数。 比如,……

阅读全文

[转]我在系统设计上犯过的14个错

转自:http://hellojava.info/?p=458 在上篇《架构师画像》的文章中提到了自己在系统设计上犯过的一些错,觉得还挺有意义的,这篇文章就来回顾下自己近八年来所做的一些系统设计,看看犯的一些比较大的血淋淋的错误(很多都是推倒重来),这八年来主要做了三个基础技术产品……

阅读全文

什么时候需要学一门新的编程语言?

声明:本文没有任何褒贬或者对比各种编程语言的意思,请不要做无谓的语言之争。 我们这些80后程序员大部分人都是从delphi,C,C++开始接触编程的,然后等到了大学或者工作,因为生计或者其他种种原因,大家从事的行业开始有了变化,从而导致开发语言也有了一些变化,一些做后端的,开始使用……

阅读全文

记录《QMWS》服务器性能优化过程

性能优化(图片来自网络) 本文是为了记录下《QMWS》项目服务器在对外测试期间,性能表现和技术审核时的性能表现差距很大,从而做出的一些优化过程,期间还是比较头疼,接近两个连续通宵来修改。第一个通宵一直在查找问题和猜问题,找问题是如何出现的,第二天主要是解决对应的性能问题。 性能问题主……

阅读全文

boost::flat_map性能测试

文章转自:boost::flat_map and its performance compared to map and unordered_map have run a benchmark on different data structures very recently at my company so I feel I need to drop a word. It is very complicated to benchmark something correctly. Benchmarking On the web we rarely find (if ever) a well engineered benchmark. Until today I only found benchmarks that were done the journalist way (pretty quickly and sweeping dozens of variables under the carpet). 1) You need to consider about cache warming Most people running benchmarks are afraid of timer discrepancy, therefore they run their stuff thousands of times and take the whole time, they just are careful to take the same thousand of times for every operation, and then consider……

阅读全文

介绍一个headonly的log库easylogging++

因为TX的log要求按照小时滚动,并且按照大小滚动,原来的glog设置完大小后,容量了就不会再写入了,而且按小时滚动也很麻烦,所以就找了找其他的log库。 主要要求简单上手,支持大小和时间滚动,不需要改动太多。 看了之前用过的log4cxx等库,发现编译成静态文件后太大了,我们又必须……

阅读全文

*.pvr.ccz与png格式的互转

这两天在看一个安卓游戏,资源挺不错的,解压后发现animation里的图片格式全是pvr.ccz,查了下,这是做2D游戏spirit图打包后的格式,用的软件是‍‍TexturePacker,知道了软件那就知道如何解回去了。‍‍ 下载‍‍TexturePacker ‍‍ 安装……

阅读全文

protobuf通过反射来赋值

最近因为项目逻辑方面都做的差不多了,于是赶紧去做做测试工作,免得项目上线之后出问题,于是打算用配置的形式做一个类似与白盒测试工具的东西出来。 因为项目使用pb来做协议通讯,所以配置的xml也是类似于pb,将pb的字段和类型配置进去,然后加上值,一个协议结构就可以了,现在只能通过修改……

阅读全文

最近文章

分类

标签

0x标准 2003 2011,总结 2013 2014 2015 2d 404 AHCI API AWS Aion Algorithm ArkGame ArkGameFrame Assert Big data BitStreams C++ C++标准 C 11 C/C++ CDT CRC64 CSP CSS Connect CppCheck CryptoAPI Decarator Dll DrawItem Dynamic Lib ECS Fedora Flickr GCC GET GUI GUID HTTP I/O IDE IOCP Intel JQuery JQueryUI JSON K/V Kubernetes LNMP Lib Linux Lua Luabind MFC Malloc Microsoft MsgPack MySQL NoSQL PM POD POST Partten RakNet SIGSEGV Scala Server SkyDrive Socket Spark Sprite Startup Static Lib SystemAddress TBB Threading Building Blocks TortoiseGit TortoiseSVN UI URL UUID Ubuntu Unity Unix VLD VPS VS2010 WebSocket Win7 Win8 Xfce ZMQ ZeroMQ _CrtDumpMemoryLeaks asio auto boost breakpad cloud codeblocks consistent hashing coroutine cx-freeze delete demo dlclose docker easyloggingpp eclipse ensure epoll feed feedburner feedsky flat_map git glog goagent google headonly httpd iOS7 iSpriter ibus jsoncpp leveldb libevent links linode log log库 lxde msysgit mutex mysqlpp nana noncopyable php property_tree protobuf pthread py2exe python recieve packet redis runtime sae sbt selinux share_ptr spinlock spirit svn tcp undefined reference vim vmware web windows live wordpress ws xml xshell 一致性哈希 七宗罪 下载 主机 主题 习惯 云计算 互斥锁 交流 产品 代码 代码分享 价值 优化 使用 例子 保钓事件 修改 元旦 全屏 公司 共享 内存 内存泄露 内容 写作 函数指针 分享 分布式 分析 创业 删除 制度 加密 加班 加速 十一 升级 半自动锁 协程 协议 单词 博客 原则 又拍网 反射 反序列化 发展 可视化 右值引用 命令 命令行 命名规则 唯一标示码 商业 团队 团队建设 国庆 国战 图床 图形用户界面 图片 地震 坚持 垃圾回收器 域名 备案 多核 多线程 多语言 多路复用 天龙八部 字体 学习 安装编译 实战 实现原理 容器 屌丝 工作 工具条 左值引用 年会 并发 序列化 开发环境 开源 异常 异步 异步I/O 引用计数 快速 思路 性能 总结 感悟 感触 扁平化 手游 批处理 技巧 技术 接口 提高订阅量 搭建 效率 教程 数据库 数据类型 数据结构 文人相轻 文件 文件格式 文档 文章 新年 新版本 新特性 新誉 方法 旅行 时间 智慧 智能指针 服务 服务器 服务器框架 架构 桂林 检测 模拟 模拟器 武神 水浒无双 求职 沟通 测试 消息内核 游戏 游戏开发 游戏行业 游戏设计 游戏资源 源代码 源码 漫画 版本控制 理性爱国 生活 电影 疑问 百度分享 百度喜欢 目录 目标 硬盘 祈福 神秘的程序员 程序员 程序猿 端游 简单应用 算法 管理 类库 精灵图 系统 线程锁 细心 经验 结束语 缓存 编程 编程规范 编程语言 编译 编译后事件 编译工具 网游 网游服务器 网站黑白 网络,C++ 网络库 网络开发 网络引擎 网络编程 网络设置 翻墙 翻译 翻译文档 职业 职业规划 职场 自动 自动化 自动类型推演 自助程序 自启动 自定义异常 自旋锁 自然风景 致歉 英语 蓝屏 薪资 虚拟化 行业 装饰器 规则 解密 解析JSON 解答 订阅 记忆 设计 评论 识别 语法 语言 请求 读书 调试 谍影重重5 责任 资本 趣味代码 跨平台 转义字符 软件 软件卸载 软件安装 软件设计 输入法 近况 进阶 连接 选择 道歉 避免错误 配色 链接库 问题 雅安 静态断言 静态编译 非编程 面试 页游 项目 项目经理 高估 高并发 高性能 高效

友情链接

其它