Intelligence without ambition is a bird without wings.

2015-05-21
fastcgi编程经验

  • 不能再FAST_Accpet()IO
  • 不能使用C++IO
阅读此文

2015-05-21
centos-安装netstat

yum install net-tools
阅读此文

2015-05-20
apache-常用命令

  • 启动类

    apache2 -k start|restart|graceful|stop|graceful-stop

  • 查看版本信息

    apache2ctl -V

阅读此文

2015-05-20
mysql-常用命令

  • 连接数据库

    mysql -h <host> -u <username> -p <password>
    
  • 查看有哪些数据库

    show databases;
    
  • 使用某个数据库

    use <database_name>;
    
  • 查看有哪些表

    show tables;
    
  • 查看系统变量

    show variables;
    
  • 查看表创建语句

    show create table <tablename>;
    
  • 修改root密码

    • 先登录

      SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
      
阅读此文

2015-04-17
注册表

组成

注册表采用树结构

    • 树节点,值项的依赖
    • 一个键可以有多个值项
    • 每个键都有一个默认值项,值名称为空
  • 值项

    • 用来存储具体的数据
    • 值项由名称,数据类型,数据组成
    • 每个键都有一个默认值

参考

  1. wiki-注册表
  2. msdn-注册表.aspx)
阅读此文

2015-04-15
redis-散列

要点

  • hash的键值是字典类型,存储的是字段(field)和字段值的映射,字段值只能是字符串,意味着不能嵌套!

  • hash适合存储对象

    • 使用对象类别和ID构成键名(关系数据库中的表名和ID)
    • 使用字段表示对象的属性(关系数据名中的列名)
    • 字段值即属性值(关系数据库中的值)

参考

  1. redis入门指南
阅读此文

2015-04-15
redis-字符串

要点

  • 字符串类型是redis中最基本的数据类型,其他数据类型只是组织字符串的方式不同

    • 列表类型是以列表形式组织字符串

    • 集合类型是以集合形式组织字符串

  • 字符串可以透明存储任何形式的字符串,二进制数据,如邮箱地址,json,图片等

操作

| 操作 | 命令 |
|———-+——–|
| 赋值 | set |
| 取值 | get |
| 追加 | append |
| 获取长度 | strlen |

参考

  1. redis入门指南
阅读此文

2015-04-15
redis-多数据库

要点

  • 一个redis实例提供了多个用来存储数据的字典

  • 某个数据库对外都是一个从0开始的递增数字命名,默认支持16个,可通过参数databases修改

  • 客户端与redis连接后,默认选择0号数据库,可通过SELECT命令切换

  • 不支持自定义数据库名称

  • 不支持账户密码控制(意味着没有权限控制)

  • 数据库之间并未完全隔离,如FLUSHALL命令可清空所有数据库内容

    所以,不同的应用应该使用不同的redis实例,而不是使用同一个redis实例不同数据库。

参考

  1. redis入门指南
阅读此文

2015-04-14
node.js-异步IO原理

要点

  • 实现libuv中间层,根据操作系统采用相应实现(win:IO完成端口,*nix:libev/libeio)

参考

  1. 深入浅出Node.js(五):初探Node.js的异步I/O实现
阅读此文

2015-04-14
同步和异步IO

IO的过程

  1. 等待流数据准备好

  2. 从内核向进程复制数据(决定同步还是异步)

对unix来讲:阻塞式I/O(默认),非阻塞式I/O(nonblock),I/O复用(select/poll/epoll)都属于同步I/O,因为它们在数据由内核空间复制回进程缓冲区时都是阻塞的(不能干别的事)。

只有异步I/O模型(AIO)是符合异步I/O操作的含义的,即在1数据准备完成、2由内核空间拷贝回缓冲区后 通知进程,在等待通知的这段时间里可以干别的事

同步,异步,阻塞,非阻塞

同步和异步关注的是消息通信机制。

  • 同步意味着会等待在操作完成后继续执行

  • 异步则是函数调用后,继续执行,进行的操作结果采用其他方式通知或处理(如回调函数,信号,消息等)

阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。

为什么需要异步IO?

假设一种场景,某任务需要从磁盘文件读取数据,需要时间m。从网络读取数据,需要时间n。

考虑这段代码:

1
2
getFileFromDisk("file_path");
getFileFromNet("url");

  • 若采用同步方式,则需要时间为m+n
  • 若采用异步方式,则需要时间为max(m, n)

由此可见,当存在多个类似IO操作时,异步能极大地提高程序效率!

参考

  1. 怎样理解阻塞非阻塞与同步异步的区别?
阅读此文