浪湾(langwan) 一个思想跳跃的程序员
百度空间 | 百度首页 
               
 
文章列表
 
2009-07-02 10:43
人要三分毒自己,七分让他人。

-- 献给工作中乐观拼搏的人们。
 
2009-06-10 11:50
我看Nginx源代码的时候,感觉整个系统都在传递log指针。log在nginx里是比较关键的。日志和内存分配是最基础的两个起点代码,最好是在自己写的程序框架中早点完善并实现。以免未来要用大量的精力调整。

1. 日志的源代码位置

日志的源代码在src/code/ngx_log.c及ngx_log.h里。

2. 日志的初始化

在main()函数一开始,对一些基础数据进行初始化,其中之一就是日志,源代码如下:

    log =
 
2009-06-03 08:09
<?php

$s = time();


/*1234567812345678123456781234567812... 重复下去2M左右...456781234567812*/

$e = time();

echo 'ret='.($s - $e);

echo "\n mem=".memory_get_peak_usage();

?>

第一个试验:无APC环境
第二个试验:有APC环境

读者自己尝试,我今天删以前做的实验文件,才翻出来的。

最好用 D:> PHP xxxx.php这种方式执行 避免让其它因素参与进来,例如apache。
 
2009-06-01 21:52
我的团队最主要的语言是PHP,所以我感觉除了研究Nginx这些代码以外,还是要看看PHP的。

【特点一】 有一个“老祖宗类”

abstract class Base 这个类就两个魔术函数__set()、__get()。其它Lib类都要从这个类上进行派生。

【特点二】对require_once进行了二次封装,看下面的代码:

// 优化的require_once
function require_cache($filename)
{
    static $_importFiles = array();
    $filename   = realpath($filename);
 
2009-06-01 12:55
    今天看了一下Thinkphp的源代码,看到了他对主框架的一种缓存机制,以前也没关注到 php_strip_whitespace()函数的用法。

    // 是否生成核心缓存
    $cache =   ( !defined('CACHE_RUNTIME') || CACHE_RUNTIME == true );
    if($cache) {
        if(defined('STRIP_RUNTIME_SPACE') && STRIP_RUNTIME_SPACE == false ) {
       
 
2009-05-27 18:11
在任何一套成熟的C语言写的服务器或者语言或者应用里都包含有一些基本的数据结构操作,

一般是 array、list、hash、buf等,剖析nginx的list是下面这种结构:

元素本身的长度是size,每个桶可承担n项,那么当你插入第n+1个元素的时候,要创建一个新桶。因此nginx的list内部元素是定长结构。

例如:

mctx->variables = ngx_list_create(r->pool, 4,
                     
 
2009-05-27 13:29
WEB服务器最基本的功能就是对请求进行分析,每个请求至少分析header和body两个组成部分。因此分析header的效率也是很关键的。

Nginx在Http处理上依赖于ngx_http_request_s结构体,负责一个请求在整个周期内的所有信息维护。

在这个结构体内,维持着一组与header有关的信息,例如:

ngx_buf_t                                 
 
2009-05-25 21:17
今天很累,明天很困,后天很乏,日积月累成胖子!
 
2009-05-08 21:51
做技术“难”,管理一支团队更“难”,这就是“男人”必经之路。
 
2009-05-07 21:55
和缓冲区有关的最基本的是三个结构:

ngx_buf_t、ngx_chain_t、ngx_bufs_t

分别代表 缓冲区、链表、缓冲区尺寸。

一块缓存区可以存放多段数据,因此在nginx中缓存结构被这样定义:

struct ngx_buf_s {
    u_char          *start; //缓冲区首部
    u_char          *end; //缓冲区尾部
    u_char    
 
2009-05-05 16:33
这两天在看《编程之美》这本书,其中61页的一个模型代码。说的是如何使用2个线程对读写进行分开处理,这样下载文件的速度会快一些。迅雷、蚂蚁、网际快车一般是多个线程读网络,单个线程写。原理可能大同小异。正好赶上自己要写一个升级模块。所以研究了一下。写了一个完成的模拟代码,贴出来:

一共三个文件:

writeBuffer.h 模拟代码的头文件
writeBuffer.cpp 模拟代码
main.cpp 负责生成线程

writeBuffer.h文件
--------------------

#pragma once

#include <windows.
 
2009-04-21 22:15
一事无成、百感交集。终夜不眠、时已苍发。
 
2009-04-19 16:07
第一组为item开头

item_delete_lock_over 检查元素的删除状态,当已被删除且已经过了有效期返回真
item_free 释放元素所占空间
item_get 依据key获取元素
item_init 初始化heads、tails、sizes等。其中前两个是队列指针,后一个是每个SLAB的元素个数。
item_link_q 把一个元素放到队列之首
item_make_header 制造一个Memcached协议头,包括了flags和数据长度-2
item_size_ok 判断数据是否可以存储,当所有slab都无法存储这个数据,返回假,最大的应该是1M
item_unlink_q 从队列中清理

 
2009-04-12 13:32
以往写代码,总是不推荐include很多文件,老的思想是,那样会耗费大量的IO,尤其以前写的是面向虚机的产品,不能奢望客户都有好的设备,并都正确安装了APC、X-Cache或是eAccelerator这样的PHP脚本缓存。所以在IO上总是很抠门,能节省一个就算一个。

也许通过下文的介绍,你突然放松了。但意识这种东西既是你革新的阻力,也是你尽量不要丢的东西。

另外实验都做的比较细,我还是喜欢用数据来证实传说。

试验需要三个脚本:

 
2009-04-05 20:46
今天出门买了一个紫砂杯,的确水的味道感觉甘了许多。砂锅用来煲豆腐,放了点蘑菇、枸杞子,粉丝一把。感觉和道士炼丹差不多。我最喜欢这种DIY的感觉,又不油腻,又需要点火候。

仔细算着先从豆腐开始练起,到一定境界在去练鸡汤。另外听说砂锅容易坏,想让它“长命百岁”,还非常需要主人的细心照顾。

最主要的我感觉砂锅这东西很不错,不伤肠胃。
 
     
 
 
个人档案
 
langwanluo

上次登录:
13天前
加为好友
 
   
 
文章分类
 
 
Php(30)
 
 
 
 
 
Vc(3)
 
 
 
 
     
 
最新评论
 
文章评论|照片评论

 
 

湾哥,我顶你PP!!!
 
 

[表情]
 
     
 
好友最新文章
 
     
 
最近访客
 
 

kuangqing2006

锋镝

yisi564

wcailiao

啊粪

bigbigant

Thinkskip

skivip
     
 
其它
 
已有人次访问本空间
 
订阅RSS  什么是RSS?

您也想拥有这样的空间?请点此申请。
     


©2009 Baidu