PHP中的“進(jìn)程”系列1——PHP-FPM模型

PHP中的“進(jìn)程”系列

這個(gè)系列會(huì)分幾個(gè)部分,從PHP-FPM進(jìn)程模式起锭环,到Linux進(jìn)程禾酱,最后回到PHP本身談一談如何設(shè)計(jì)一個(gè)PHP的進(jìn)程池。整個(gè)系列會(huì)氛圍大致5個(gè)主要部分霉赡,分別是:

①:PHP-FPM的多進(jìn)程模型
②:Linux進(jìn)程介紹
③:PHP中的多進(jìn)程
④:進(jìn)程間通訊
⑤:PHP的進(jìn)程池設(shè)計(jì)

此篇為系列第一篇:PHP-FPM的多進(jìn)程模型橄务。那么,我們談?wù)揚(yáng)HP-FPM多進(jìn)程模型的時(shí)候穴亏,作為PHPer的你蜂挪,可能需要先看看下面一些關(guān)于PHP-FPM的多進(jìn)程模型,是否都有所了解

①:PHP-FPM啟動(dòng)進(jìn)程的方式主要有哪幾種嗓化,區(qū)別是什么棠涮?
②:PHP-FPM,是主進(jìn)程接收請(qǐng)求轉(zhuǎn)給子進(jìn)程刺覆,還是子進(jìn)程單獨(dú)接收請(qǐng)求并處理严肪,如何驗(yàn)證?
③:為何在PHP-FPM模式下,PHP代碼很少有人去做連接池驳糯?
④:PHP-FPM模式性能差的體現(xiàn)有哪些篇梭,如何優(yōu)化?
⑤:PHP-FPM模式下的Yac為何無(wú)法和Cli模式無(wú)法共享內(nèi)存酝枢?

1很洋、PHP-FPM是多進(jìn)程模式,master進(jìn)程管理worker進(jìn)程隧枫,進(jìn)程的數(shù)量喉磁,都可以通過(guò)php-fpm.conf做具體配置,而PHP-FPM的進(jìn)程官脓,亦可以分為動(dòng)態(tài)模式及靜態(tài)模式协怒。

①:靜態(tài)(static):直接開(kāi)啟指定數(shù)量的php-fpm進(jìn)程,不再增加或者減少卑笨;啟動(dòng)固定數(shù)量的進(jìn)程孕暇,占用內(nèi)存高。但在用戶(hù)請(qǐng)求波動(dòng)大的時(shí)候赤兴,對(duì)Linux操作系統(tǒng)進(jìn)程的處理上耗費(fèi)的系統(tǒng)資源低妖滔。
②:動(dòng)態(tài)(dynamic):開(kāi)始的時(shí)候開(kāi)啟一定數(shù)量的php-fpm進(jìn)程,當(dāng)請(qǐng)求量變大的時(shí)候桶良,動(dòng)態(tài)的增加php-fpm進(jìn)程數(shù)到上限座舍,當(dāng)空閑的時(shí)候自動(dòng)釋放空閑的進(jìn)程數(shù)到一個(gè)下限。動(dòng)態(tài)模式陨帆,會(huì)根據(jù)max曲秉、min、idle children 配置疲牵,動(dòng)態(tài)的調(diào)整進(jìn)程數(shù)量承二。在用戶(hù)請(qǐng)求較為波動(dòng),或者瞬間請(qǐng)求增高的時(shí)候纲爸,進(jìn)行大量進(jìn)程的創(chuàng)建亥鸠、銷(xiāo)毀等操作,而造成Linux負(fù)載波動(dòng)升高识啦,簡(jiǎn)單來(lái)說(shuō)负蚊,請(qǐng)求量少,PHP-FPM進(jìn)程數(shù)少袁滥,請(qǐng)求量大盖桥,進(jìn)程數(shù)多灾螃。優(yōu)勢(shì)就是题翻,當(dāng)請(qǐng)求量小的時(shí)候,進(jìn)程數(shù)少,內(nèi)存占用也小嵌赠。
③:按需模式(ondemand):這種模式下塑荒,PHP-FPM的master不會(huì)fork任何的子進(jìn)程,純粹就是按需啟動(dòng)子進(jìn)程姜挺,這種模式很少使用齿税,因?yàn)檫@種模式,基本上是無(wú)法適應(yīng)有一定量級(jí)的線上業(yè)務(wù)的炊豪。由于php-fpm是短連接的凌箕,所以每次請(qǐng)求都會(huì)先建立連接,建立連接的過(guò)程必然會(huì)觸發(fā)上圖的執(zhí)行步驟词渤,所以牵舱,在大流量的系統(tǒng)上master進(jìn)程會(huì)變得繁忙,占用系統(tǒng)cpu資源缺虐,不適合大流量環(huán)境的部署芜壁。這種模式,貼一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)上的圖來(lái)說(shuō)明:

6B91FC74FBF0FFD224D402C340C8CE92.png

需要注意2個(gè)點(diǎn)高氮,“連接”慧妄,及“數(shù)據(jù)”到來(lái)。有連接進(jìn)來(lái)再fork進(jìn)程剪芍,同樣可以達(dá)到子進(jìn)程繼承父進(jìn)程上下文塞淹,然后子進(jìn)程處理用戶(hù)請(qǐng)求這個(gè)目的。

具體的罪裹,關(guān)于動(dòng)態(tài)窖铡、靜態(tài)進(jìn)程模式的相關(guān)參數(shù),可參考PHP官方文檔坊谁,我們需要關(guān)注的是费彼,對(duì)于我們自身的業(yè)務(wù),如何選擇PHP-FPM的模式為動(dòng)態(tài)還是靜態(tài)口芍。

比較大內(nèi)存的服務(wù)器來(lái)說(shuō)箍铲,設(shè)置為靜態(tài)的話會(huì)提高效率。因?yàn)轭l繁開(kāi)關(guān)php-fpm進(jìn)程也會(huì)有時(shí)滯鬓椭,所以?xún)?nèi)存夠大的情況下開(kāi)靜態(tài)效果會(huì)更好颠猴。數(shù)量也可以根據(jù) 內(nèi)存/30M 得到。比如說(shuō)2GB內(nèi)存的服務(wù)器小染,可以設(shè)置為50翘瓮;4GB內(nèi)存可以設(shè)置為100等。高配機(jī)器選靜態(tài)裤翩,低配機(jī)器(省內(nèi)存)選動(dòng)態(tài)资盅,高配機(jī)器用動(dòng)態(tài)不能充分利用內(nèi)存資源和CPU資源,也無(wú)法及時(shí)應(yīng)對(duì)瞬時(shí)高并發(fā),甚至可能短時(shí)間造成5xx錯(cuò)誤呵扛。

2每庆、PHP-FPM,是主進(jìn)程接收請(qǐng)求轉(zhuǎn)給子進(jìn)程今穿,還是子進(jìn)程單獨(dú)接收請(qǐng)求并處理缤灵,如何驗(yàn)證

PHP-FPM的進(jìn)程管理方式和Nginx的進(jìn)程管理方式類(lèi)似,在處理用于請(qǐng)求上蓝晒,并非是主進(jìn)程接受請(qǐng)求后轉(zhuǎn)給子進(jìn)程腮出,而是子進(jìn)程搶占式的接受用戶(hù)的請(qǐng)求,本質(zhì)上芝薇,其實(shí)PHP-FPM的多進(jìn)程利诺,以及Nginx的多進(jìn)程,其實(shí)都是主進(jìn)程監(jiān)聽(tīng)的同一個(gè)端口(被動(dòng)套接字)后剩燥,fork子進(jìn)程達(dá)到多個(gè)進(jìn)程監(jiān)聽(tīng)同一個(gè)端口的目的慢逾。 Linux系統(tǒng),所有的進(jìn)程IO操作灭红,都需要和操作系統(tǒng)打交道侣滩,也就是說(shuō),所有IO操作变擒,操作系統(tǒng)都知道君珠,而這個(gè)過(guò)程,也就是我們常說(shuō)的“系統(tǒng)調(diào)用”娇斑。我們可以從系統(tǒng)調(diào)用入手解決這個(gè)問(wèn)題策添。 系統(tǒng)調(diào)用的查看,可以使用strace毫缆。

對(duì)于如何驗(yàn)證相對(duì)簡(jiǎn)單唯竹,有2種方式;其一苦丁,看php-fpm進(jìn)程的日志浸颓,這需要配置好合適的php-fpm日志格式;其二旺拉,既然IO數(shù)據(jù)會(huì)通過(guò)內(nèi)核態(tài)過(guò)度到用戶(hù)態(tài)進(jìn)程产上,那么,我們通過(guò)strace -p <pid>命令去跟蹤系統(tǒng)調(diào)用即可蛾狗。分別跟蹤php-fpm的主進(jìn)程id以及php-fpm子進(jìn)程id晋涣,然后訪問(wèn)nginx,由nginx通過(guò)fast-cgi協(xié)議轉(zhuǎn)到php-fpm進(jìn)程上沉桌,看在哪個(gè)進(jìn)程上發(fā)送了系統(tǒng)調(diào)用谢鹊。

3算吩、為何在PHP-FPM模式下,PHP代碼很少有人去做連接池

首先撇贺,PHP-FPM模式下赌莺,注定一個(gè)請(qǐng)求的生命周期只有1次冰抢。也就是說(shuō)松嘶,從FPM請(qǐng)求到請(qǐng)求,解析PHP腳本挎扰,F(xiàn)PM的Zend虛擬機(jī)分配資源執(zhí)行翠订,到最后的處理結(jié)束,PHP-FPM會(huì)回收這次請(qǐng)求的所有資源遵倦。

當(dāng)然尽超,PHP-FPM之所以這么做,①:目的是讓開(kāi)發(fā)不需要關(guān)心資源的回收的處理梧躺,所以可能你沒(méi)怎么關(guān)心過(guò)網(wǎng)絡(luò)的關(guān)閉似谁、文件描述符的關(guān)閉等等。②:減少內(nèi)存溢出的情況掠哥。

如果在這種模式下巩踏,你實(shí)現(xiàn)了連接池,也意味著請(qǐng)求結(jié)束续搀,連接池消失塞琼,做了一次無(wú)用功而已。

“雞肋的”pconnect禁舷。pconnect彪杉,持久化鏈接,也就是鏈接不釋放牵咙。但問(wèn)題在于派近,PHP-FPM是多進(jìn)程模式,而持久化的鏈接洁桌,存在于進(jìn)程中构哺,也就意味著,如果一臺(tái)機(jī)器有300個(gè)FPM進(jìn)程战坤,會(huì)一次性初始化300個(gè)持久化鏈接曙强。 如果因?yàn)槊媾R業(yè)務(wù)活動(dòng),冒然對(duì)機(jī)器擴(kuò)容途茫,很可能造成業(yè)務(wù)的數(shù)據(jù)庫(kù)連接數(shù)直接打滿碟嘴。

4、PHP-FPM模式性能差的體現(xiàn)有哪些囊卜,如何優(yōu)化

先思考為何性能差娜扇,一個(gè)應(yīng)用的性能如果說(shuō)差错沃,往往會(huì)從2個(gè)方面來(lái)說(shuō),一個(gè)是IO性能雀瓢,一個(gè)是計(jì)算性能枢析。

IO上來(lái)說(shuō),PHP-FPM模式下刃麸,難以做連接池醒叁,所以高并發(fā)業(yè)務(wù)下,網(wǎng)絡(luò)的處理會(huì)有劣勢(shì)泊业。 注意:我這里一直在說(shuō)的把沼,都是 PHP-FPM模式下,在CLI模式下吁伺,你還是可以做自己的連接池的饮睬,只不過(guò)這個(gè)連接池,僅限于CLI模式的單進(jìn)程內(nèi)篮奄,這個(gè)模式還不能用在處理網(wǎng)絡(luò)請(qǐng)求(比如HTTP請(qǐng)求)捆愁,因?yàn)镻HP默認(rèn)單進(jìn)程模式,F(xiàn)PM窟却、CLI都是默認(rèn)單進(jìn)程昼丑,即便CLI可以做連接池,也不方便做鏈接奔湫#活(不能同時(shí)做心跳檢測(cè))

計(jì)算性能上來(lái)說(shuō)矾克,其實(shí)PHP是C寫(xiě)的,單純的論計(jì)算性能是不錯(cuò)的憔足。 但問(wèn)題在于胁附,PHP在處理請(qǐng)求的時(shí)候,每次都要解析PHP腳本滓彰、翻譯PHP代碼為opcode控妻、用Zend虛擬機(jī)執(zhí)行opcode,處理結(jié)束揭绑,釋放資源弓候。因此算下來(lái),也是PHP慢的最大原因之一他匪。

如何優(yōu)化:

①:對(duì)于計(jì)算性能來(lái)說(shuō)菇存,使用 Zend OPcache 擴(kuò)展,緩存字節(jié)碼邦蜜。
②:對(duì)于IO性能來(lái)說(shuō)依鸥,使用文件cache或者memcached減輕對(duì)網(wǎng)絡(luò)Cache的壓力;使用 Yac 減輕對(duì) Cache層的壓力悼沈;在同一次請(qǐng)求中贱迟;復(fù)用鏈接不要每次都用新的姐扮;合理設(shè)計(jì)日志組件類(lèi)庫(kù),優(yōu)化Logger減少對(duì)文件操作的次數(shù)來(lái)減少I(mǎi)O的壓力衣吠。

關(guān)于設(shè)計(jì)一個(gè)合格的Logger組件茶敏,我們需要注意幾個(gè)點(diǎn):

①:每次請(qǐng)求,只做一次日志寫(xiě)操作缚俏,不要每次別人調(diào)用你的函數(shù)惊搏,你都去執(zhí)行一次類(lèi)似file_put_contents的操作。
②:兼容各種類(lèi)似錯(cuò)誤袍榆,換句話說(shuō)胀屿,即使PHP fatal error了塘揣,你也得能把知名錯(cuò)誤之前的日志記錄下來(lái)包雀。這個(gè)實(shí)現(xiàn),可以借助PHP類(lèi)的析構(gòu)方法來(lái)做亲铡。也可以使用更好的 register_shutdown_function 來(lái)注冊(cè)一個(gè)鉤子才写,在PHP請(qǐng)求結(jié)束的時(shí)候,回調(diào)此鉤子奖蔓,完成做最后的日志操作赞草。

5、PHP-FPM模式下的Yac為何無(wú)法和Cli模式無(wú)法共享內(nèi)存

我們知道吆鹤,PHP擴(kuò)展開(kāi)發(fā)中厨疙,首要執(zhí)行的一個(gè)宏,便是 PHP_MINIT_FUNCTION疑务,Yac擴(kuò)展沾凄,需要在PHP-FPM進(jìn)程啟動(dòng)的時(shí)候,便初始化一塊共享內(nèi)存知允,供各個(gè)進(jìn)程來(lái)共享使用撒蟀,因此,要能共享温鸽,關(guān)鍵就在于需要一個(gè)相同的標(biāo)識(shí)保屯,各個(gè)進(jìn)程都知道才可以。Yac擴(kuò)展的初始化流程為:

PHP_MINIT_FUNCTION->yac_storage_startup->yac_allocator_startup->create_segments

我們查看 create_segments 的具體實(shí)現(xiàn):

static int create_segments(size_t requested_size, zend_shared_segment_posix ***shared_segments_p, int *shared_segments_count, char **error_in)
{
    zend_shared_segment_posix *shared_segment;
    char shared_segment_name[sizeof("/ZendAccelerator.") + 20];

    *shared_segments_count = 1;
    *shared_segments_p = (zend_shared_segment_posix **) calloc(1, sizeof(zend_shared_segment_posix) + sizeof(void *));
    if (!*shared_segments_p) {
        *error_in = "calloc";
        return ALLOC_FAILURE;
    }
    shared_segment = (zend_shared_segment_posix *)((char *)(*shared_segments_p) + sizeof(void *));
    (*shared_segments_p)[0] = shared_segment;

  // 這里打開(kāi)共享內(nèi)存塊需要的Id涤垫,也就是 shared_segment_name
    sprintf(shared_segment_name, "/ZendAccelerator.%d", getpid());
    
    // 這里姑尺,打開(kāi)一塊共享內(nèi)存
    shared_segment->shm_fd = shm_open(shared_segment_name, O_RDWR|O_CREAT|O_TRUNC, 0600);
    if (shared_segment->shm_fd == -1) {
        *error_in = "shm_open";
        return ALLOC_FAILURE;
    }

上面做了一些注釋?zhuān)铌P(guān)鍵的是開(kāi)啟共享內(nèi)存需要的系統(tǒng)ID,shared_segment_name蝠猬,此值切蟋,包含了進(jìn)程的ID。也就是php-fpm的主進(jìn)程id吱雏。這就是敦姻,PHP-FPM模式所有進(jìn)程間能夠通信的奧秘所在(它們有相同的共享內(nèi)存標(biāo)識(shí)ID)瘾境。而,如果我們是想要通過(guò)PHP腳本镰惦,使用yac擴(kuò)展讀取這個(gè)共享內(nèi)存迷守,會(huì)這樣做:

$yac = new Yac();
$key = "something"
$yac->get($key);

在CLI模式下,這樣是不可能拿到PHP-FPM模式下設(shè)置的共享內(nèi)存數(shù)據(jù)的因?yàn)橥耄驗(yàn)镃LI模式下兑凿,執(zhí)行php腳本,進(jìn)程ID茵瘾,和PHP-FPM模式下的進(jìn)程ID礼华,根本就不相同。

總結(jié)來(lái)說(shuō)拗秘,在后邊會(huì)講到進(jìn)程間通訊圣絮,會(huì)講到基于共享內(nèi)存的通訊。多進(jìn)程要共享內(nèi)存通信雕旨,必須要一開(kāi)始就協(xié)調(diào)好一個(gè)唯一ID扮匠,這個(gè)ID,多個(gè)進(jìn)程間都要知道凡涩,PHP-FPM是多進(jìn)程棒搜,主進(jìn)程fork子進(jìn)程出來(lái),子進(jìn)程自然知道這個(gè)唯一ID是什么(因?yàn)長(zhǎng)inux進(jìn)程fork會(huì)把整個(gè)進(jìn)程的堆棧內(nèi)存都fork一遍)活箕。 但是力麸,php a.php 這樣執(zhí)行,其實(shí)是一個(gè)完全獨(dú)立的進(jìn)程育韩,和php-fpm沒(méi)任何關(guān)系克蚂,這樣的進(jìn)程,自然不能知道php-fpm進(jìn)程里的那個(gè)唯一ID是什么座慰。

至此陨舱,系列1——PHP-FPM模式已結(jié)束~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市版仔,隨后出現(xiàn)的幾起案子游盲,更是在濱河造成了極大的恐慌,老刑警劉巖蛮粮,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件益缎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡然想,警方通過(guò)查閱死者的電腦和手機(jī)莺奔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)变泄,“玉大人令哟,你說(shuō)我怎么就攤上這事恼琼。” “怎么了屏富?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵晴竞,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我狠半,道長(zhǎng)噩死,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任神年,我火速辦了婚禮已维,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘已日。我一直安慰自己垛耳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布捂敌。 她就那樣靜靜地躺著艾扮,像睡著了一般既琴。 火紅的嫁衣襯著肌膚如雪占婉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天甫恩,我揣著相機(jī)與錄音逆济,去河邊找鬼。 笑死磺箕,一個(gè)胖子當(dāng)著我的面吹牛奖慌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播松靡,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼简僧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了雕欺?” 一聲冷哼從身側(cè)響起岛马,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屠列,沒(méi)想到半個(gè)月后啦逆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡笛洛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年夏志,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苛让。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沟蔑,死狀恐怖湿诊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瘦材,我是刑警寧澤枫吧,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站宇色,受9級(jí)特大地震影響九杂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宣蠕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一例隆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抢蚀,春花似錦镀层、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至屋休,卻和暖如春坞古,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背劫樟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工痪枫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叠艳。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓奶陈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親附较。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吃粒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 需要清楚的幾個(gè)概念: FPM進(jìn)程:進(jìn)程數(shù)在php-fpm.ini中設(shè)置。沒(méi)有設(shè)置 max_requests 拒课,那么...
    fujun_195a閱讀 3,064評(píng)論 1 13
  • 1. Nginx的模塊與工作原理 Nginx由內(nèi)核和模塊組成徐勃,其中,內(nèi)核的設(shè)計(jì)非常微小和簡(jiǎn)潔捕发,完成的工作也非常簡(jiǎn)單...
    rosekissyou閱讀 10,222評(píng)論 5 124
  • 他說(shuō)扎酷,“我的工作檐涝,就是欺騙小孩子”。 他用善意的與眾不同的謊言欺騙孩子,他創(chuàng)作兒童文學(xué)谁榜。通過(guò)文學(xué)作品幅聘,為孩子打開(kāi)一...
    多多洛的世界閱讀 312評(píng)論 0 0
  • 不知不覺(jué),我陪產(chǎn)的媽媽已經(jīng)出月子了窃植,而我這個(gè)拖延癥癥重癥患者也終于提起了筆帝蒿。這次沒(méi)有打算很詳細(xì)地寫(xiě)整個(gè)陪產(chǎn)過(guò)程,而...
    小君子_導(dǎo)樂(lè)母指閱讀 218評(píng)論 0 0
  • 花妖這世初初滿百歲巷怜,隨帶著春風(fēng)逐流水而離枝漸遠(yuǎn)葛超。游過(guò)護(hù)城河,游進(jìn)黛粉湖延塑。盡納天地靈氣绣张,日月精華,化而為人关带。 小少爺...
    思昨非閱讀 355評(píng)論 0 0