自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(147)
  • 收藏
  • 关注

原创 我的编程语言学习经历

越来越发现自己是个语言控。回想一下,上学期间除了课本里的ASM/C/SQL以外,自己业余时间学习过Basic/C++/AS,当然这些都是实际写过代码的:[list][*]Visual Basic是在Corel Draw矢量绘图软件里面编写了一个名片系统,为的是帮助一家大企业快速生成几千人的名片,后来又简单改为一个工牌系统。[*]写C++代码之前看过几本书,包括一本讲C++基础的,名...

2012-01-02 01:59:11 208

原创 [转]大规模服务设计部署经验谈

本文中提出的最佳实践,来自于作者多年大规模服务设计和部署的经验,为设计、开发对运营友好的服务提供了一系列良好的解决方案。■ 文/James Hamilton 译/赖翥翔[list][*] 引言本文就设计和开发运营友好的服务的话题进行总结,得出一系列最佳实践。设计和部署大规模服务是一个高速发展的领域,因而随着时间的流逝,任何最佳实践集合都可能成熟并完善。我们的目的是为了帮助人们:...

2010-06-22 21:47:45 185

Erlang 消息接口和 Stackless Python 的 Channel 比较

Erlang 和 Stackless Python 有一定相似之处,都使用轻量级线程和消息传递(Stackless Python 当然也可以使用共享变量)。简单例子:[code="python"]# 摘自:http://www.stackless.com/wiki/Channelsimport stacklessdef Sending(channel): pr...

2009-10-12 10:40:09 182

Ruby + Mechanize + NetBeans 打造WEB自动化测试平台

一直以来,公司网站主要依赖于人工进行测试,不但无法保证用来监控网站功能异常,也无法进行有效的回归测试。部分频道有单元测试,但跨频道的就很难测试。最近打算推动网站自动化测试,考察了一些开源、商业的自动化测试系统,发现功能都不是很完备,或者使用不太方便。比如我需要大量测试并行运行,需要对同一频道的每一台服务器进行绑定测试,需要模拟登录等,试用过的几个测试系统都无法完成,也没有精力测试更多了。自...

2009-09-27 19:28:05 152

原创 Cilk++,XL

刚看到CSDN新闻:[url=http://news.csdn.net/a/20090804/212939.html]Intel获得Cilk++技术 多核处理器开发将变得更容易[/url],对它本身并不感兴趣,倒是类似在C++代码中插入自己的关键字来生成代码的方式比较喜欢,不过这种方式实现成本太高了,特别是C++中。以前还有一个[url=http://www.aspectc.org/]Aspect...

2009-08-05 10:04:55 137

原创 XL Programming Language

在wikipedia上瞎逛,看一些[url=http://en.wikipedia.org/wiki/Coroutine]Coroutine[/url]相关资料,找到[url=http://en.wikipedia.org/wiki/Generator_(computer_science)]Generator[/url],其中的[url=http://en.wikipedia.org/wiki/G...

2009-07-24 08:21:10 124

原创 放弃selective receive

和同事讨论了一下,觉得selective receive并非必要功能,而且容易写出低效逻辑。另外在c++中作这种匹配可能还是比较麻烦,能想到的方法有:1、通用匹配功能,通过消息类型、流水号、发送方pid2、通过访函数(有lambda就好了)来进行更强的匹配不过写了点示例代码,用起来不太舒服,功能也比较鸡肋。...

2009-07-22 11:17:06 107

原创 开始思考基于状态机的并发实现

还是坚持Actor模型,从Coroutine的实现方案中也看到一些不足,虽然实现相对简单,对效率有一些影响,自动计算并发、并行的关联能力也显得不足。开始思考基于状态机的并发实现,初步设想是对逻辑块进行代码分割,通过对函数附加一些信处来通知编译器作一些改变。貌似C++很困难。。权当是玩的吧...

2009-07-21 13:20:49 471

原创 关于内存管理的一点想法

分布式轻量级线程框架(还没取名)最近几个修改:1、消息对象采用了引用计数,T1在去年一个贴子中建议过,当时不以为然,后来发现不使用引用计数有很多麻烦,还是加上了。2、协议buffer的管理,以前是每连接使用一个大缓冲区,对于几百上千个连接来说并不是什么问题,看到有些对外网的系统保持几万个长连接,这部分缓冲区占了上G内存。现在把它改成链式缓冲区了,缓冲区由多个PAGE链接组成,可动态增长和减...

2009-07-14 16:11:31 118

原创 增加了monitor_node功能

给分布式框架增加了类似 erlang 的 monitor_node 功能,前几个项目都没用到,最近可能要用到了。还想增加 link 功能,不过跨 node 的 link 行为还不是很清楚。...

2009-07-13 14:57:02 203

原创 轻量级线程切换效率

同事测试了libcoro,它的linux版本可以使用4种模式,切换效率分别为:asm: 50,000,000 switch/ssetjmp/longjmp: 42,000,000 switch/sucontext: 2,400,000 switch/spthread: 50,000 switch/sasm版本保存的寄存器比较少,居然达到了5千万次每秒,可能和测试时线...

2009-07-13 12:07:18 160

Cache Pool 架构

先比较一下Hadoop。Hadoop 架构:[img]/upload/attachment/115419/27a1a5f1-6e03-32ca-949b-bc7876823f2d.png[/img]Cache Pool 架构:[img]/upload/attachment/115420/9eb5d180-b664-32e0-97f7-168f648f70ea.jpg[/im...

2009-06-16 10:05:55 218

高可用性Cache池

前段时间开发上线了一个Cache池,使用双层Cache池冗余,宕掉一台机器的Cache失效从1/N降到1/N^2。如果2层Cache池分开机器部署,失效率将会降到0。上线不久刚好碰上一次宕机事故,效果很好。该应用有16台Cache服务器,高峰时每秒访问约20万次,平时的命中率约为99.95%,宕掉一台会给8台db造成1.25万次/秒访问(因为命中率很高所以只计算宕机造成的Cache失效率),基本上...

2009-06-15 16:10:53 99

原创 项目快完成了

原打算分布式平台先使用异步编程方式来完成的,轻量级线程的实现以后再做个协议兼容的改造,后来发现现有项目的同步逻辑的代码要改成异步回调方式,改的东西太多,所以最近几星期把轻量级线程方式先实现了。测试结果还算理想,ucontext的切换效率在超过200万/秒,erlang在我测试的相同机器上非smp版本720万/秒,smp版本不到200万/秒,切换性能的确有差距,不过目前看来是足够用了。还没有去实现L...

2009-03-01 22:56:05 121

原创 平台架构

上次构思了并行/分布式平台的架构,后来觉得还是有些小问题,没有解决:* 底层组件更新问题(Erlang可以热代码升级,但没办法动态更新VM)* 通讯底层依赖问题(Erlang也要依赖底层的稳定性)所以对架构作了调整:* 通讯层作为一个应用组件来提供,而不是底层平台;* 通讯层组件作为分布式服务的发布者和远程调用代理,对它进行重启升级只是瞬时的分布式服务暂停,各服务组件不用重...

2008-08-27 08:56:00 149

原创 今天通宵

十几个同事通宵。运维一个新同事的误操作,让所有服务器都无法登录了,只能到机房一台台重启。各业务负责人、测试部同事、DBA都通宵处理。养足精神,1点就要开始战斗了。...

2008-08-13 21:50:43 117

原创 并行/分布式集群的一点想法

最近在构思一个并行/分布式集群的平台架构,用来解决目前很多服务器无法动态扩容的问题,在过去的一些分布式项目中积累了一些经验,这些架构都是对这些项目共同点的抽象。给它定义了一些特性,先记下来:* 集群由多台服务器组成,每台服务器安装最基本的运行时平台;* 平台负责集群内节点间通讯、应用实例的管理;* 平台是多进程架构,任何应用都是独立的用户进程,使用IPC来通讯;* 平台...

2008-08-13 21:35:52 109

原创 夜不能寐

前几天睡不着时写的,发在公司博客上,转过来留作纪念。推动一个这么大的设想直接立项还是很困难的,不过可以先把一些重要模块立项开发,时间成熟以后剩下的平台工作工作量就相对较少了。所以最要紧的是要把握住,不要留下很多历史问题。-------------------------------------------------------------好久没这么兴奋过了。最近每天都是快一点时睡...

2008-08-08 08:34:01 172

标准库的效率--适时选择自己实现

最近在测试简单的轻量级线程调度器。从fiber转换到generator,性能是提升了不少,但却在意想不到的地方出现了瓶颈。在generator本身切换性能测试时,发现它性能非常高,大概单线程里面每秒切换有2亿次以上,比fiber的200-400万次有了质的提高。但是在实现了一个简单的调度器以后,发现性能急骤下降,到了每秒千万次,实现方式是使用标准库提供的list容器。在测试了c++...

2008-04-27 22:31:44 126

使用C#的Generator编写并发程序

前面说地Generator编写并发程序的优势,当然它本身没有这种能力,需要为它编写调度程序。今天抽点时间写了个简单的,还是满好玩的,它可以调度多个“友好”的并发任务,包括:1、用户自己编写的适时交出控制权的过程2、网络IO由于对C#不是很熟,所以写的可能比较难看,而且IO也只支持网络,有兴趣的可以研究改进一下,比如把它改成SMP版本,增加Actor模型,处理更多的IO模式等...

2008-04-18 23:17:44 339

云计算的架构

一直没搞清云计算和网格计算的差别,为什么就提出个新词了呢?通过对Amazon的Google的观察,发现这两家公司产品方向的一些共同点。1、软件即服务Google App Engine和Amazon SimpleDB/S3都是提供服务的,类似的例子还有最近比较火的各种开放接口。2、应用容器,自动部署,超强的扩展能力Google App Engine更能体现这点。由于开...

2008-04-12 11:41:56 97

Generator

几种并发编程模型开销(从大到小):Process > Thread > Coroutine > Generator == Callback从对机器的并行利用来说,却是完全相反的。Process可以部署在不同机器上;Thread需要在Process里面,往往是很多Thread在一个Process里面,它对多CPU利用还是比较充分的;Coroutine在Thread里面...

2008-04-09 13:46:43 58

并发编程模型:Thread, Coroutine, Callback ...

先总结一下。线程是最容易编写的并发方式,操作系统也提供了最好的支持;协程可以做到更强的并发能力,但需要实现调度器;回调是开销最小的,它本来不是特别为并发来设计的,它是通用的异步化操作的实现模型。注意线程和协程本身也是使用异步来模拟同步,线程由操作系统来模拟,协程由用户级调度器模拟。模拟的过程是:发起事件请求、挂起当前执行过程(线程或协程)、响应事件请求、恢复挂起的执行过程。回调没有...

2008-04-07 00:41:25 129

结合Coroutine和Callback

Coroutine切换成本相对还是比较高的,把一个并发程序改成Coroutine实现性能上可能有比较大的损失。Coroutine切换主要是大量寄存器压栈和弹栈,栈切换也会影响到cache。目前C/C++大量使用的是回调方式,比如win32窗口编程、libevent等,优点是高效,函数调用成本是很低的,也没有栈切换,缺点是不如Coroutine这样连贯。有没有方法让它具有两者的优点呢?有Corout...

2008-03-31 12:00:39 197

linux WEB服务器故障两则,兼谈分布式系统

前段时间公司网站出过两次事故,前台跑PHP的Apache进程大量死锁,造成服务器无负载但不能提供服务,不断重启服务也未能解决问题,但过几小时后自动恢复。这些系统已经稳定运行数月之久,虽然不断有升级但没有出现这类情况。一周后第二次出现相同情况时公司组织人力进行了排查,没有发现问题。由于没有WEB机器登录权限,于是让运维同事做了这些操作来查找原因:1、strace -p xxxx查看任...

2008-03-29 16:50:12 100

C和Erlang轻量级线程性能

简单比较了一下ucontext和Erlang的进程切换效率,在我的机器上ucontext每秒可以完成90万次切换,Erlang则要快得多,每秒可以完成412万次切换,这个性能比较和之前shootout上的测试相近。效率差这么多是可以预见的,C的轻量级线程实现都是栈切换的,要完成寄存器保存和加载,只是不需要经过系统调度。相比之下其它语言的轻量级线程切换通常不是C栈切换,开销要小得多。...

2008-03-13 23:42:35 284

Erlang/IoLanguage/Ruby

最近下决心和Erlang说再见了,想了很多,也用了一段时间,断断续续数落过几次Erlang的优缺点,看得不深,权当我是瞎说。简单整理一下:优点:高并发、分布式、资源管理、高效率(和其它动态语言比较)、热升级、自动并行缺点:语言抽象能力不强、语言扩展能力不强、FP让大多数人不适应、和C库交互不好有一段时间我打算自己做一套类似的框架,使用coroutine,虽然我测试过的corou...

2008-02-16 21:42:32 136

Io Language学习:并行map的运行原理

前面给了个Io异步编程的例子,最后说“和Erlang比一比“,我指的是Erlang做类似的功能需要pmap。为什么Io的List#map可以适应这种并行调用?本文简单分析一下。通过阅读源码,首先可以确定的是map本身没有作任何特殊处理,所以重点放在"@"这个操作符上,它完成异步操作。经过测试发现,方法如果是异步调用(应该说消息是异步发送,说方法调用感觉自然一些),如果不“使...

2008-01-30 13:40:26 149

Io Language学习:异步编程

迫不及待地介绍这个特性,来看一下Io是如何在不改变调用过程的情况下让调用变成异步的。先看一个同步调用:[code]Slow := Object clone do( call := method(i, wait(i) "DONE" println i + 1 ))results := list(...

2008-01-29 14:31:20 151

Io Language学习:基本语法

Io Language没有关键字,所以它的语法很简单:[code]// 赋值a := "hello world"// 取值a// 方法调用:a println// 方法调用2:a split(" ")// 方法调用3:a slice(1, 3)// 方法调用在Io里面叫作message,和Ada, Ruby, Objectiv...

2008-01-29 13:51:03 279

Io Language学习:Prototype-Based Language

Io Language是一种Prototype-Based Language,像JavaScript一样(其它类似的语言我不清楚),这也是个常见的词,JavaScript也非常流行,所以不用再详细解释这个概念了,主要说一下它的库扩展能力,玩过JavaScript/Ruby的对这个特性应该是很喜欢了。举个小例子说一下这种模型的好处。Io Language的Object有一个wait方...

2008-01-26 20:31:54 249

IoLanguage

有点厌倦了ErLang。这种语言有很多优点,但缺点也是致命的。和C库的交互能力不是很好,主要原因是C库都是基于线程、阻塞线程的。Port不能很好地解决需要多线程来操作的资源,所以ErlyDB宁愿自己实现协议。相比之下优点不是很突出了。分布式?一直在做分布式系统,积累的库再借鉴点Erlang的优点,已经解决大部分问题了。并发?状态机也不是很难写,就是有点恶心,当然C++有更高的效率,...

2008-01-24 12:54:08 253

lambda之路...

DMD最近的版本号加入了闭包,感觉非常有用,虽然有些背后动作,不过我是实用派不介意这个。玩的时候忽然想到为什么没有lambda呢?AST还没影,不过可以利用D强大的模板可以使用字符串来先模拟一下。我假想的语法是这样的:[code="cpp"]int[] arr = [1,2,3];int[] arr1 = arr.map(lambda!("int x -> x * x"));...

2007-11-09 22:57:36 96

像Erlang一样写D程序

琢磨了好久,一直没时间来做它。在讨论[url=http://www.iteye.com/topic/76007?page=5]这个问题[/url]的时候就已经有这想法了,后来发现tango里已经有Fiber的实现,昨天终于抽了点时间做了个简单的小玩意,离真实应用还差得很远。测试代码:[code="c#"]import light_process;import tango.io....

2007-09-15 10:23:47 66

抛开析构函数

内存管理通常指的是堆上分配的空间,栈上分配虽然高效好用,但一般是固定大小的、不能持久保存的。堆上分配就有了释放的问题,代码中有一些是使用new/malloc来分配空间的,还有一些是使用内存池,如何在释放时区分是必须的。简单思考以后我感觉首先需要排除delete pObject这种调用,这显然是假定对象是用new分配出来的,或者是对象重载了new/delete操作符。也可以把对象根据分配方式...

2007-08-15 22:19:38 80

如何把erlang应用在项目中?

考虑到现有的项目使用erlang重写的复杂性和erlang对于某些数据库支持的弱点,想结合erlang的分布式、代码热加载、处理高并发方面的优势,和C++在性能上以及大量现有项目上的优势,实现集群部署。考察了erlang和C进行交互的几种方式,ports受限于物理服务器分布,port_driver没测试成功,应该也是受限于本机,最后选定C nodes方式。测试了c server和c...

2007-07-12 15:28:22 311

erlang分布式节点通讯方式

搜到这篇:[url=http://coderplay.iteye.com/blog/94209] erlang网络编程的几个性能调优和注意点[/url]早看到这个就好了,我也是用strace发现它用的是poll,顺便搞清楚了erlang的分布式节点通讯方式。erlang分布式节点通讯,A节点连接B节点,如果在同一机器上,只需要进程间通讯就可以找到节点。不在同一台机器上,A先连接...

2007-07-05 11:26:56 186

[D语言] qsort的尴尬

phobos里面在stc.c.stdlib里提供了qsort,这是个传统的qsort:[code]void qsort(void *base, size_t nelems, size_t elemsize, int (*compare)(void *elem1, void *elem2));[/code]它接受的比较函数是个函数指针,如果我们想使用委托就比较麻烦了,委托是对象指...

2007-05-06 21:31:24 81

网络服务器架构模式

前段时间做了个简单的dtwisted项目,只有个雏形,高层点的东西就没有了。以前用ACE做过小型游戏服务器、视频转发服务器,比较熟悉点的是reactor模式。其间也尝试过proactor,一知半解不得要领,于是放弃了。今天工作闲暇尝试用D语言实现目前工作中用到的文件上传服务器,有了一些思考。下面还是先为D语言做点广告。稍后回来。。。自从用了D语言以后,我可以更加方便...

2007-04-20 20:01:34 129

强类型数值计算

以前曾经讨论过使用typedef来完成强类型的数值计算,最终遇到的问题是D里面没办法定义进行全局运算符重载。最近在struct上找到点灵感,把基本类型用struct包装后使用,就可以重载运算符了,当然效率也是有保证的,D前几个版本已经完成了NRVO,struct也可以在栈上分配,所以不用担心性能,不过编译时注意打开-O选项。简单测试了一下,性能与基本类型基本上没有差别:[cod...

2007-04-10 21:45:50 109

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除