• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            那誰的技術(shù)博客

            感興趣領(lǐng)域:高性能服務(wù)器編程,存儲(chǔ),算法,Linux內(nèi)核
            隨筆 - 210, 文章 - 0, 評(píng)論 - 1183, 引用 - 0
            數(shù)據(jù)加載中……

            lighttpd1.4.18中的stat_cache

            這個(gè)cache主要是針對(duì)stat()函數(shù)調(diào)用結(jié)果的一個(gè)cache,這么做有兩個(gè)考慮,一個(gè)當(dāng)然是緩存stat()函數(shù)調(diào)用的結(jié)果,比如需要向客戶端發(fā)送一個(gè)文件的內(nèi)容時(shí),需要知道這個(gè)文件的尺寸,一般都是通過stat()調(diào)用得來;如果僅僅是這樣,那似乎這個(gè)cache是沒有太大必要的,所以還有第二層的考量,http協(xié)議中有一個(gè)所謂的etag的概念,比如你接收了一個(gè)文件,http協(xié)議中帶了一個(gè)字段last-modified存放這個(gè)文件請(qǐng)求的時(shí)間,同時(shí)有針對(duì)這個(gè)文件的etag值,下一次再次請(qǐng)求時(shí),如果該文件沒有更新過,那么直接使用客戶端瀏覽器中緩存的結(jié)果即可.有關(guān)這部分的內(nèi)容可以參考這里. 這里,關(guān)于"文件是否被更改過",在lighttpd中,有三種判斷的標(biāo)準(zhǔn),分別是typedef enum { ETAG_USE_INODE = 1, ETAG_USE_MTIME = 2, ETAG_USE_SIZE = 4 } etag_flags_t; 簡單的理解,就是從inode number值,mtime(修改時(shí)間),文件尺寸三種標(biāo)準(zhǔn)來判斷,而這些,都是可以從stat函數(shù)的返回值也就是stat 結(jié)構(gòu)體中獲得的.

            下面來具體看這個(gè)cache的實(shí)現(xiàn),我也不貼代碼了,還是看偽代碼好了,關(guān)于這部分實(shí)現(xiàn),可以看lighttpd中的stat_cache.c文件:
            根據(jù)查找的文件名算出一個(gè)hash值,
            根據(jù)這個(gè)hash值去sptree中搜索,這個(gè)結(jié)構(gòu)體中cache住之前查詢的結(jié)果
            假如可以在cache中找到記錄,還要將記錄的時(shí)間與服務(wù)器當(dāng)前的時(shí)間做比較,如果一致才認(rèn)為是找到了cache,返回結(jié)果.

            程序繼續(xù)往下走,這個(gè)時(shí)候只有兩種可能,一種是沒有找到,另一種找到了但是時(shí)間不對(duì)應(yīng),因此很可能cache中的信息已經(jīng)過期了.
            此時(shí),需要到文件所在的目錄去查找,對(duì)于緩存目錄結(jié)果的cache而言,如果找到了需要查看緩存數(shù)據(jù)的版本號(hào),以這個(gè)來定義是否一致
            假如找到了目錄信息,版本號(hào)也一致,并且之前也找到了文件的cache,那么認(rèn)為cache中緩存的文件信息沒有過時(shí),返回結(jié)果.

            程序繼續(xù)往下走,此時(shí)可以確定cache中要么是沒有要找的信息,要么是信息過期.
            這時(shí)需要真正調(diào)用stat()函數(shù)獲取文件相關(guān)的信息,并且插入到cache中,
            同時(shí),如果文件的目錄信息之前是沒有的,也需要將文件所在目錄的信息插入到cache中,同時(shí)保存cache數(shù)據(jù)的當(dāng)前時(shí)間點(diǎn).

            最后,還需要針對(duì)etag做一些處理,根據(jù)之前說的etag類型將相關(guān)信息存放到cache中,這里只需要etag值不會(huì)重復(fù)就可以.


            提到cache目錄信息這一點(diǎn),lighttpd采用了FAM的API,使用這個(gè)API,可以把需要監(jiān)控是否發(fā)生變化的目錄加入到一個(gè)集合中,這個(gè)集合可以對(duì)應(yīng)一個(gè)fd,這樣,就可以select/epoll等多路復(fù)用I/O處理器在文件目錄情況發(fā)生變化的時(shí)候去異步通知服務(wù)器更新cache中關(guān)于該目錄的情況了.

            關(guān)于FAM API,可以參考這里:
            http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?coll=0650&db=bks&fname=/SGI_Developer/books/IIDsktp_IG/sgi_html/ch08.html




            posted on 2009-12-16 19:46 那誰 閱讀(5766) 評(píng)論(4)  編輯 收藏 引用 所屬分類: 服務(wù)器設(shè)計(jì) 、lighttpd

            評(píng)論

            # re: lighttpd1.4.18中的stat_cache  回復(fù)  更多評(píng)論   

            I do guess that it is assertable to go to this site, just because simply here students would see the imazing release about this good topic. Thus, the <a href="http://www.master-dissertations.com">thesis writing service</a> should utilize that for thesis titles composing.
            2010-07-09 08:33 | CaroleSTOKES30

            # re: lighttpd1.4.18中的stat_cache  回復(fù)  更多評(píng)論   

            You do a great job. I have already put in a good word your material to friends because I find it very beneficial especially when you need some chapter on your essays or term papers. Thanks again.
            2010-07-09 22:14 | custom essay

            # re: lighttpd1.4.18中的stat_cache  回復(fù)  更多評(píng)論   

            That is possible to receive the data related to custom writing or about this topic in modern world. But before some students buy the written essay, they have to search for the distinguished essay writing service.
            2010-10-07 13:15 | buy term paper

            # re: lighttpd1.4.18中的stat_cache  回復(fù)  更多評(píng)論   

            I could just only imagine about such good talent in dissertation form referring to this good topic creating. We normally take the assistance of the reliable dissertation writing service. In my situation this fits me the best.
            2010-10-09 06:55 | dissertation writing

            # re: lighttpd1.4.18中的stat_cache  回復(fù)  更多評(píng)論   

            Friquently, some guys, which require the term paper online, don’t actually know the best way to get that. But it can be possible to buy an essay online from the great persuasive essay writing service. It’s a standard option for most people.
            2010-10-09 07:00 | pay for writing essay
            99精品国产在热久久无毒不卡| 国产精品99久久99久久久| 99久久久精品| 久久ww精品w免费人成| 国产成人精品综合久久久| 久久伊人精品一区二区三区| 人人狠狠综合久久亚洲高清| 99久久精品久久久久久清纯| 久久精品国产亚洲AV无码偷窥| 合区精品久久久中文字幕一区| 色综合久久中文字幕综合网| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 久久免费国产精品一区二区| 久久久久久久久波多野高潮| 伊人久久大香线蕉精品不卡| 99久久精品毛片免费播放| 一本色道久久88加勒比—综合| 久久AV高清无码| 久久发布国产伦子伦精品| 久久99国产精品尤物| 亚洲va久久久噜噜噜久久天堂| 亚洲国产美女精品久久久久∴| 狠狠狠色丁香婷婷综合久久俺| 久久精品国产99久久久| 久久国产精品99久久久久久老狼 | 中文字幕亚洲综合久久| 久久久WWW成人免费精品| 久久亚洲精品成人AV| 99热都是精品久久久久久| 一本色道久久HEZYO无码| 精品久久久久久国产牛牛app| 亚洲AV日韩精品久久久久 | 国产99久久九九精品无码| 亚洲精品无码久久一线| 国产精品女同一区二区久久| 精品无码久久久久久午夜| 中文字幕无码久久人妻| 中文精品久久久久国产网址| 久久精品国产精品亚洲毛片| 青春久久| 久久精品国产AV一区二区三区|