最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP7中I/O模型內(nèi)核剖析詳解

 更新時(shí)間:2019年04月14日 09:31:57   投稿:laozhang  
在本篇內(nèi)容中小編給大家整理了關(guān)于PHP7中I/O模型內(nèi)核的相關(guān)知識點(diǎn)內(nèi)容,有需要的朋友們跟著學(xué)習(xí)下。

1.同步:我客戶端(C端調(diào)用者)一個(gè)功能,該功能沒有結(jié)束前,我死等結(jié)果。
2.異步:我(c端調(diào)用者)調(diào)用一個(gè)功能,不知道該功能結(jié)果,該功能有結(jié)果后通知我,即回調(diào)通知

3.阻塞:就是調(diào)用我(s端被調(diào)用者,函數(shù)),我(s端被調(diào)用者,函數(shù))沒有完全接受完數(shù)據(jù)或者沒有得到結(jié)果之前,我不會返回。

4.非阻塞:就是調(diào)用我(s端被調(diào)用者,函數(shù)),我(s端被調(diào)用者,函數(shù))立即返回,得出結(jié)果后通知調(diào)用者

五種I/O模型

(1) 阻塞I/O (Blocking I/O)

當(dāng)用戶進(jìn)程進(jìn)行系統(tǒng)調(diào)用時(shí),內(nèi)核就開始了I/O的第一個(gè)階段,準(zhǔn)備數(shù)據(jù)到緩沖區(qū)中,當(dāng)數(shù)據(jù)都準(zhǔn)備完成后,則將數(shù)據(jù)從內(nèi)核緩沖區(qū)中拷貝到用戶進(jìn)程的內(nèi)存中,這時(shí)用戶進(jìn)程才解除block的狀態(tài)重新運(yùn)行。

(2) 非阻塞I/O (Non-Blocking I/O)

用戶進(jìn)程只有在第二個(gè)階段被阻塞了,而第一個(gè)階段沒有阻塞,但是在第一個(gè)階段中,用戶進(jìn)程不需要盲等,不停的去輪詢內(nèi)核,看數(shù)據(jù)是否準(zhǔn)備好了,因此該模型是比較消耗CPU的。

(3) I/O復(fù)用(I/O Multiplexing)

I/O執(zhí)行的兩個(gè)階段都是用戶進(jìn)程都是阻塞的,但是兩個(gè)階段是獨(dú)立的,在一次完整的I/O操作中,該用戶進(jìn)程是發(fā)起了兩次系統(tǒng)調(diào)用。和阻塞I/O不同的是第一段可以等待多個(gè)描述符就緒

(4) 信號驅(qū)動的I/O (Signal Driven I/O)

只有在I/O執(zhí)行的第二階段阻塞了用戶進(jìn)程,而在第一階段是沒有阻塞的。該模型在I/O執(zhí)行的第一階段,當(dāng)數(shù)據(jù)準(zhǔn)備完成之后,會主動的通知用戶進(jìn)程數(shù)據(jù)已經(jīng)準(zhǔn)備完成,即對用戶進(jìn)程做一個(gè)回調(diào)。該通知分為兩種,一為水平觸發(fā),即如果用戶進(jìn)程不響應(yīng)則會一直發(fā)送通知,二為邊緣觸發(fā),即只通知一次。

(5) 異步I/O (Asynchrnous I/O)

當(dāng)用戶進(jìn)程發(fā)起系統(tǒng)調(diào)用后,立刻就可以開始去做其它的事情,然后直到I/O執(zhí)行的兩個(gè)階段都完成之后,內(nèi)核會給用戶進(jìn)程發(fā)送通知,告訴用戶進(jìn)程操作已經(jīng)完成了。

I/O多路復(fù)用技術(shù)

select

(1).select()的機(jī)制中提供一fd_set的數(shù)據(jù)結(jié)構(gòu),每一個(gè)元素都能與一打開的文件句柄(不管是Socket句柄,還是其他 文件或命名管道或設(shè)備句柄)建立聯(lián)系,建立聯(lián)系的工作由程序員完成, 當(dāng)調(diào)用select()時(shí),由內(nèi)核根據(jù)IO狀態(tài)修改fd_set的內(nèi)容,由此來通知執(zhí)行了select()的進(jìn)程哪一Socket或文件可讀或可寫。主要用于Socket通信當(dāng)中。

(2).程序執(zhí)行select后,如果沒有數(shù)據(jù)輸入,程序會一直等待(阻塞時(shí)),直到有數(shù)據(jù)為止,也就是程序中無需循環(huán)和sleep。

(3).每次調(diào)用select,都需要把fd_set集合從用戶態(tài)拷貝到內(nèi)核態(tài),這個(gè)開銷在fd_set很多時(shí)會很大

(4).同時(shí)每次調(diào)用select都需要在內(nèi)核遍歷傳遞進(jìn)來的所有fd_set,這個(gè)開銷在fd_set很多時(shí)也很大

(5).select支持的文件描述符數(shù)量太小了,默認(rèn)是1024

poll

(1).poll的實(shí)現(xiàn)和select非常相似,只是描述fd_set集合的方式不同,poll使用pollfd鏈表結(jié)構(gòu)而不是select的fd_set結(jié)構(gòu),其他的都差不多。

(2).監(jiān)視描述符個(gè)數(shù)無上限;

epoll/kqueue

(1).監(jiān)視描述符個(gè)數(shù)無上限;

(2).效率提升,不是輪詢的方式,不會隨著fd數(shù)目的增加效率下降。只有活躍可用的fd才會調(diào)用callback函數(shù);即epoll/kqueue最大的優(yōu)點(diǎn)就在于它只管你“活躍”的連接,而跟連接總數(shù)無關(guān),因此在實(shí)際的網(wǎng)絡(luò)環(huán)境中,epoll/kqueue的效率就會遠(yuǎn)遠(yuǎn)高于select和poll。

(3).內(nèi)存拷貝,利用mmap()文件映射內(nèi)存加速與內(nèi)核空間的消息傳遞;

相關(guān)文章

  • 關(guān)于PHP5和PHP7中數(shù)組實(shí)現(xiàn)方式的比較總結(jié)

    關(guān)于PHP5和PHP7中數(shù)組實(shí)現(xiàn)方式的比較總結(jié)

    PHP7比PHP5性能提升了兩倍,全面一致的64位支持,以前的許多致命錯(cuò)誤,現(xiàn)在改成拋出異常,下面這篇文章主要給大家介紹了關(guān)于PHP5和PHP7中數(shù)組實(shí)現(xiàn)方式比較的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • php&mysql 日期操作小記

    php&mysql 日期操作小記

    在php的很多成熟框架中,數(shù)據(jù)庫存儲時(shí)間都是用int類型而不是datetime類型的
    2012-02-02
  • php簡單分頁類實(shí)現(xiàn)方法

    php簡單分頁類實(shí)現(xiàn)方法

    這篇文章主要介紹了php簡單分頁類實(shí)現(xiàn)方法,實(shí)例分析了php分頁類的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • PHP從零開始打造自己的MVC框架之入口文件實(shí)現(xiàn)方法詳解

    PHP從零開始打造自己的MVC框架之入口文件實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了PHP從零開始打造自己的MVC框架之入口文件實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式分析了php實(shí)現(xiàn)MVC框架入口文件的原理、定義及使用方法,需要的朋友可以參考下
    2019-06-06
  • PHP把MSSQL數(shù)據(jù)導(dǎo)入到MYSQL的方法

    PHP把MSSQL數(shù)據(jù)導(dǎo)入到MYSQL的方法

    這篇文章主要介紹了PHP把MSSQL數(shù)據(jù)導(dǎo)入到MYSQL的方法,分別列舉了兩個(gè)實(shí)例實(shí)現(xiàn)將MSSQL數(shù)據(jù)導(dǎo)入到MYSQL的功能,是非常實(shí)用的技巧,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • 精通php的十大要點(diǎn)(上)

    精通php的十大要點(diǎn)(上)

    原文地址:http://nettuts.com/tutorials/php/10-principles-of-the-php-masters/ 翻譯整理:Andrew,如需轉(zhuǎn)載請注明出處。
    2009-02-02
  • php生成excel文件的簡單方法

    php生成excel文件的簡單方法

    生成excel文件,最簡單的莫過于把數(shù)據(jù)庫的數(shù)據(jù)導(dǎo)入到excel就行了,下面有個(gè)不錯(cuò)的示例,大家可以參考下
    2014-02-02
  • php連接mssql的一些相關(guān)經(jīng)驗(yàn)及注意事項(xiàng)

    php連接mssql的一些相關(guān)經(jīng)驗(yàn)及注意事項(xiàng)

    php連接mssql對于很多朋友或許已經(jīng)是老生長談,習(xí)以為常了,不過本文還是要嘮叨一下,主要以分享連接數(shù)據(jù)庫的相關(guān)經(jīng)驗(yàn),感興趣的你可千萬不要錯(cuò)過,或許本文對你有所幫助呢
    2013-02-02
  • php使用unset()刪除數(shù)組中某個(gè)單元(鍵)的方法

    php使用unset()刪除數(shù)組中某個(gè)單元(鍵)的方法

    這篇文章主要介紹了php使用unset()刪除數(shù)組中某個(gè)單元(鍵)的方法,實(shí)例分析了unset函數(shù)在刪除數(shù)組單元時(shí)的使用技巧,需要的朋友可以參考下
    2015-02-02
  • php中strlen和mb_strlen用法實(shí)例分析

    php中strlen和mb_strlen用法實(shí)例分析

    這篇文章主要介紹了php中strlen和mb_strlen用法,結(jié)合實(shí)例形式分析了strlen和mb_strlen針對中英文結(jié)合字符編碼計(jì)算字符串長度的操作技巧,需要的朋友可以參考下
    2016-11-11

最新評論

青浦区| 玉屏| 镇江市| 邵武市| 荔波县| 双流县| 合山市| 房山区| 广平县| 崇阳县| 赤壁市| 彭州市| 临澧县| 新密市| 武隆县| 阿拉善右旗| 电白县| 耒阳市| 海阳市| 湖北省| 邳州市| 镇坪县| 鹤岗市| 普洱| 柘荣县| 柏乡县| 甘孜县| 宁海县| 鄂伦春自治旗| 左云县| 鲁甸县| 阿瓦提县| 昭苏县| 灵川县| 天水市| 嵊泗县| 茌平县| 广饶县| 南丹县| 洛川县| 墨江|