久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

glibc線程源碼解析:pthread_create、線程棧與同步原語深度拆解

glibc線程源碼解析:pthread_create、線程棧與同步原語深度拆解 1. 為什么還要專門看glibc的線程源碼寫Linux多線程程序這么多年我最早的階段就是拿pthread_create、pthread_mutex_lock當(dāng)黑盒用參數(shù)照抄能跑就行。直到有一次線上服務(wù)出現(xiàn)詭異卡頓——線程創(chuàng)建特別慢、鎖競爭一上去就吞吐暴跌翻遍各種top、perf數(shù)據(jù)也找不到根因這才意識到man手冊只告訴你函數(shù)“做什么”根本不告訴你“怎么做”。而真正決定性能、排障思路的恰恰是glibc里那幾千行用宏和匯編堆出來的實現(xiàn)細(xì)節(jié)。這篇是Linux線程系列第四篇前三篇講完了線程的抽象、生命周期和同步模型這次直接把glibc源碼翻開從nptl目錄開始逐個拆解pthread_create、pthread_join、線程棧分配、mutex/condvar背后到底發(fā)生了什么。我會順著真實調(diào)用鏈走一遍把關(guān)鍵數(shù)據(jù)結(jié)構(gòu)、宏定義、匯編片段都標(biāo)記出來同時補上我在實際項目里踩過的坑——比如thread pointer寄存器被誤用、cancel信號和業(yè)務(wù)信號打架、棧緩存命中率低導(dǎo)致頻繁mmap等。不管你是在排查性能問題、研究底層原理還是準(zhǔn)備Linux系統(tǒng)編程面試這篇都值得耐心看完。需要提前說明一下文中的源碼來自glibc 2.35版本具體行號和宏名在不同版本里會有些差異但核心路徑基本沒變。閱讀時我會給出真實的函數(shù)名和宏名方便你在自己機器上對照/usr/include和源碼包做驗證。2. glibc在Linux線程體系里到底扮演什么角色2.1 用戶態(tài)線程庫與內(nèi)核線程之間隔著一層什么很多剛接觸Linux線程的人會有一個誤解覺得pthread_create創(chuàng)建的那個“線程”就是內(nèi)核里的一個task_struct。嚴(yán)格說這層關(guān)系是“用戶態(tài)線程庫管理、內(nèi)核進(jìn)程調(diào)度器負(fù)責(zé)調(diào)度執(zhí)行”。glibc的線程實現(xiàn)叫NPTLNative POSIX Thread Library從glibc 2.3.2開始成為默認(rèn)實現(xiàn)它的設(shè)計前提就是“1:1線程模型”——一個用戶態(tài)線程由一個內(nèi)核輕量級進(jìn)程LWP承載。這里的關(guān)鍵在于內(nèi)核根本不知道“線程”這個概念它只認(rèn)task_struct。NPTL要做的是通過clone系統(tǒng)調(diào)用創(chuàng)建“共享地址空間但擁有獨立棧和調(diào)度上下文”的進(jìn)程再用用戶態(tài)的代碼把這一堆“假進(jìn)程”包裝成符合POSIX語義的“真線程”。所以你會發(fā)現(xiàn)ps -eLf能列出線程gettid()能拿到內(nèi)核線程ID但pthread_self()返回的卻是另一個用戶態(tài)ID——前者是內(nèi)核視角后者是glibc內(nèi)部管理的ID。理解這層邊界有多重要舉個例子當(dāng)你說“這個線程卡住了”如果你只會看pthread_self的返回值去gdb里找線程大概率是找不到的。正確做法是pthread_self()和gettid()做映射或者直接看/proc/pid/task/目錄。這類問題我在“線程排查實錄”里還會展開。2.2 glibc源碼目錄怎么讀nptl的核心文件想從源碼層面理解線程不用把glibc整個看完幾十萬行沒人能硬啃。你只需要盯住nptl/目錄下的幾個核心文件pthread_create.c所有線程創(chuàng)建的入口包含__pthread_create_2_1和舊的兼容版本pthread_join.c線程回收、等待的邏輯pthread_mutex_lock.c、pthread_mutex_unlock.c互斥鎖的用戶態(tài)部分pthread_cond_wait.c、pthread_cond_signal.c條件變量allocatestack.c線程棧分配與回收這是最容易被忽視但信息量最大的文件nptl/descr.h核心數(shù)據(jù)結(jié)構(gòu)struct pthread也叫descr所有線程視圖的根sysdeps/.../createthread.cclone系統(tǒng)調(diào)用之前的最后一公里不同架構(gòu)有不同實現(xiàn)。這里有個小技巧從glibc官方倉庫拉源碼后不要用grep搜“pthread_create”因為符號版本化導(dǎo)致函數(shù)名層層包裹你會搜出一堆__pthread_create_2_1、__pthread_create_2_0這種。正確姿勢是直接在pthread_create.c里找versioned_symbol這個宏它定義了不同glibc版本的入口綁定關(guān)系。2.3 一個線程在內(nèi)存里的全貌struct pthread和tcbhead_t要說清楚實現(xiàn)原理必須先認(rèn)識兩個核心結(jié)構(gòu)體。struct pthread在descr.h里定義它不僅僅是“線程控制塊”更是一塊承載了TLS線程局部存儲、調(diào)度信息、棧指針、清理處理函數(shù)鏈表的大結(jié)構(gòu)。這里有個很反直覺的設(shè)計pthread_t其實不是指針而是一個無符號長整型指向struct pthread在內(nèi)存中的起始地址。所以pthread_equal比較的其實是兩個“線程控制塊地址”。tcbhead_t則更底層它被放在線程棧的最低地址位置棧向下增長的那一端里面有幾個硬核字段比如self指針、multiple_threads標(biāo)志、sysinfo等。x86-64架構(gòu)下fs或gs段寄存器會指向這個區(qū)域使線程能夠快速通過段前綴訪問自己的TLS變量。這也是為什么一個線程切換后fs/gs基地址必須隨之切換——內(nèi)核在上下文切換時會自動處理這個但如果你在用戶態(tài)用arch_prctl改了它就會立刻把整個線程的TLS干廢。這個坑我后面會講一個真實的崩潰案例。3. pthread_create完整生命周期從函數(shù)調(diào)用到內(nèi)核clone3.1 pthread_create入口先收集屬性再分配身份我們平時調(diào)用pthread_create傳的四個參數(shù)里attr為NULL表示全默認(rèn)。但glibc內(nèi)部可不直接拿NULL用它會先構(gòu)造一個默認(rèn)屬性棧。入口函數(shù)__pthread_create_2_1做了幾件關(guān)鍵事情拷貝用戶傳入的attr如果沒有則用default_pthread_attr并設(shè)置flags為ATTR_FLAG_NOT_INITED標(biāo)記后續(xù)需要初始化如果屬性里指定了棧地址用戶自己提供棧會做一個校驗__pthread_attr_setstack時傳入的棧大小必須不小于PTHREAD_STACK_MIN否則直接返回EINVAL檢查是不是第一個線程——如果不是就設(shè)置tcbhead_t里的multiple_threads標(biāo)志并調(diào)用__ctype_init之類的TLS初始化邏輯。這里有個細(xì)節(jié)值得注意get_cached_stack這個函數(shù)會先去緩存鏈表里找之前回收的棧如果命中就直接復(fù)用不再走系統(tǒng)調(diào)用。如果沒命中才會進(jìn)入allocate_stack去mmap。這個“緩存優(yōu)先”的設(shè)計直接影響你的線程創(chuàng)建效率。3.2 allocate_stackmmap、棧底對齊與防護(hù)頁allocate_stack是整個創(chuàng)建鏈路里最“性感”的函數(shù)也是產(chǎn)生大多數(shù)字節(jié)數(shù)和內(nèi)存布局的地方。在x86-64下glibc默認(rèn)的線程棧大小是8MBARCH_STACK_DEFAULT_SIZE但它不會一次申請8MB的物理內(nèi)存而是用mmap映射一段8MB 4KB 對齊余量的虛擬地址空間。為什么多4KB因為棧底部內(nèi)存地址低端要放一個不可訪問的guard page防護(hù)頁用來檢測棧溢出。當(dāng)你的程序真的越界寫入這個區(qū)域內(nèi)核會觸發(fā)SIGSEGV而不是悄悄破壞別的內(nèi)存。棧布局從高地址到低地址依次是棧頂初始RSP、線程棧主體、struct pthread、tcbhead_t。struct pthread被放在棧的最低端還刻意做了TLS_TCB_AT_TP對齊——這個宏要求thread pointer所指的地址必須滿足一定的對齊條件通常是16字節(jié)或32字節(jié)。一旦對齊不滿足后續(xù)的_dl_allocate_tls分配動態(tài)TLS就會出現(xiàn)偏移錯亂。分配完成后還會做一件很細(xì)碎的事把pd-specific數(shù)組、pd-robust_list等字段初始化好并設(shè)置pd-stackblock、pd-stackblock_size。這兩個字段后續(xù)被pthread_attr_getstack用來向用戶報告棧信息也是棧回收時的依據(jù)。3.3 create_thread與do_clone真正喚醒內(nèi)核線程棧就緒后create_thread被調(diào)用。它干的第一件事是設(shè)置struct pthread里的start_routine和arg字段——這兩個值會被存到新棧的初始位置即棧頂附近新線程啟動時會從這里取參數(shù)。這一步看似簡單實際是優(yōu)雅的你不需要為每個線程額外維護(hù)一個“參數(shù)隊列”新線程一出生就能從寄存器或初始棧幀里拿到自己的任務(wù)。隨后進(jìn)入do_clone這層是平臺相關(guān)的x86-64實現(xiàn)在sysdeps/unix/sysv/linux/x86_64/clone.S里。它設(shè)置一個棧底指針然后調(diào)用clone系統(tǒng)調(diào)用。注意這里的clone參數(shù)非常講究clone(flags CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_THREAD | CLONE_SETTLS | CLONE_PARENT_SETTID | CLONE_CHILD_CLEARTID, child_stack stack_address, parent_tidptr pd-tid, child_tidptr pd-tid, tls pd-tcb);逐個解釋CLONE_VM共享地址空間這就是“線程”的內(nèi)存本質(zhì)CLONE_THREAD放進(jìn)同一個線程組使得getpid()對所有線程返回相同值而gettid()不同CLONE_SETTLS告訴內(nèi)核將該線程的TLS基地址設(shè)置為pd-tcb這一步設(shè)置了后續(xù)fs寄存器的基址CLONE_PARENT_SETTID和CLONE_CHILD_CLEARTID在父進(jìn)程和子進(jìn)程側(cè)分別寫入/清空pd-tid這是實現(xiàn)pthread_join等待的關(guān)鍵機制之一。這里有個我最初讀源碼時的困惑為什么clone返回后父線程還要單獨設(shè)置pd-tid并做條件變量喚醒原因是CLONE_CHILD_CLEARTID讓子線程退出時內(nèi)核自動futex喚醒等待在該地址上的線程——這比用戶態(tài)自己做信號處理可靠得多因為線程可能因為exit_group異常終止內(nèi)核依然會清理這個地址。3.4 start_thread新線程的“第一個函數(shù)”start_thread不是在glibc庫函數(shù)層面被直接調(diào)用的它是clone出來后子線程在內(nèi)核態(tài)切換到用戶態(tài)的第一個入口。它做的事保存參數(shù)、解析pd指針、初始化自己的TLS、設(shè)置信號掩碼如果用戶指定過PTHREAD_SIGMASK_*屬性然后調(diào)用用戶傳入的start_routine(arg)。當(dāng)用戶函數(shù)返回時start_thread會自動調(diào)用pthread_exit——就算你沒寫pthread_exit線程也不會“自然死亡”內(nèi)核進(jìn)程結(jié)束而是被庫函數(shù)接住完成清理。這里就引出一個很多人忽視的點pthread_create之后如果不調(diào)用pthread_join或pthread_detach線程結(jié)束后的資源不會自動完全回收尤其是棧和struct pthread會成為泄漏。4. 線程棧與TLS一塊內(nèi)存的三重身份4.1 線程棧的存放路徑為什么8MB的棧會“占”很多虛擬內(nèi)存默認(rèn)8MB線程棧如果你創(chuàng)建1000個線程虛擬內(nèi)存會飆到8GB——這也是很多服務(wù)線程池上限不能開太大的原因之一。但請注意這只是虛擬地址空間不是物理內(nèi)存。mmap出來的這些頁在你真正訪問到棧頂之前并不會分配物理頁。所以很多線上環(huán)境里2GB物理內(nèi)存的機器開500個默認(rèn)棧線程也扛得住但如果每個線程都瘋狂遞歸物理內(nèi)存就會快速漲到OOM。棧的分配還有個方向性問題Linux棧是向下增長的從高地址到低地址所以保護(hù)頁必須放在低地址端。allocate_stack里專門有這段邏輯如果棧頂對齊到STACK_ALIGN時會造成保護(hù)頁錯位就會做一次“頁邊界對齊”把整個棧地址往下挪幾KB確保保護(hù)頁起點恰好是一頁的起始。4.2 TLS的三層組織全局動態(tài)TLS、局部動態(tài)TLS、__thread變量關(guān)于TLSglibc的實現(xiàn)可以分成兩級編譯期確定的__thread變量即靜態(tài)TLS和運行時通過dlopen加載模塊時分配的動態(tài)TLS。這里只看靜態(tài)TLS。當(dāng)你寫static __thread int x;時編譯器并不知道這個變量在哪個線程里它只生成一段通過fs段基址加偏移的尋址代碼。具體偏移在程序加載時由動態(tài)鏈接器計算并填入TLS塊的dtvDynamic Thread Vector表里。tcbhead_t中有一個dtv指針指向一個數(shù)組。數(shù)組第0項存儲generation用于動態(tài)TLS版本檢查第1項之后每項對應(yīng)一個共享對象的TLS塊。線程啟動時_dl_allocate_tls負(fù)責(zé)為這個線程分配一整塊TLS存儲區(qū)并將其地址填入dtv。這就是為什么__thread變量的訪問本質(zhì)上就是一個“段寄存器基地址 編譯期偏移”的訪存而不是符號查找。極快卻也讓調(diào)試器很難直接打印。如果在線程運行中通過dlopen加載了新的共享庫且?guī)靸?nèi)聲明了__thread變量就需要重新分配或擴展dtv。glibc的做法是很精巧的懶分配新庫的TLS塊并非立即分配而是等到該線程第一次訪問時通過sigtrap或__tls_get_addr觸發(fā)動態(tài)分配。這里有個可復(fù)現(xiàn)的坑如果你在某個線程里反復(fù)dlopen/dlclosedtv只增不減內(nèi)存碎片風(fēng)險與struct pthread的棧緩存錯位問題都可能被放大。4.3 棧緩存stack_cache的命中與淘汰策略線程退出時free_stack會把它的棧歸還到GL(dl_pagesize)管理的緩存池里。allocatestack.c里有stack_cache和stack_cache_maxsize兩個核心參數(shù)默認(rèn)緩存上限是40MBSTACK_CACHE_MAXSIZE。也就是可以緩存若干塊??臻g而不必每次munmap再mmap。線程頻繁創(chuàng)建銷毀時這就是性能差異的關(guān)鍵。但是緩存策略有個”坑“只有滿足pd-user_stack 0棧不是用戶外部提供的且pd-stackblock_size不超過一定閾值的棧才會被緩存。如果你用了pthread_attr_setstack自己提供棧那么退出時這一塊棧是不會進(jìn)緩存的——它是用戶的虛擬地址glibc無權(quán)回收。很多人在高并發(fā)短任務(wù)場景下頻繁創(chuàng)建線程卻發(fā)現(xiàn)自己自定義8KB棧依然每次mmap排查到最后發(fā)現(xiàn)user_stack標(biāo)志位的作用。5. 同步原語glibc如何把futex包成鎖和條件變量5.1 mutex的兩種形態(tài)快速鎖的“試鎖-睡眠”路徑pthread_mutex_lock在glibc里調(diào)用鏈為__pthread_mutex_lock→__lll_lock快路徑 →__lll_lock_wait慢路徑 →futex(FUTEX_WAIT)。核心思路是樂觀并發(fā)先原子指令嘗試拿鎖通常是cmpxchg或atomic_lock_cmpxchg拿到就返回沒拿到才進(jìn)入內(nèi)核睡眠等待。這個設(shè)計非常適合低競爭場景絕大部分鎖競爭不激烈時只是幾次原子操作就搞定了根本不會觸發(fā)系統(tǒng)調(diào)用。但一旦鎖競爭激烈大量線程涌入__lll_lock_wait每個失敗的線程都要進(jìn)入內(nèi)核態(tài)。這也解釋了為什么高競爭場景下自旋鎖或讀寫鎖的性能可能更好——因為自旋不會睡眠忙等期間鎖釋放的窗口極小避免上下文切換開銷。x86-64下glibc的默認(rèn)mutex不是PTHREAD_MUTEX_ADAPTIVE_NP而是普通的PTHREAD_MUTEX_TIMED_NP。如果你是高競爭場景需要手動設(shè)置pthread_mutexattr_settype為PTHREAD_MUTEX_ADAPTIVE_NP或者用新APIpthread_mutexattr_setprotocol設(shè)置優(yōu)先級繼承。這兩個選擇直接決定鎖失敗后是立即睡眠還是先自旋若干輪。5.2 elision用硬件事務(wù)內(nèi)存優(yōu)化鎖這里要講一個幾乎沒人注意但非常硬核的細(xì)節(jié)glibc支持通過--enable-lock-elision編譯選項啟用鎖省略lock elision。它利用x86的TSXTransactional Synchronization Extensions指令集鎖更新時不會修改內(nèi)存中的鎖變量而是在事務(wù)中樂觀執(zhí)行臨界區(qū)如果臨界區(qū)訪問的數(shù)據(jù)沒有被其他線程沖突修改事務(wù)提交成功其他線程不會發(fā)現(xiàn)這個鎖被“繞過”過如果發(fā)生沖突則回退到傳統(tǒng)鎖路徑。elision在pthread_mutex_lock.c里有單獨的__lll_lock_elision實現(xiàn)通常縮寫為elision-lock.c。但在常規(guī)glibc發(fā)行版里這個特性默認(rèn)關(guān)閉因為TSX在某些CPU上存在bug曾有跨代CPU上TSX的行為不一致導(dǎo)致死鎖所以實際生產(chǎn)環(huán)境很少開啟。了解一下就好不推薦親自在生產(chǎn)環(huán)境開啟。5.3 condvar的wait函數(shù)為什么必須配mutex一起使用pthread_cond_wait的源碼是幾乎所有講線程同步的實現(xiàn)繞不開的。它的核心循環(huán)大致如下do { // 進(jìn)入等待隊列釋放mutex ... while (1) { // futex_wait等待信號 ... } // 被喚醒后重新加鎖 } while (0);這段循環(huán)看起來簡單但注意的是“發(fā)布和等待之間的競態(tài)”。如果在pthread_cond_signal被調(diào)用時等待線程還沒進(jìn)入futex_wait就叫“喚醒丟失”。POSIX規(guī)范要求signal必須和mutex配合使用調(diào)用者在持有鎖時signal這樣在解鎖之前等待線程一定已經(jīng)進(jìn)入了等待隊列。glibc的實現(xiàn)里__pthread_cond_wait內(nèi)部會對傳入的mutex做特殊操作先記錄它的指針然后原子釋放鎖排隊再等futex返回后重新加鎖。為了不讓mutex被意外關(guān)閉或改為其他類型它會檢查mutex的__data.__kind是否是PTHREAD_MUTEX_NORMAL并臨時保存/恢復(fù)。真正實現(xiàn)的細(xì)節(jié)非常繞信號可能發(fā)生在等待者還沒“完全睡著”之前所以glibc使用了一個叫做“組”的計數(shù)器g1_start、g_signals將等待線程按代分組。signal只會喚醒一個指定代的線程避免新加入的等待者被舊信號直接吸收。這部分邏輯在pthread_cond_wait.c里是最復(fù)雜的部分如果深入到這里你基本就掌握了條件變量最難啃的骨頭。6. 線程生命周期管理退出、回收與取消6.1 pthread_exit線程走到了終點但棧不會立刻消失pthread_exit做的事情很多它不返回值給調(diào)用者而是把返回值存儲到pd-result里然后開始逐層調(diào)用線程清理回調(diào)__pthread_unwind包括用戶通過pthread_cleanup_push注冊的清理函數(shù)。之后觸發(fā)內(nèi)核級的線程結(jié)束清除tid字段td_clear并把棧歸還到緩存中。這個歸還過程并非同步完成——如果還有線程正阻塞在pthread_join等待這個線程內(nèi)核會通過CLONE_CHILD_CLEARTID的futex機制喚醒等待者。這里有個細(xì)節(jié)容易被忽略pthread_exit不會調(diào)exit()所以它不會刷新stdio緩沖區(qū)例如printf輸出未\n會被丟棄也不會運行atexit注冊的函數(shù)。你寫的普通局部變量和堆內(nèi)分配都還是有效的但進(jìn)程的全局清理階段還沒開始。這也是為什么很多人困惑“我的printf不打印”——很可能線程就在輸出緩沖刷新前直接退出了。6.2 線程“不可被回收”的后果棧內(nèi)存與pd泄漏如果線程既沒有被join也沒有被detach退出后它的棧并不會立刻釋放。glibc能做的只是把這一塊棧放入緩存池如果緩存池滿了它才執(zhí)行munmap返回內(nèi)核。但struct pthread本身是要緩存的而且它的pd指針還被pthread庫里其他調(diào)度邏輯引用著——在某些版本里可能導(dǎo)致pd-tid指向的線程號已被內(nèi)核回收重用造成pthread_equal判斷錯誤。這在實際業(yè)務(wù)里最常見的場景就是“線程池里線程用完就丟”。雖然線程池本身會join但如果你自己在業(yè)務(wù)代碼里new thread后從不join/detachNPTL的棧緩存就會成為隱性內(nèi)存增長點。這也解釋了為什么很多性能優(yōu)化的第一刀就是“改成線程池復(fù)用線程”。6.3 線程取消pthread_cancel實現(xiàn)原理pthread_cancel不是直接殺死線程而是從外部把取消請求發(fā)給目標(biāo)線程。glibc通過兩種方式實現(xiàn)如果目標(biāo)線程正在futex等待某個條件變量或鎖時內(nèi)核喚醒并注入SIGCANCEL信號否則只在目標(biāo)線程的下一個取消點cancellation point檢查標(biāo)志。實現(xiàn)機制有兩個關(guān)鍵點一是信號NPTL使用一個實時信號SIGCANCEL__SIGRTMIN來打斷阻塞的系統(tǒng)調(diào)用二是取消狀態(tài)和類型標(biāo)志它們存在pd-cancelhandling字段中。重點來了如果線程設(shè)置了PTHREAD_CANCEL_DISABLE即使發(fā)送多次cancel也只是在標(biāo)志上置位而不會真正執(zhí)行取消動作。這里有個容易踩的坑如果你的業(yè)務(wù)代碼自己用了SIGUSR1或SIGRTMIN范圍內(nèi)的信號很可能和SIGCANCEL產(chǎn)生干擾。glibc在pthread_create時會為每個線程重置信號掩碼并屏蔽SIGCANCEL。如果你手動sigprocmask把某些實時信號取消屏蔽就可能破壞內(nèi)部約定——輕則pthread_cancel失效重則整個進(jìn)程出現(xiàn)信號處理錯亂。7. 從源碼中學(xué)到的排障經(jīng)驗三個真實案例7.1 案例一TLS被誤改導(dǎo)致的“線程飛了”有一次排查詭異崩潰某個線程突然訪問野指針gdb掛了半天也沒看出是哪里寫壞的。后來在strace里注意到幾個線程的fs基地址發(fā)生了變化并且clone時CLONE_SETTLS被其他第三方庫篡改了。深入調(diào)查發(fā)現(xiàn)該庫內(nèi)部用了arch_prctl(ARCH_SET_FS, ...)來保存自己的上下文導(dǎo)致glibc的thread pointer被換掉所有__thread變量的偏移全部錯誤。從那以后我對任何直接操作arch_prctl的第三方庫都格外警惕——他們和glibc搶同一個段寄存器早晚要出事。7.2 案例二棧緩存命中率低導(dǎo)致的耗時毛刺服務(wù)每隔幾秒會創(chuàng)建和銷毀一批線程。初期線程創(chuàng)建頻繁時pthread_create的耗時在20~50微秒但偶爾會有1~2毫秒的尖峰。起初以為是CPU調(diào)度問題查看源碼后才想到stack_cache_maxsize。因為棧緩存默認(rèn)上限是40MB當(dāng)線程創(chuàng)建峰值超過這個容量后每次free_stack都會真正munmap而再次創(chuàng)建時又需要mmapmemset毛刺就是這么來的。調(diào)大stack_cache_maxsize并改用線程池后毛刺消失了這對短生命周期線程特別敏感。7.3 案例三死鎖時系統(tǒng)性排查死鎖是最常見的線程問題。真正常見的死鎖并非“四個人圍著桌子互等”那種教科書式而是鎖順序不一致兩個線程都持有鎖A去搶鎖B同時另一線程持有鎖B去搶鎖A。排查時我通常先gdbattach用thread apply all bt看每個線程的棧再結(jié)合pstack確認(rèn)鎖的持有者。如果鎖被futex保護(hù)gdb甚至能直接打印owner線程的TID。這比純靠代碼review快得多。排查時有一個很容易被忽略的細(xì)節(jié)pthread_mutex_t里的__owner字段只在DEBUG版本里才可讀。生產(chǎn)環(huán)境的pthread_mutex_lock通常經(jīng)過LOCK_ELISION編譯__owner可能是0。所以不要依賴__owner來判斷“誰持有了鎖”而是看每個線程的棧幀中正在等待哪個鎖的地址。7.4 線程問題速查表現(xiàn)象可能原因排查思路線程創(chuàng)建越來越慢未join線程堆積棧緩存頻繁mmap/munmap檢查線程數(shù)量與服務(wù)預(yù)期查看/proc/pid/status的Threads字段線程棧溢出SIGSEGV棧大小不足或遞歸過深guard page被擊穿調(diào)大棧大小檢查是否有數(shù)組越界寫棧底方向pthread_cancel不生效目標(biāo)線程設(shè)置了cancel disable或在非取消點運行檢查PTHREAD_CANCEL_ENABLE重試或通過標(biāo)志位協(xié)作退出鎖競爭嚴(yán)重吞吐低鎖粒度大或默認(rèn)mutex對高競爭不友好考慮讀寫鎖、自旋鎖或調(diào)整臨界區(qū)大小線程退出后資源不釋放未join也未detach棧進(jìn)入緩存池且未及時munmap主動join或detach或改用線程池動態(tài)庫加載導(dǎo)致TLS錯亂dtv版本沖突或dlopen后首次訪問動態(tài)TLS避免熱點線程頻繁dlopen或?qū)討B(tài)TLS改為獨立堆分配pthread_equal對不上棧緩存復(fù)用導(dǎo)致pd地址重用舊線程ID映射失效不要長期持有pthread_t用完即棄8. 深入閱讀與調(diào)試的建議路徑如果你看完這篇想進(jìn)一步驗證glibc給出的細(xì)節(jié)我建議不要光看文章直接動手調(diào)試。我的做法是在開發(fā)機上裝一個glibc源碼包apt source libc6或dnf debuginfo-install glibc然后用gdb在pthread_create上打斷點stepi單步看匯編流程。也可以直接設(shè)置環(huán)境變量GLIBC_TUNABLESglibc.pthread.stack_cache_size8388608來觀察棧緩存調(diào)優(yōu)效果這個特性在較新的glibc中可用。比較推薦的閱讀順序是先看pthread_create.c的整體邏輯然后跳到allocatestack.c理解棧的分配再去看clone.S的匯編確認(rèn)系統(tǒng)調(diào)用參數(shù)最后回到同步原語部分。只要順著“創(chuàng)建→運行→退出→同步”這條路徑讀一遍你對線程的認(rèn)知會從“API使用者”變成“實現(xiàn)者”許多線上疑難雜癥也能一眼定位。我的閱讀習(xí)慣是用pahole看結(jié)構(gòu)體布局或者用offsetof輔助打印關(guān)鍵字段。比如在gdb里執(zhí)行p ((struct pthread*)0)-specific就能直接看到specific字段偏移十分方便。源碼讀完后一定記得把perf top打開觀察實際運行中是否有不必要的系統(tǒng)調(diào)用——這樣你讀到的源碼和實際行為才能對上不至于掉進(jìn)“紙上談兵”的坑。我個人在實際操作中最大的體會是glibc的線程實現(xiàn)并不復(fù)雜但它像一層“性能放大鏡”把每種錯誤放大得很明顯。理解它不是為了炫耀底層知識而是讓你排查問題和做性能優(yōu)化時有據(jù)可依。比如看/proc/pid/status里voluntary_ctxt_switches驟增你能立刻想到是不是futex競爭了看到線程創(chuàng)建耗時飆升你會自然聯(lián)想到棧緩存是否被打滿了。這些判斷如果只是在API上層做黑盒觀察很難一次定位準(zhǔn)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产精品久久久久无码Av网曝门| 亚州综合AⅤ| 亚洲欧美综合| 日韩欧美女求操每天更新| 一区 欧美 日韩 麻豆| 极品美女福利在线观看| 国产精品第一区第一页| av黄图片在线观看| 99rre在线精品99re8| 国产91乱伦| 嫩草伊人久久精品| 精品久久久av无码免费| 天天舔九色婷婷| 日韩性爱长视频免费| 欧美永久激情一区二区| 日韩丰满熟妇| 亚洲区小说| 美女超碰978| 欧美亚洲日本激情在线| 91亚洲色图| 97在线无精品| 四虎影视永久在线观看精品免费网站| 操逼999| 2000亚洲男人天堂| 91高跟美女在线播放| 国产乱码久久| 夜夜肏2021| 五月天婷婷基地| 密臀视频一区二区三区| 黑人黄片在线免费观看| 日韩 女同 综合| 色婷婷婷五月天激情四射| 爱射综合| 亚洲淫乱骚妇AV| 欧美性后入| 成年男人的天堂| 欧美成人精品一区二区三区| 日韩一区二区熟女| 色眯眯av| 97碰碰色| 中国人高清www色视频免费| 天堂性色| 91久久九九精品国产综合| 91无码西班牙视频在线| 一级婬片120分钟试看| 国产精品com| 天天做天天爱夜夜爽毛片试看| 狠狠操使劲操| 国产精品蜜臀久久久久无码AV| 日韩精品资源专区二区| 色综合久| 天天操女人| 91处女视频在线观看| 激情亚洲天堂| 夜夜嗨TV| 精品人妻一区二区三区在| 亚洲无无码αⅴ每日更新| 欧美亚洲一级在线观看| 亚洲精品影视老司机| 国产亚洲女v在线观看| 黄色av一区二区在线| 欧美男人一区| 97在线观看视频| 超碰在线91| 视频一区二区三区精品| 97人人操人人干| 极品五月天噜噜| 超碰精品| 婷婷丁香人妻 | 校园春色亚洲色图| 91国模| 亚洲天堂一区二区久久| 麻豆天美国美国产AV| 91美女视频在线| ...日韩成人一区二区三区字幕| 熟妇色99| 一区在线观看中文字幕| m欧洲一级午老| 亚洲男人在线观看天堂| 激情五月天丁香社区| 久超碰在| 99日视频在线免费| 五月婷婷爱六月丁香色| 日日夜夜国产综合| 78精品在线| 久久国产逼| 伊人久久婷婷| 97国产中文| 26uuu欧美日韩| 97中文天堂| 狠狠干综合| 天美欧美国产| 日本影视久久免费| 久久这里只精品99re66图| 欧美一级欧美三级在线观看| 欧美天天综合网| 熟女色综合久久| 91成人在线| 先锋女优在线观看视频| 精品伊人久久久大香线蕉小说| 亚洲丝袜B诱惑| 色噜噜国产精品视频一区二区| 超碰成人最新最好看| 一区二区 电影 亚洲| 日韩精品人妻| 欧美色66| 成人一道本免费视频| 天综合网| 最新av中文字幕高清| oumeisetu综合| 亚洲高清综合网| 99久久久久| 综合亚洲网| 精品久久久亚洲AV成人网站| 高潮9999外国| 超碰79人人乐| 91丝袜在线观看| 亚洲情色91| 亚洲色阁| 强上我不卡卡| 欧美黄片免费在线观看视频| 亚洲极品| 婷婷五月天小说| 深夜激情| 草草影院在线视频| 精品国产Av无码久久久亚洲| 综合网久久| 亚洲免费在线探花| 91老熟女91老女人| 曰韩av中文字幕专区| 玖玖综合视频| 天天综合网国产| 天天看天天日天天操| 91在线欧色| 亚洲国产精品无码AV久久久| 青青草成人视频在线观看二区| 岛国黄| 黑人精品久久97| 奇米狠999| 加勒比久久av| 五月色综合| 在线免费观看高清无码视频| 九九九久| 国产天天骚| 欧美一级AAAAAAA| 最新的亚洲无吗| 天无日色综合| 69国产对白刺激| 蜜臀99久久精品| 超碰在线91| 日韩午夜国产| 啊啊啊啊啊啊啊网址在线观看| 97在线资源| 亚洲好看强奸乱伦| 外国免费性情大片| 玖玖资源中文字幕制服丝袜| 五月丁香激情啪啪| 日韩国产欧美伦理在线| 国产精品农村妇女| se,,,亚洲欧美| 色婷婷九月| 老司机福利青青草| 精人妻一区二区三区| 青青草精玖玖69精品| 天天干天天操天天干天天操| av黄图片在线观看| 青青草毛片| 婷婷探花久久精品一区| 麻豆福利视频导航| 99啪啪视频| JULIA一区二区三区在线播放| 日本阿v天堂在线观看| 久久久久久少妇| 亚洲天天影视综合网| 婷婷五月成人| 色五月av| 2019午夜福利视频| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 亚洲女毛多水多21P| 一区二区三区国产在线播放| 亚洲毛片基地专区| 五月亭亭六月丁香| 久久一区二区三区四区五区| 亚91网| 熟女欧美日韩综合婷婷| 97免费在线视频在线观看| 日韩性爱免费视频在线网站| 超碰免费人妻人人| 性爱视频免费网址| 国产精品无码久久久久2025| 国产9区| 亚洲图片另类| 91亚洲欧洲| 少妇熟女一区二区三区| 久久一区二区三区四区五区| 超碰免费97| 国产白丝av| 欧美美女视频| 视频不卡中文字幕| 97超碰中文在线| 麻豆AV一区二区天美传媒| 天堂涩涩| 啊啊啊啊啊啊啊网址在线观看| 欧美日韩国第一区| 日韩99神马视频播放片在线播放| 九九热在线视频| 久久大香蕉| 综合熟女| 天美一二三在线观看Av| 亚洲欧洲无码97久久精品| 色一射色一射| 伊人久久大香蕉线AV五月天| 91N综合在线| 欧美猛交黑寡妇中文字幕| 樱花草社区www中国| 熟女AV一区| 欧美亚洲成人在线一区二区三区| 狠狠操夜夜| 亚洲 欧美 制服 另类 自拍| 后入式在线免费观看60秒| 亚洲国产无码精品首页久久久| 国语对白在线播放视频| 99色综合| 97视频在| 五十路成人在线视频二区三区| 后入福利| 国产精品久久aV| 久久天天艹| 淫荡少妇免费| 五月激情小说| 国产精品久久久久久久久AV大片| 欧美日韩大黄片| 思思热免费在线视频| 欧美日本国产日韩激情视频| 亚洲激情综合| 亚洲情色在线| 色欧美在线| 男女啪啪网站免费视频| 亚欧国产无码精品在线| 日韩中字av一区| 综合天天网| 麻豆一区二区三区在线看| 亚欧成人一级片在线播放| 亚洲 中文字幕 精品| 秋霞久久亚洲精品成人| 日韩欧美视频青青| 亚洲。天堂。日本在线观看| 国产精品成人AV片免费看网站| 一类无码操逼视频| http://qxhbdz.com| 熟女网站最新| 日本操逼视频免费| 锕锕好爽 死我在线观看| 国内外激情在线| 男人女人18禁片免费看网站| 女人高潮大叫一级毛片| 超碰97最新人妻| 啊啊啊啊啊啊在线| 亚洲中文字幕三级在线| 日夜久久久九九九久| 欧美色97| 婷婷色播婷婷| 天美麻豆黄色录像| 狼狼色丁香久久婷婷综合五月| 国产激情久久久| 一本久久精品中文字| 久久一二三四| 狠狠色丁香| 99久久9| 黄片免费视频2019| 国产亚洲人妻综合日韩 久久| 韩国国产欧美情侣视频在线| 久久天天艹| 91蜜臀熟女| 精品人妻一区二区三区四区| 青青草天天亲夜夜操网| 91激情综合| 无遮挡一级毛片视频免费的| 激情文学 国产一二三aV| 中国少妇啪啪视频| 天天综合网站| 国产深夜福利| 人妻啊啊人妻啊| 少妇激情一区二区三区视频| 99久久久久| 久草毛片| 五月婷婷综合网| 无码精品人妻一区二区三区妖精| 大香蕉欧美国产日韩高潮| 欧美日韩国产成人高清| 免费人人搞97| 中日亚韩免费视频| 国产性刺激| 伊人96在线| 91在线免费精品视频| 久久草大香蕉| 加勒比综合| 国产剧情一区在线观看| 伊人久久综合影院精品久久久 | 欧美懂色综合网| 熟女乱伦二区| 国产在线综合网| 欧美专利1区2区3区4区5区免费| 亚欧成人一级片在线播放| 久久久久久久一级黄色打同平台| 欧美日韩在线小说 | 欧美东京热青青草| 麻豆亚洲Av成人无码一区精品| 女优大全 - 91n| 麻豆60秒| 少妇无码av专区线| 亚洲中文字幕av | 久久久久久免费电影| 91精品大奶人妻| 欧美亚洲首页| 婷婷五月天久久精品视频一区二区三区 | 69天堂| 男人天堂资源| 99热这里只有精| 涩涩涩综合| 我想要啊 啊 啊| 九九人人操| 国产美女高潮| 人妻人久久精品中文字幕| 狠狠综合网| 国产一区自拍欧美日韩| 无码粉嫩白虎一线天b区| 小少妇| 亚洲成aⅴ人片不卡无码| 伊人色综合欧美| 天天摸,夜夜摸| 9丨亚洲一区二区在线| 天天影视之亚洲综合网| 大香蕉天天看妹子| 丁香五月社区| 51一区二区三区| 欧美日韩*字幕一区| 多乙久久久久久| 天天躁日日躁狠狠狠躁| 天天干天天日天天射黄色大片| 高清无码 国产精品| 少妇色欲综合网2| 精品人妻视频一区二区三区蜜桃视频| 无码天天操| 伊人九九九| 天天摸天天舔天天操| 婷婷五月天激情网| 天天躁日日躁AAA片李宗瑞| 超碰免费97| 91成人亚洲色图| 亚洲综合欧美| 欧美后入式| 欧美少妇色综合| 狼天天狼天天大香蕉| 亚洲第一无码播放立川理惠| 91视频伊人| 大香蕉淫人| 竹菊一区二区三区AV线| 超碰欧美97资源| 日韩美女,国产传媒,视频一区| 亚洲五月丁香花狠狠干一区二区三区| 国产成人bd在线观看| 五十路三区在线| 国产强奸乱伦第1页| 97er欧美性| 精品丰满人妻一区二区三区免费观| A级毛片在线看免费| 亚洲欧美黄| 日韩欧美中文字幕搭讪巨乳美人妻视频| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 麻豆九九九| 精品国产乱码久久久久久影片| 免费综合亚洲中文| 一级性爱aaaa| 强奸a片网| 国产亚州高清国产拍精| 美国aaaaa一级黄片| 久久日韩精品一区二区| www.久久制服糖| 五月丁香黄色网| 成年无码动漫av片无尽在线 | 老女人爆菊| 精品丰满人妻一区二区三区免费观| 操逼日韩无码| 婷婷九月丁香| 熟妇一区,二区,三区。| 蜜桃传媒视频第一区入口在线看| 啊啊啊骚| 久久色网| 18禁中文字幕| 男男H黄动漫啪啪无遮挡网站| 中文字幕交换人妻| 免费操逼视频下载| 六月丁香婷| 欧美熟妇视频| 欧美国产视频| 日韩人人精品| 快灬快灬 一下爽蜜桃在线观看| 91美| 玖玖爱在线视频免费观看| 日韩在线欧美精品一区二区| 精品欧美А∨无码黑人大荫蒂 | 午夜精品久久久99热蜜桃的功能特点| 亚洲成人帖图| 操一操摸一摸| 在线观看色视频| 欧美刺激色黄片免费看| 清柠毛片| www被窝色com| 午夜精品久久久久久久久久久久久| 九九九九国产| 日韩精品国产一区二区| 探花精品视频| 精品乱子一区二区三区99| 亚洲熟女一区| 精品78| 精品欧美А∨无码黑人大荫蒂 | 亚洲天堂美臀在线| 精品美女少妇一区二区| 日韩av电影成人在线| 色嗨嗨在线| 农村少妇久久久久久久| 亚洲麻豆av一区二区| 狠狠中文字幕| 亚洲少妇诱惑| 久艹免费| 日韩欧美国产高清视频| 91新在线欧美| 后入式免费视频| 404操逼福利视频| 1024亚洲中文字幕久在线看片你懂的| 午夜无码熟妇丰满人妻| 国产精品直播在线观看直播| 亚洲免费看片| 一区超碰一区| 久久九九视频九九视频| 九九久久国产精品| 日韩综合色图| 五月婷婷综合网| 四虎在线观看网站| 偷拍三区| 欧美九九99久久精品| 福利天天都操| aaaa少妇高潮大片| 成人在线午夜视频一区| 无码一区二区精品视频久久久春药| 国产激情综合五月久久| 蜜臀无码一区二区| 影音先锋少妇| 自拍盗摄一区| 最新日本中文字幕| 久久久精品国产亚洲伊人| 久久婷婷苹果| 深田咏美亚洲精品福利社| 欧美97视频| 一级岛国大片| 躁躁日曰躁2020| 午夜小电影在线插入淫高潮| 欧美一区二区情色| 黑人娇小av在线播放| 99在线观看| 亚洲午夜精品久久久中文影院| 神马久久网| 国产黄色在线播放观看| 美女裸体麻豆天美蜜桃91| 97欧美视频| 国产精品老熟女一区二区| 自拍啪啪视频| 亚洲精品一区中文字幕乱码| 蜜臀久久99精品久久久久久婷婷 | 国产精品视频| 在线综合色| 欧美中字不卡| 亚洲激情av| 麻豆精品.欧美精品.日韩精品.| 玖玖婷婷五月天| 78精品在线| 亚洲欧美精品一区天堂久久 | 久久九九综合| 国产97在线视频| 久久久久久久久久久久久久9999| 亚洲中文字幕精品一区| 亚洲欧洲无码97久久精品| 久久久久久电影| 国产热av| 91爱综合| 四虎影视永久在线免费| 国产97/欧美| 男人天堂一区二区| 久久精品一区二区一8| 91+欧美| 在线国产福利网址导航| 国产蜜臀精品一区二区尤物| 国产青一二三| 亚洲五码一区二区三区| 精品1区2区3区| 少妇诱惑视频| 97摸视频| 欧洲精品一级二级精品综合视频综合| 性色高清在线| 国产极品一区二区三区三州| 超碰在线99| 国产一国产一级毛片古装| 蜜桃久久久久久久久久久久| 色九九综合| 欧美爆乳精品一区二区| 国产一区二区精品久久久不卡蜜臀| 日日夜夜干| av天堂精品久久| 人妻一区二区三区熟女| 中文久久96| 特污免视频| 日韩乱伦影音先锋| 天天视频黄| 天天综合91入口| 欧美一区二区传媒| 99亚洲天堂| 亚洲第一狼人丝袜美女另类| 黑人猛交| 久操国产在线| 51一区二区三区| 久插综合| 天天综合AV| www色婷婷| 操逼www.| 男人的天堂午夜av| 91性色| 亚洲图片 欧美电影| 久久久久久久久久久久黄色 | 97综合久久| 丰满少妇精品一区二区| 欧美A√综合网| 97精品国产97久久久久久免费| 欧美日韩中文亚洲v在线综合| 亚洲色图尤物视频| 国产精品一二三区18| 老司机香蕉久久久久| 亚洲色图综合网| 欧美婷婷久久| 一牛影视久久久一区二区三区| 97香蕉碰碰人妻国产欧美| 手机在线中文字幕国产| 日本人妻中文字幕 | av情色影音| 玖玖久久久| 亚洲中亚日激情视频| 国产天美传媒精品| 东北女人操比视频| 天天综合网1| 四虎884a| 久久久99999久网站| 三级网站超变态精品| 国产suv精品一区二区四| 情色AV电影| 超碰亚洲97| 95精品在线| 久久一区无码| 精品乱子一区二区三区99| 高清不卡国产| 操人妻逼91| 超碰97最新人妻| 99re99视频在线免费观看| 久插综合| q2午夜理论片夜色av| 亚洲丰满很很操| 人妻精品一区一区三区蜜桃91| 玖玖爱伊人玖玖爱| 人人操人人摸超碰| 国产1024在线播放| 99久久久无码精品国产人| 中国少妇XXXX做受| 美女黄频a美女大全免费皮| 操婷婷逼| 国产视频三区四区| 97 九色| 97久久国产精品| 一二三四区电影| 性一级黄色录像片网站导航| 97无码视频在线播放| 国产色综合亚洲色综合吹潮| 日韩A优精品在线观看| 乱伦系列一区二区| 亚洲色吧网| 1204av韩国| 欧美伦乱| 欧美gv在线观看| 国产精品探花视频| 久7色| 欧美黄色大香蕉一区二区| 久久久久国产精品喷潮免费观看臀 | 五月丁香黄色网| 乱伦1色页| 欧美日韩人妻婷婷一区| 丝袜色综合| 日韩一卡二卡三卡| 色在线综合| 日韩不卡a级视频专区| www.yw尤物| 成人天天看站长推荐| 久久久熟女一区| 火箭成精品视频884必出精品| 亚洲乱色熟女一区| 欧美一级做a爰片免费视频| 殴美牲| 亚洲日韩欧美一区二区| 麻豆av一区二区| 成人麻豆av电影网站| 日本三级中国三级99人妇网站| 第45页一区二区| 精人妻一区二区三区| 日本狂喷奶水在线播放212| 日本三级大片| 九久久精品| 日本高清视频xxxx| 中文字幕老熟妇黄色视频| 日本黄色天堂| 国产亚洲欧美每日在线| 麻豆天美电影一区二区| 亚洲综合色在线| 欧 美 自 拍 偷 拍| 久久久A∨| 亚洲日本大香蕉1| 国产成年免费大片黄在线观看| 粉嫩国产精品久久粉嫩| 老司机香蕉| 热99这里只有精品| 97丝袜亚洲在线播放| 国产91亚洲精品一区二区三区| 日韩高潮一区| 91亚洲图片| 国产67194| 国产精品对白自产拍| 国模不卡| 男人的天堂久久狠| 天天干人人干天天日97| 99色婷婷中文字幕乱色| 日韩免费三级黄片电影| 国产白领连续中出在线观看| 91殴美| 亚洲激情网一二三四区| 超碰人妻97| 亚洲另类综合欧美| 色欧洲| 伊人影院中文字幕| 五月天婷婷激情| 草B在线| 激情专区综合| 欧美草草高清日韩视频| 久久久久9| 欧中美三级一区二区三区| 九九无码视频| 欧美一级二级三级| 婷婷久久综合| 91综合色噜噜| 亚洲一本色码中文字幕| 日韩色欲久久一二三四区| 伦在线97| 成人三级片无码| 亚洲色性| 混色激情av| 美国日韩黄片| 蘋果手機免費看成人Av| 特级丰满少妇一级AAAA爱毛片| 大干人妻| 日本高清一区二区在线| 日本护士高潮| 精品人妻一区二区三区免费视频| 激情五月天色色网| 日韩一二三区| 99国产精品免费| 国内毛片国产专区二| 中韩中文字幕在线观看| 青青国产精品在线| 欧美呦呦性爱| 亚洲男人天堂2| 69人妻精品一区二区绯色| 校园春色综合网| 日韩图区| 91狠| 欧美性爱1080p| 啊啊啊慢点| 免费看污网站| 色爱三区| 无码久久亚洲高清,| 色呦色呦色精品| 精品精品精品| 久久社区一区二区三区| 久久精品无码专区| 歐美性天天| 99色在线视频| 少妇啪啪自拍| 97超碰日韩| 国产第11页| 99热色这里只有精品| 日本丝袜人妻内射| 91美女视频| 欧亚韩国999| 欧美色997| 色婷婷久久| 国产免a费看黄片在线| 思思热免费视频观看| 精品无码秘 人妻一区二区| 曰韩少妇无码| 亚洲日韩青青草色月| 在线99热| 99久久e免费热视| 日韩免费在线观看不卡| 麻豆一区二区AV天美| 欧美乱妇狂野欧美在线视频| 国产超碰国产97| 操逼逼无码| 一级特黄aaa大片在线观看成人一级片在线观看| 偷拍亚洲视频一区二区三区四区| 久久曰曰| 久久精品免费| 色五月婷婷麻豆在| 久热9| 亚洲成人美女无吗| 高潮的A片激情扒开一区| 精品91日日夜夜超清资源| 久久久草草精品| 久久精品人妻一区二区| 自拍欧美| 97色色色综合网站| 99久久无色码| 精品91摸| 精品国产网站| 99丝袜福利在线播放| 激情丁香五月| 美女刺激久久国产欧美| 婷婷激情五月| 人妻久久久| 屌逼麻豆| 欧州色图区| 五月天丁香欧洲日韩| 丝袜美腿诱惑亚洲欧美视频在线观看 | 久久精品久久九九精品| 天天射天天操天天干天天吃2018| 亚洲色欧美| 欧美爱爱97| V A在线| 成人一道本免费视频| 美国日韩黄片| 97在线精品观看视频| 国产精品一区二区校花| 人妻一区视频| 夜夜影视四色| 亚洲国产欧美中日韩成人综合视频| 日本一区二区成人在线| 操逼网站视频漫画国产| 青青草丝袜在线视频| 日韩在线观看中文字幕视频| 啪啪综合网| Av色五月| 欧美韩国你懂得在线| 久久久久921| com 首页 18岁 禁区 女优 免费 精选 同城| 九九九九九九九九九九九蜜桃| 亚洲天天精品| 亚洲视频精选| 久久透逼视频| 欧美性爱十八禁| 亚洲色色色| 日韩二三区| 国产成人精品一区| julia国产在线 | 欧美性爱伊人| 中文字幕日韩国产传媒欧美精品| 91麻豆天美传媒HD| 污电影在线观看| 久久婷婷成人综合色怡春院| 国产成年女黄特黄| 东北丰满熟女国产一区 | 国产97在线播放| 超碰97护士| 国产精品人妻熟女aⅴ| 欧洲熟妇xxXx欧美老妇裸体| 久久女人视频| 国模91| 97精品| 亚洲欧洲日韩国产自在线| 99爱视频| 试看60秒| 国产精品美女视频诱惑| 欧美专区日本专区| 丝袜内射| 性感美女91影视| 少妇高潮流水av免费| 97国产成人精品免费视频| 国产欧美一区二区| 国产精品午夜精品| 男女做爰猛烈动高潮A片免费应用 少妇厨房愉情理伦片bd在线观看 不卡中文字幕aⅴ在线 | 920日本午夜免费| 中文字幕精品日韩中文字幕| 麻豆国产96在线| 欧美爆操91| 五月天婷婷社区| 亚洲欧美综合区自拍另类| 99爱视频| 午夜福利一区二区三区四区五区色婷婷| 91视频综合| 久草视频分类在线| 蜜桃精品视频一区| 亚洲图片激情小说| 欧美99热| 中文日韩欧美熟| 日本熟女不卡视频| 九九九九久久久| 亚洲第一男人天堂| 岛国黄| 97高清啪啪| 亚洲情色视频| 久久99网站| 国产后入清纯| 免费一级黄色录像影片| av操操不卡| 97免费在线观看| 婷婷激情五月| 91痴汉| 爱av免费| 精品视频久久区| 国产精品毛片?v一区二区三区| 日本精品人妻少妇一区二区| 色综91| 国产亚洲人妻综合日韩 久久| 日韩高清一二三| www.黄色在线| 欧美玖玖爱免费玖玖| 日韩精品一区二区高清| 在线综合 亚洲 欧美中文字幕| 色欲av国内精品久久久久久| 超碰人人妻| 97干在线视频| 综合色图区| 久久久亚洲熟妇熟女| 91色综| 久久久亚洲熟妇熟女| 情色AV电影| av黄图片在线观看| 91色五月俺来也| 久久成人国产精品| 亚州色图欧美| 久久一区二区高清免费| 日韩三级性| 国产欧美亚洲精品a第2页| 懂色av中文字幕一区二区三区天美 | 日韩一级特黄av毛片| 蜜桃视频一区二区三区 | 久久青娱乐| 亚洲激情AV| 91综合在线| 亚洲蜜臀懂色| 大香蕉专区| 亚州欧美在线| ′ !γ}丶。。久久精品欧美一区二区三区| 久久久夜夜夜| 又黄又粗又硬又长又大| 免费伦费视频在线观看| 精品视频一区二区| 乱日视频| 欧美不卡二区| 中国熟妇| 99re69综合| 国产午夜激片Av毛片不卡| 中文字幕第二页| 欧美日韩性感| 中国一级特黄大片护士| 熟女熟妇一区二区三区视频| 男人的天堂2019AV| 激情五月天插| 亚欧色图在线激情| 亚洲十八禁止| 欧美视频在线第3页| 成年人三级黄色片视频| 亚洲欧美校园| 男人干美女| 国产超碰| 中文字幕在线观看网页| 日本狠狠干| 超碰九7免费| 日本精品国产视频| 最新中文字幕精品在线| 亚洲黄色电影| 狠狠躁天天躁日日躁| 性做久久久久久免费观看软件| 91亚洲网| 久久久国产护士丝袜美腿一| 91老司机在线视频免费观看| 探花熟女,姿勢到位,體驗感也到位| 久久精品无码专区| 在线亚洲丝袜视频网站| 久久超碰爱| 五月天丁香婷婷综合网站| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 久久久久精| 久久肏大逼| 亚洲密乳AV| 91天美| 我爱操| 动漫av中文| av在线人气| 嗯嗯啊在线视频| 久久久精品视频免费观看| 午夜男女爽爽爽影院视频| 亚洲情色 自拍| 欧日韩在线观看| 九九久久久久久爱| 五月婷在线| 自拍偷拍2025在线观看| 日小BB小视频| 26uuu最新| 久久人| 久久久亚洲精品中文字幕人妻| 97在线资源| 亚洲一区二区麻豆影院| 国产1769在线| 欧美97爱| 久久超碰天天| 偷拍亚洲高清图片| 日本精品不卡一二三区| 综合色91| 怡春苑东京热| 五月激情小说| 日本黄大片在线观看视频| 国产日韩欧美| 色婷婷亚洲婷婷| 亚洲性网| 精品人妻少妇| 欧美日韩妖精91com| 欧美色图成人网一区二区 | 久久草在线综合视频| 国内伊人久久久久久网站视频| 好看的久久不射无码影视影院| 色色激情| 国产18精品亚洲精品| 岛国黄| 啪啪视频免费在线观看| 60秒试看最爽10分钟网站| 日韩操逼性鲍| 亚洲综合20p| 加勒比av官网在线| 啊好爽受不了无码| 男人的天堂亚洲| 韩国黄色片精品久久久| 国产91亚洲精品一区二区三区| 69久久| 青青草日韩免费观看高清在线| 亚洲色图在线视频| 欧美v亚洲v日韩v最新在线二区| 国产综合日韩伦理| 怡红院成人视频| 国产精品国产| 亚洲网污污污污| 日韩AV色图| 中文字幕av色| 久久久久久久一级黄色打同平台| 日本午夜久久电影| 97操操| 啪啪一区| 99啪啪| 99国产精品人妻人伦| 久久草草欧美精品| 欧美熟爽综合| 91是天天| 国产天天看| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 欧亚日韩三区| 亚洲情色在线| 蜜臀va69| 亚洲国产熟妇综合色专区| 狠狠干91| 欧美国产欧美在线观看| 久久久久久日韩| 久久久久国产一区二| 国产AV超爽| 四虎AV在线观看| 狠狠搞 亚洲91| 丝袜色综合| 久久国产精品m码| 澳门黄片一香蕉视频| 亚洲一卡2卡3卡4卡乱码网站| 久久精品性| 亚洲欧美日产国产91毛片| 伊人九九| 97人人操人人摸人人爱| 校园春色综合| 97欧美久久久久久久| a级免费在线观看| 国产无马av| 亚州综合AⅤ| 人妻丝袜美腿中文字幕| 91精品人妻电影| 精久久久91| 久久夜夜| 91色艳| 97网色| 性色av婷婷久久一区二区点复制| 偷窥自拍亚洲色图| 日韩性爱电影一区| 久久精品夜色国产亚洲AV| 亚洲影院成人| 嗯啊不要啊在线| 91宗合网| 久久激情五月| 久久久久久十| 日本三级黄页| 97资源久久| 91人妻爽爽人人做人人澡| 日韩无码服务区| 久久99亚洲精品久久99果| 国产又长又大又粗的视频| 日韩欧美一级特黄大片| 久久超碰av在线| 网页导航五月天免费一二三区| 欧美亚洲厕所精品偷拍91| 十八禁av无码免费网站APP| 欧日韩在线观看| 欧美人妻久久精品二区三区| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 亚洲熟妇乱女区二区三区| 国内毛片四区| 农村妇女一级二级三级视频| 东北女人高潮视频| 天堂av2019| 日韩在线性爱免费视频| 天天舔天天日天天射| 盗摄女人妻在线| 免费视频观看60秒| 伊人影院中文字幕| 波多野42部无码喷潮在线观看| 精品一久久久| 久久婷婷五月综合| 亲子敌伦对白在线播放| 国产玖玖| 国产小黄片在线免费观看| 強姦亂倫a| 国产精品播放| 久久线上视频免费看| 欧美丝袜美女电影一二三四区| 老熟女91av| 91美女在线精品视频| 67194国产| 久久久中文| 视频分类 国内精品| 丰满岳乱妇一区二区三区| 黄片www视频免费| 极品国产内射| 91网站18| 一起草三级AV电影在线观看| 日韩猛交| 91欧美综合| 国产精品乱码久久| 久久伊人东京热| 精品国产国产AV| 一区 欧美 日韩 麻豆| 久久一二三四五六七八九区区区| 热久久国产| 国产一区免费午夜视频| 亚洲免费成人在线高清无码视频| 亚洲加勒比| 在线无码视频| 精品无码不卡视频| 全球成人中文在线| 久久美女福利是上海美女| 亚洲黄色影视| 色哟哟国产精品免费网址| 蜜桃传媒一区二区亚洲| 91殴美大片| 亚洲怡春院| 操逼操逼操| 欧美精品一区二区少妇免费A片| 国产亚洲精品农村妇女 | 欧美黑人猛交春色影视大全| 色性荡荡荡荡视频| 97色涩| 欧美97色| 欧美另类精品xxxx| 99这里都是精品| 美女91在线观看| 中国91AV| 岛国黄| 国产欧美伊人| 日日AAvv| 天天色天天干天天爱| 男人的天堂在线有码| 亚洲色图自拍| 日韩兔费看黄片| 九九激情网| 大乔未久88一区| 日韩福利综合一区| 69人妻精品一区二区绯色| 天天干1区2区在线| 三级AV入口| 日韩传媒在线| 亚洲色宗合| 色婷婷狠狠| 国产又粗又长的视频| 影音先锋乱| 日日骚精品视频| 高清一区AV无码| 五月天伊人| 国产精品久久久久久久电影渣男| 97久久精品亚洲| 精品午夜福利| 99热综合| 日日摸天天爽夜夜欢| 深爱五月婷婷| 久久免费9| 亚洲欧美大| 狠狠婷婷亚洲中文综合久久| 熟女日韩| 一级岛国大片| 欧洲大香蕉| 俺去俺来也在线www| 九久久九九久视频| 精品超碰中文在线| 久久国产逼| 精品国产久久乱码| 91婷婷| 日少妇视频| 欧美78| 激情综合婷婷| 先锋影音av先锋一区| 成人在线永久| 蜜臀av在线播放一区二区三区| 激情色图| 亚洲欧美另类激情小说| 人人操人人摸人人骑| 亚洲久热| 日韩欧美加勒比| 亚洲国产欧美中日韩成人综合视频| 少好三P| 精品无码一区二区| 国产精品亚洲无码| 美女网站91| 亚洲成人色情五月天丁香花| 亚洲aV无码成人在线观看| 亚州男人天堂| 伊人久久亚洲色欲综合网站| 在线观看一卡二卡| 可以在线观看AV的网站| 久久超碰97| 超碰欧美COM| 久久天堂婷婷网| 欧美亚洲国产91在线| 麻豆乱码久久精| 色五月首页| 日产操逼| 九热中文字幕| 91痴汉| 五月天加勒比啪| 啊好爽快点-国产一区二区三区撒尿在线-成人AV | 少妇久久| 不卡二三区人妻少妇| 一区二区无码视频| 亚洲丝袜二区在线| 欧美在线第五页| 久久99干一本高清| 青青草一区二区高清无码视频 | · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 |