关于友情链接的处理

博客搬迁友情链接处理 因博客搬迁到Hugo+github静态页面,之前sb忘记了备份之前的友情链接,hugo-export并没有导出原来WordPress放在数据库的一些内容,导致我现在无法还原了,希望看到本文章的同学在下面留言给我,我会逐一恢复原来的友情链接,万分抱歉。……

阅读全文

关于WebSocket的一些总结

WebSocket下面简称ws ws出现之前的http连接 在ws出现以前,http都是客户端发起-服务器回应的模式,全靠客户端主动交流,服务器完全是被动等待请求,回复数据。如果需要服务器主动推送信息给客户端(例如现在手机上的应用提醒),只能靠客户端主动pulling 或 long pullin……

阅读全文

接口设计六大原则

一. 单一职责原则 Single Responsibility Principle, 简称SRP。 定义 There should never be more than one reason for a class to change 应该有且仅有一个原因引起类的变 准则 职责的划分?单一的定义和级别? 应该根据实际业务情况而定。关注变化点。 实际使用时,类很难做到职责单一,但是接口的职责应该尽量单一。 二. 里氏替换原则 Liskov Substitution Principle, 简称LSP。 定义 Functions that use pointers or references to base……

阅读全文

Unity3D 2017.x Failed to start Unity Package Manager

升级到U3D 2017.x后,发现打开任何工程都会卡在Starting server处,经查看Editor.log后发现,是重试了几次后超时了,导致无法连接UnityPackageManager,网上搜了下之后,用如下方法解决的。先记录下, 修改hosts记录,将UNITY_NOPRO……

阅读全文

ArkGameFrame开源跨平台游戏服务器框架0.2.0版本发布

各位朋友好,ArkGameFrame 0.2.0 版本发布了,Ark 是一个游戏服务器框架,主要提供了抽象的数据组织结构和通用的服务器架构,主要特性包括: 抽象且通用的数据组织框架 面向数据和接口编程 事件和数据驱动模式 插件化和模块化 自由组织的分布式架构 跨平台 Excel 配置文件(对策划友好) 高性能(libe……

阅读全文

说说协程coroutine

近几年来,协程的概念和使用被越多越多的人提到了,确实帮助很多人解决了很多问题,例如网络上的问题,异步逻辑流程控制等。我的工作中也接触到一些,所以打算总结下。

简单来说,协程就是一种用户态、编程语言层面的轻量级线程。

然而线程与协程又有很多差异的地方,线程是靠操作系统OS本身来调度,是抢占式的任务处理方式,谁抢到算谁的,所以大部分多线程程序中都要单独调用sleep来让出CPU给其他线程;线程每次阻塞、切换时都需要系统调用system call,然后调用调度函数来决定运行哪一个线程;协程拥有自己的用户态的上下文和栈(分为stackless和stackfulness,这个下一篇文章来讲),协程切换时,先将寄存器上下文和栈内容保存起来,再次切换回来的时候再恢复之前保存的内容继续运行;

通过上面的讲解,明白了一个道理,协程是编译器来保证的,线程是操作系统来调度的;协程能更好的保证流程,而线程需要仔细处理公共数据资源;协程本质是单线程的,能提高单个CPU core的性能,适合计算密集型的应用;协程切换非常轻量,所以能大量的使用,线程切换成本较高,一般要控制线程数。

 

协程的概念和原理明白了后,其实有点类似于异步事件驱动,可以看看libevent/libuv等经典的C语言库,发现大量使用了异步事件回调,有一个event_loop来循环检查要处理的事件,不过就是代码相对协程恶心了一些,协程能让用户以类似同步的方式来处理异步流程,更加便于理解。

 

不过协程也是有缺点的,无法利用现代多核机器的性能,所以还需要配合多进程来提高性能;有阻塞操作的时候依然会阻塞整个进程,需要用其他方式来解决。

……

阅读全文

我为什么离开MK

近半年都没发过文章了,工作比较忙,自己也懒得写。近期因为我辞职在家休息,有了一个短暂的空闲期,所以打算总结下这一段时间的收获。 先说说工作上的事情,从13年底进MK,先是开发了《全民无双》,然后短暂9个月运营后,又去挑头开发了《择天记》项目,然后因为种种原因,现在辞职了。 说说为什么……

阅读全文

[转]并发编程: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

……

阅读全文

ArkGameFrame实战系列文章说明

ArkGameFrame是一个面向中小型企业的开源游戏服务器敏捷开发框架,继承自NFrame,主要是项目的管理方式不同,这块经过沟通,很难有一个大家都满意的结果,所以暂时新作一个组织结构来管理这几个项目,后面再看结果是否合并。 关于这个框架的设计过程的介绍文章,请查看NF博客。 前面……

阅读全文

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

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

阅读全文

最近文章

分类

标签

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 责任 资本 趣味代码 跨平台 转义字符 软件 软件卸载 软件安装 软件设计 输入法 近况 进阶 连接 选择 道歉 避免错误 配色 链接库 问题 雅安 静态断言 静态编译 非编程 面试 页游 项目 项目经理 高估 高并发 高性能 高效

友情链接

其它