自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Coding Art

对于Coding,我是一只蜗牛

  • 博客(13)
  • 收藏
  • 关注

原创 Unix Network Programming {Nonblocking IO}

/dev/poll和kqueue都是类似于epoll的技术,解决select/poll的效率问题,分别是Solaries和FreeBSD的技术。Connect超时时间是由系统决定的,recv和send的超时可以SO_RCVTIMEO and SO_SNDTIMEO决定,select和epoll可以设置超时时间。当然这都是针对block的socket的。用fc

2010-03-11 01:10:00 555

原创 Unix Network Programming {socket 选项}

SO_BROADCAST 是否支持广播,只能用于UDP,ETHERNET等支持广播的协议。SO_DEBUG 只支持TCP协议。开启时,内核会跟踪所有发送和接受的数据包,用trpt 命令来分析。SO_ERROR是一个用于读取socket错误的选项。SO_KEEPALIVE 如果连接双方超过两个小时没有数据交换就发送探测包。这个时间的修改要看各种内核

2010-03-10 00:05:00 597

原创 linux内核情景分析{信号 进程}

Alloca函数,用于在栈上分配内存,gcc的动态数组就是通过它来支持的。中断和信号的概念是不同的,信号是发给进程的,硬中断是内核和硬件之间,都是异步的,不可预知的。系统调用进入内核是不发生进程切换的。DIRECT_IO不使用系统IO缓存,还要保证缓冲区内存不被swap,这个用于那些用户层进行缓存的应用程序。可重入的一定是线程

2010-03-09 01:18:00 534

原创 linux内核情景分析{中断 系统调用 内存}

Linux的系统调用是通过中断来实现的,从用户态进入系统态。用户态和系统态有很清晰的区分,保证了安全。系统调用表是系统调用的跳转表。使用寄存器传递参数,而不是栈,因为用户态是无法访问系统栈的。地址错误是通过页面异常来处理的。Linux内核并不支持真正意义上的线程,LinuxThreads是用与普通进程具有同样内核调度视图的轻量级进程来实现线程支持的。这些轻量级进程拥有独

2010-03-08 01:53:00 518

原创 linux内核情景分析 UNIX环境高级编程 {进程 文件 内存}

FILE结构封装的是一个流,内核中的文件描述符是它的一部分。标准IO的缓存:全缓存,行缓存,无缓存。这个缓存是在应用层,进程间是隔离的。而内核中文件的缓存是进程间共享的,作为inode的一部分来管理的。FILENO调用获得FILE结构的文件描述符,用于dup2。mmap避免了两次数据拷贝,标准IO库的写产生了两次数据拷贝:

2010-03-06 01:35:00 655

原创 linux内核情景分析{2,存储管理}

  现在才明白了内核空间和用户空间的区别。内核空间是所有用户进程共享的,用户空间则是每个进程有自己的一份。凡是存在内核空间的数据都可以在用户进程之间共享。内核管理内存完全采用了分页管理。  找到一本好书《Understanding the Linux Kernel》,简称ULK,和ACUP一样牛。以后研究。

2010-03-04 00:06:00 281

原创 Beautiful Code {16. The Linux Kernel Driver Model: The Benefits of Working Together}

题目好像很玄的样子,有点《集市与教堂》的味道。  从代码上来讲,这是一个用c实现面向对象的继承特性,像是解释C++的继承如何实现的。记得有个朋友提醒过我子类对象的内存不一定是父类的内存在后面,虽然实际是这样的,但标准没有要求。 #define container_of(ptr, type, member) ({ / con

2010-02-24 22:42:00 326

原创 flex {as总结}

  作为一个不入流的flex开发人员总结一下不入流的感悟。  我一定要记住,as中的变量的作用范围只有两种,function和class,所以要想用闭包就需要一个createFunction的东西才行,不要妄想在for循环中用闭包了。看了一下as3的参考,发现它的前世和lua还真像,as3的继承其实还是prototype来做的,就是lua的元表了,但是as3的代码看起来很像java了,lua会

2010-02-05 23:05:00 349

原创 boost {asio reactor}

  学习了boost库。幸亏自己做过一个IOCP的框架,理解asio的设计还容易一些,虽然自己以前不知道这个就是reactor,。ACE也是实现的reactor,当时只接触过proactor的程序,看了半天也没看懂,明天再回过头学习下ACE,应该会好一些了。reactor是真正的异步,和IOCP的思路差不多,只不过用epoll,poll实现reactor就要做一些基础的工作了。说到底还是异步,异步

2010-02-05 22:23:00 1453

原创 google sparsehash { hash table }

  一种hash table的实现,为了在速度和空间上做一个均衡,内部还是数组的实现.迭代器是单独写的,里面加了自己的逻辑,我写过一个buffer也用了迭代器,感觉这种风格符合C++的风格,看起来舒服点。像一些manager的封装都可以用迭代器来引入stl的风格。   看到一块模板代码,做类型判断的,很简洁清晰,使用了继承,而不是单独的去typedef或者enum。   平台相关的文件的命

2010-01-10 10:03:00 949

原创 googletest {全局变量的作用}

   与static变量相比,全局变量的优势就是初始化的时刻更确定。googletest使用全局变量来注册每个test case。这样做的好处还有就是对框架的侵入最少,其他的方案或者是显式的注册,或者是通过Include的方式,这些都不如使用全局变量简洁有效干净。框架使用了很多宏来生成代码,使用的visiter模式很多。反正全局变量不是为了真的使用它,只是为了new一下,把变量名字处理的保证没有冲

2010-01-08 05:26:00 1318

翻译 googletest {console 字体颜色}

  写服务器程序打印出来的文字都是没有颜色的,看起来不够醒目,尤其是日志。在googletest中发现这段代码,可以设置输出颜色,支持终端// Helpers for printing colored strings to stdout. Note that on Windows, we// cannot simply emit special characters and hav

2010-01-08 04:29:00 1023 1

原创 就这样开始

就这样开始吧,做一个专注的人。

2009-12-31 05:31:00 269

空空如也

空空如也

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

TA关注的人

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