自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Linuxb的秘密花园

本人热衷于技术分享技术交流,欢迎Geek精神的技术伙伴一起学习交流

原创 Async特性的语法糖下

本文现在这个时间点写貌似必要不大,因为内容比较基础,不过介于如果掌握不准确可能在一些bug面前束手无策,遂当作备忘录好了。今天就讨论一个node里面很简单却又是很值得关注的话题--异步回调,相信很多小伙伴都熟知著名的回调地狱,社区这几年也是人才辈出,产出无数种优雅解决地狱的方案,最后ECMA一声号...

2017-03-07 18:32:57 800 0

原创 Go与并发模型

最近,Google的Golang荣获2016年度编程语言,作为一个谷粉,我理应写一篇文章以表祝贺,正好碰上最近在弄一个支持IO无锁并发的脚本引擎,参考了一些Go内部的设计思想,真想不到Go的萌萌的外表下竟隐藏着一颗如此强大的内心,本文主要的分析焦点就是做到更干净的并发编程,让并发编程的代码更加优雅~

2017-01-11 17:12:19 3785 1

原创 神之门V8-----Event loop的舞池盛宴(3)

上一篇文章中我献上了一段神奇的代码,并给出了运行结果,也分析了setTimeout这个函数,在本文,我还会带领大家继续分析setImmediate函数以及nextTick原理以及MakeCallback函数跟contextify的问题。OK,跟着独操引擎的男人继续我们的代码之旅吧~~setImme...

2016-12-01 17:59:34 1333 1

原创 神之门V8-----Event loop的舞池盛宴(2)

在上一篇文章中,我们分析了node的EventEmitter与EventLoop的关系,结论就是它们真的没多大关系,代码表现出异步只是emit函数调用的时机被我们手动设定在eventloop里面。OK,跟着独操引擎的男人继续我们的代码之旅~JS对象与C++ Runtime 代码这一部分涉及到V8...

2016-11-30 16:32:50 2076 0

原创 神之门V8-----Event loop的舞池盛宴(1)

故事的开始由于各种原因,没有继续写V8引擎系列文章有相当长的一段时间了,今天本来不打算写解剖node的文章的,但一个contextify被扰乱的native问题实在引起了我对它的兴趣,好吧,我又重新回归了这个神奇的世界,看了一些文档资料,只能有个大概的印象,然而作为一个独操引擎的男人,既然入了坑,...

2016-11-29 21:28:18 830 0

原创 十指相扣:陪binderIPC度过的漫长岁月(3)

现在该分析一下最初的binder进程是怎么产生的了,首先sm是一个linux内核的守护进程,我们要知道她的来路,还是先看看她的入口函数:int main(int argc, char **argv) { //这个结构体存放binder进程的状态信息(binder设备信息) st...

2016-02-04 00:03:11 581 0

原创 十指相扣:陪binderIPC度过的漫长岁月(2)

上一篇文章中,我们分析了ipcbinder框架的基本原理,简要的说就是我们client端的binder向BD写入数据,然后BD再向server端传递数据,那么问题来了,这中间是不是发生了两次数据拷贝呢?这个问题比较深刻,然而事实也比较深刻,只有一次数据拷贝,这是google对binder做了一次优...

2016-02-03 17:54:21 538 0

原创 十指相扣:陪binderIPC度过的漫长岁月(1)

Android中的ipc一直被称作系统设计中一个比较复杂的地方,近来特意研究了一下ipc,感受了一下这个伟大的设计。说到ipc,肯定不会离开binder,binder是什么呢,它的中文名叫粘合剂,两个不同内存空间的进程能够得到进行通信,必然需要一样东西将两者进行“粘合”,其实我们在activity...

2016-02-03 14:44:28 441 0

原创 神之门V8(2):GC的混乱之治(下)

在上一篇文章中,分析了v8heap中新生带的垃圾回收算法,本文就主要介绍老生带的回收算法,本人自己用C++模拟了一下GC的在老生带的回收算法,接下来会结合代码以及进行分析,由于是我自己写的代码,我肯定会有属于自己的思想在里面,所以个别的细节可能跟V8GC真实的状态有所差异,但总体的思想还是基本体现...

2015-11-28 22:33:22 1827 0

原创 神之门V8(2):GC的混乱之治(上)

前面一篇文章介绍了v8中对象是怎么的smart,在这里,我们的对象指针就会变得更smart了,先看看对象在heap中是怎么分类管理的, 下面是V8heap的结构图:对jvm有过了解的伙伴就会发现这玩意很像jvm中的heap结构,而且jdk8中删除了持久带后总体的结构更像了,不错,v8堆正是参考了...

2015-11-28 02:21:19 1188 0

原创 神之门V8(1):解密handle<T>

我们知道js跟php,java这些都可以说是托管于其他本地程序的语言,它们需要自己的一套运行环境,比如java的jvm,php有zend引擎,也有hhvm,当然本场主角v8引擎也给了js同样的东西,v8引擎号称天下第一快,背后肯定隐藏着许多不为人知的秘密,待我来一一探究,关于v8的编译优化,内联代...

2015-11-27 22:42:07 1554 0

原创 旋转华尔兹,nodejs的背后

在使用nodejs的时候,会感觉写的很痛快,尤其是对于处理高并发的请求时,密集的IO操作,我们可以在代码中用回调链轻松的完成,只需要一个单进程,单线程就能完成频繁请求的分发调度。js能做到这一步让我吃惊,于是决定打造一套属于我的node运行内核,完成对于回调链的驱动,也顺便感受一下nodejs的设...

2015-11-26 13:16:48 403 0

原创 内核艺术系列:绚丽整个php的zend(1)

让我们的故事从一条最简单的php代码开始:$obj = 6;这条代码估计大家再熟悉不过了,不就是写一个变量再给它赋值为6么,然而,你看到的只是echo出来的表象,我既然要说zend引擎的设计,那就得越过php这件华丽的外衣,只是最底层的内核,看看它背着我们到底干了什么。php其实就是一个c程序,所...

2015-11-26 00:33:16 689 0

原创 风骚裙摆--最后的内存池

上一篇文章我介绍过了对象池,后来想了一下,发现就这么用模板以及一些raii技法,工厂模式实现一个对象管理接口似乎有点局限性,首先它很难做到单例模式,因为一个程序总不能来来去去就创建那么一种对象吧,但单例的情况下,这个对象池的实例只能被构造一次,也就是说,只能填充一次模板实体,好咯,既然有局限性,那...

2015-10-31 03:17:03 5263 0

原创 进击的对象池

前面有一篇文章说过在代码中如果要高频地创建一个对象(比如一些及时通信的socket等等)怎么通过raii技法进行内存优化,而且这些对象在程序中的生存周期比较短,搞几下就没用了,尤其是一些线程之类,如果要完成什么阻塞任务,虽然它就搞那么几秒,但放在主线程就是会卡住界面,让用户体验很差,然而线程的开销...

2015-10-21 17:52:37 443 2

原创 借刀杀对象--Raii技法(C++版)

我们都知道C++有一点很不爽的地方就是内存管理需要手动,像我有时候使用多了像C#,java之类托管语言(C#在clr中可以通过gc进行垃圾回收,java在jvm中也有相应的gc回收),再写C++就会有点不爽了,甚至会疑神疑鬼的,写完一段代码就会想想 天哪,我的代码有没有哪里忘了释放内存啊,有没有内...

2015-10-19 18:50:30 464 0

原创 JVM之旅--GC探秘

说到GC,首先要说到GC实现一个很重要的角色,那就是jvm(java虚拟机),jvm作为java的一个托管平台在java代码的运行过程中提供了诸多的性能优化,确保代码的高效率执行,至于怎么优化就暂且不关注这个问题,我们先来看看oracle对于jvm的架构说明:在这个图里面我们可以看到,我们用jav...

2015-10-02 00:50:17 616 2

原创 Reference VS Pointer

首先我们来看看java的引用,java的引用不同于C指针,它并不可以指向它想指向的任何地方,比如int,char等基类型都是不允许的,java也是类型安全的,并不允许re-interpret cast操作,在c++或者c指针就会允许这个操作,直接对内存进行re-interpret,java跟c++...

2015-09-22 18:50:02 507 0

原创 约战Angular中Promise(2)

上回说到回调金字塔会形成一个then()的调用链,以及相应在pending的等待队列产生变化,现在我们就来详细分析。我们首先来看看我们在promise中定义的回调函数是怎样被执行的,先看看call stack:看到最底层的三个函数我们应该觉得非常熟悉,这不就是ng的事件轮询么(详情见本人的ng事件...

2015-09-18 17:36:52 479 0

原创 约战Angular中Promise(1)

在angular出现之前,web开发中前端跟后台的交互采用xhr的ajax技术,即xhr的异步请求,异步肯定就不能阻塞当前的线程,所以这个时候回调就非常重要,在commonJS中曾定义过promise规范,即一个异步请求函数把一个耗时操作请求提交出去,可以马上获得返回值,这个返回值就是传说中的pr...

2015-09-18 02:47:59 695 0

原创 wpf探秘之B哥Dispatcher私房菜(2)最终回

上次我们说到Dispatcher内部有一个管理DO的队列,我暂且称之为DOQueue,在本文我就来重点说DO的处理机制,首先我们来看看DO是怎样被创建的,wpf并没有改变太多win32的内核,消息循环的机制已经深入人心了,同样窗体还是有自己的消息循环,如上面介绍win32时,消息循环的处理者肯定为...

2015-09-17 18:26:03 440 0

原创 wpf探秘之B哥Dispatcher私房菜(1)

一切从我们熟悉的windows系统说起,话说windows系统,有一个概念是大家都不会陌生的,那就是消息循环,我们先来看看传统的win32是如何完成消息循环的,用C写过窗体程序的伙伴估计都会比较熟悉,消息循环在本质上就是一个大大的while循环,然后主线程里面创建消息队列,然后不断从消息队列中提取...

2015-09-17 15:34:46 484 0

原创 与AngularJS的约会之事件循环+watchers源码分析

ng中说到事件轮询,第一个拿出来的肯定是digest函数啦,在digest()的事件轮询中,一共会轮询两个列表,一个为AsyncEvalQueue,一个为Watchers列表,*apply方法进入ng上下文执行的Callback fn将其context修改为ng的控制域,先从queue取出每一个a...

2015-09-17 05:01:55 1200 0

原创 从Activity的启动细窥BinderIPC(3)

本文章我们再回来说说ActivityManagerService

2015-09-17 03:54:37 339 0

原创 从Activity的启动细窥BinderIPC(2)

上次的源码分析出现了一个runOnce()函数,实际的孵化过程其实是在runOnce()里面,本文章我们再来看看这个函数的源代码

2015-09-17 03:44:15 333 0

原创 从Activity的启动细窥BinderIPC(1)

android基于linux内核,linux有丰富的进程通信机制,比如传统的pipe,signal,trace机制,然而android毅然放弃祖传遗产 另起一招,名曰BinderIPC。。。更新—————————————————————————————-下面来进行详细的讨论: 本文章从...

2015-09-17 03:24:47 1464 0

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