日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

C語言實現(xiàn)離散事件模擬:銀行排隊算法與事件驅(qū)動設(shè)計

C語言實現(xiàn)離散事件模擬:銀行排隊算法與事件驅(qū)動設(shè)計 離散事件模擬聽起來像科研術(shù)語其實就是操作系統(tǒng)實驗1里那個銀行排隊算法要用到的核心機制。用C語言實現(xiàn)的時候我一開始覺得不過是模擬幾個客戶進銀行排隊沒想到里面對事件鏈表、隊列、隨機數(shù)的要求都不低。做完之后回頭總結(jié)發(fā)現(xiàn)這個實驗特別值得聊表面上是練數(shù)據(jù)結(jié)構(gòu)實際上它是理解操作系統(tǒng)調(diào)度、網(wǎng)絡(luò)報文處理、連接池管理這類真實系統(tǒng)的一個微型沙盤。這篇文章會從建模思路、數(shù)據(jù)結(jié)構(gòu)設(shè)計、C語言實現(xiàn)細節(jié)、常見調(diào)試坑四個方面展開爭取讓正在寫這個實驗的人能直接抄到思路也讓沒做過的人知道離散事件模擬到底是怎么回事。1. 先搞懂離散事件模擬到底在解決什么問題1.1 什么是離散事件模擬離散事件模擬的核心思想是系統(tǒng)狀態(tài)只在“事件”發(fā)生的時刻發(fā)生變化而不是隨時間連續(xù)變化。所謂離散就是指狀態(tài)變化發(fā)生在一個個孤立的時間點上。銀行排隊場景里客戶到達是一個事件客戶開始接受服務(wù)是一個事件服務(wù)完成離開也是一個事件。在這些事件之間窗口忙不忙、隊列里有多少人都是不變的所以模擬器完全可以跳過這些“空白時間段”。這個特點讓模擬程序變得很高效。假設(shè)銀行營業(yè)8小時也就是480分鐘。如果按時間步長法每隔1秒掃描一次要迭代28800次但用事件驅(qū)動客戶到達間隔平均2分鐘加上服務(wù)完成事件總共可能只需要處理幾百到幾千個事件。差了一個數(shù)量級還不止。操作系統(tǒng)課程里很多調(diào)度算法、資源分配問題本質(zhì)上都是離散事件系統(tǒng)所以這個實驗不是單純練鏈表而是在訓練一種“事件驅(qū)動”的建模思維方式。1.2 事件驅(qū)動為什么比時間步長高效有同學會問我能不能在一個循環(huán)里每秒鐘把系統(tǒng)狀態(tài)刷新一次理論上可以但問題很多。第一步長選擇很尷尬步長太大會漏掉短時間內(nèi)連續(xù)發(fā)生的事件步長太小又會把性能拖垮。第二真實系統(tǒng)中事件發(fā)生的時間點往往不是整秒步長模擬天然有量化誤差。第三大量時間窗口里系統(tǒng)什么都沒發(fā)生這些掃描都是無效計算。離散事件模擬的做法完全不同系統(tǒng)維護一個當前時間每次都從事件鏈表里取出“下一個最早發(fā)生的事件”然后把當前時間直接跳躍到那個事件發(fā)生的時刻。比如第一個客戶在10:00到達服務(wù)到10:03:20第二個客戶在10:00:40到達處理完第一位客戶后系統(tǒng)時間直接從10:00跳到10:03:20中間兩分鐘沒有任何事件所以完全不掃描。這種時間跳躍機制讓模擬程序天然精確且高效。1.3 銀行排隊模型的四個核心元素要在程序里模擬銀行排隊先得把現(xiàn)實世界抽象成四個部分客戶、窗口、等待隊列、事件??蛻羰橇鲃拥膶ο竺總€客戶有到達時間、開始服務(wù)時間、離開時間窗口是服務(wù)資源每個時刻只能服務(wù)一個客戶可能空閑也可能忙碌隊列是排隊等待客戶的容器通常是先進先出事件則是整個模擬的驅(qū)動源分為到達事件和離開事件。底層的邏輯關(guān)系不復(fù)雜客戶隨機到達有窗口空閑就直接接受服務(wù)沒有窗口空閑就進隊列等待。窗口完成一個服務(wù)后如果隊列里有人就從隊頭取出一個客戶繼續(xù)服務(wù)否則窗口轉(zhuǎn)為空閑。事件分別在這兩個階段產(chǎn)生到達事件會觸發(fā)一次“分配窗口”的嘗試離開事件會觸發(fā)一次“從隊列取人”的嘗試。把這張關(guān)系圖在草稿紙上畫清楚寫代碼時就不容易亂。1.4 實驗需求拆解輸入與輸出實驗題通常會給這樣幾個輸入?yún)?shù)參數(shù)示例值含義窗口數(shù)量3銀行有多少個服務(wù)窗口總模擬時間480 分鐘營業(yè)時長平均到達間隔2 分鐘客戶到達的平均間隔平均服務(wù)時間3.33 分鐘單窗口服務(wù)一位客戶的平均耗時輸出指標則包括總客戶數(shù)、平均等待時間、最長等待時間、平均隊列長度、窗口利用率。這里有一個非常容易忽略的坑總模擬時間結(jié)束后銀行會停止接受新客戶但還在排隊等待的客戶依然要被服務(wù)完。所以模擬循環(huán)的終止條件不能是“當前時間達到總時長”而應(yīng)該是“事件鏈表為空”。我最初就是寫成了前者導(dǎo)致最后統(tǒng)計結(jié)果少了很多人實驗報告數(shù)據(jù)直接變得不合理。2. 核心數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計2.1 事件鏈表模擬的引擎所有事件的調(diào)度都依賴于一個按時間排序的數(shù)據(jù)結(jié)構(gòu)。最簡單的選擇是單向鏈表每個節(jié)點記錄事件發(fā)生的時間、事件類型、關(guān)聯(lián)的窗口和客戶編號。插入時按照時間升序查找位置讓表頭始終是全局最早要處理的事件。取出時只需要摘掉表頭時間復(fù)雜度O(1)。節(jié)點結(jié)構(gòu)可以這樣設(shè)計typedef struct Event { double time; // 事件發(fā)生時間單位統(tǒng)一用分鐘 int type; // 0-到達事件1-離開事件 int window; // 離開事件對應(yīng)的窗口編號 int customer; // 客戶編號 struct Event *next; } Event;為什么時間要用double而不直接用int因為隨機生成的指數(shù)分布時間間隔會出現(xiàn)小數(shù)如果強轉(zhuǎn)int長期模擬會產(chǎn)生累積誤差。單位統(tǒng)一用“分鐘”后就不要中途改成秒否則后期統(tǒng)計會非?;靵y。另外事件鏈表和普通鏈表的區(qū)別在于它要求每次插入都保持有序。哪怕插入操作是O(n)在這個實驗規(guī)模下也完全夠用。2.2 客戶等待隊列FIFO不只是排隊等待隊列在邏輯上是先進先出實現(xiàn)上可以用帶頭尾指針的單鏈表。但有一個設(shè)計細節(jié)比隊列本身更重要節(jié)點里到底存什么信息如果只存客戶編號出隊后還要去客戶表里找回到達時間繞了一大圈。我建議直接把到達時間存在隊列節(jié)點里這樣客戶出隊的一瞬間就能計算出等待時間。typedef struct QueueNode { int customer; // 客戶編號 double arriveTime; // 到達時間 struct QueueNode *next; } QueueNode;入隊時記錄的是該客戶進隊列的那一刻而不是到達銀行的那一刻。在銀行排隊模型里客戶到達后如果沒有空閑窗口才會入隊所以入隊時間其實就是到達時間。但如果以后擴展成“取號后必須排隊”或者“VIP優(yōu)先”這個字段就得靈活處理。實驗階段先用最簡單版本把arriveTime當作到達時間就好。2.3 窗口狀態(tài)資源管理的小難題窗口是共享資源需要單獨用一個數(shù)組維護狀態(tài)。每個窗口至少要有兩個字段是否忙碌、累計服務(wù)時間。前者用來判斷到達事件能不能立刻被服務(wù)后者用來計算窗口利用率。還可以順便記錄每個窗口服務(wù)的客戶數(shù)方便做更加精細的統(tǒng)計。typedef struct { int busy; // 1-忙碌0-空閑 double workTime; // 累計服務(wù)時長 int servedCount; // 已服務(wù)客戶數(shù) } Window;窗口狀態(tài)為什么不能塞進事件鏈表里因為事件是瞬時的窗口狀態(tài)是持續(xù)存在的。比如窗口從忙碌變成空閑是在離開事件發(fā)生的那一刻改變的但同時它又在下一個客戶被分配之前一直保持空閑。這種“持續(xù)性狀態(tài)”放在事件節(jié)點里會讓邏輯特別別扭所以一定要單獨維護。等到處理離開事件時把窗口置為空閑然后立刻看隊列里有沒有人有人就通知下一個客戶進來。2.4 隨機數(shù)生成讓模擬看起來真實客戶到達和服務(wù)過程都有隨機性操作系統(tǒng)實驗里通常要求符合泊松過程即到達間隔服從指數(shù)分布。指數(shù)分布的生成方式不是直接用rand()而是用逆變換法先生成均勻分布隨機數(shù)再取負對數(shù)。C語言實現(xiàn)如下#include math.h double exponential_random(double rate) { double u rand() / (RAND_MAX 1.0); if (u 0.0) { u 1e-12; } return -log(1.0 - u) / rate; }這里rate是“單位時間內(nèi)的平均發(fā)生次數(shù)”。比如平均每2分鐘來一個客戶那么到達率是0.5客戶/分鐘調(diào)用時寫exponential_random(0.5)。如果服務(wù)一位客戶平均耗時3.33分鐘那么服務(wù)率是0.3客戶/分鐘。最容易犯的錯誤是把平均間隔當成rate直接傳進去比如寫exponential_random(2)這會讓間隔變成平均0.5分鐘模擬結(jié)果猛一看也能跑但數(shù)據(jù)會完全不對。3. C語言實現(xiàn)的關(guān)鍵環(huán)節(jié)3.1 程序模塊劃分與編譯環(huán)境即便是課程實驗我也建議把代碼拆成三個模塊事件管理、隊列管理、統(tǒng)計邏輯。事件管理負責鏈表的創(chuàng)建、有序插入、取出隊列管理負責入隊和出隊統(tǒng)計邏輯放在主循環(huán)里單獨抽成函數(shù)。這樣哪怕只想把窗口數(shù)從3改成4也只需要改一個宏定義和初始化代碼。編譯時需要注意math庫的鏈接。很多同學在編譯實驗代碼時發(fā)現(xiàn)log函數(shù)報錯原因是沒用-lm參數(shù)。如果gcc編譯命令是gcc -o bank_sim main.c event.c queue.c stat.c -lm如果編輯器自帶了構(gòu)建系統(tǒng)記得在鏈接參數(shù)里加上libm。我大學時第一次遇到這個錯誤完全沒頭緒報錯信息有一大堆其實就只是缺了數(shù)學庫。3.2 初始化把模擬推上軌道模擬啟動前需要做幾件事初始化所有窗口為空閑、初始化等待隊列為空、生成第一個客戶到達事件。第一個到達事件的時間通常設(shè)為0表示營業(yè)時間開始第一位客戶正好趕到。事件插入函數(shù)要把新節(jié)點按時間順序放到事件鏈表中。隨后設(shè)置隨機數(shù)種子比如srand(42)固定種子可以讓每次運行的結(jié)果一致方便調(diào)試。srand(1000); for (int i 0; i WINDOW_NUM; i) { windows[i].busy 0; windows[i].workTime 0.0; windows[i].servedCount 0; } insertEvent(0, 0, -1, 0);那個insertEvent里傳的參數(shù)分別是時間0、類型0表示到達、窗口編號-1表示無窗口、客戶編號0。客戶編號從0還是從1開始都無所謂只要自增唯一即可。我習慣從1開始這樣輸出日志時更像真實場景調(diào)試起來也好辨認。3.3 主循環(huán)事件驅(qū)動的核心主循環(huán)是整個模擬程序的心臟。它反復(fù)做三件事取出事件鏈表表頭、把系統(tǒng)時間推進到該事件時間、根據(jù)事件類型分發(fā)處理。偽代碼如下while (eventList ! NULL) { Event *ev eventList; eventList ev-next; now ev-time; if (ev-type 0) { handle_arrival(now); } else { handle_departure(now, ev-window); } free(ev); }注意取出事件之后不要忘記free否則長時間模擬會內(nèi)存暴漲。主循環(huán)的結(jié)束條件是事件鏈表為空也就是說所有已經(jīng)到達的客戶都已經(jīng)被服務(wù)完畢。這里不存在“營業(yè)時間結(jié)束就強制結(jié)束”的問題因為銀行關(guān)門之后不再生成新到達事件但已經(jīng)在隊列里的人會繼續(xù)被服務(wù)直到清空。從時間推進的方式也能看出離散事件模擬的精髓now不是均勻遞增的而是直接跳到下一個事件發(fā)生的時刻。如果兩個事件之間間隔了100分鐘這100分鐘幾乎是瞬間被跨過。這種設(shè)計讓整個模擬的效率極高。3.4 到達事件與空閑窗口分配當取出一個到達事件時處理邏輯可以拆成兩個步驟第一步嘗試為這位客戶分配空閑窗口第二步生成下一位客戶的到達事件。第一步的細節(jié)是如果找到空閑窗口立刻讓客戶開始服務(wù)并生成一個離開事件如果沒有空閑窗口把客戶放入等待隊列。核心代碼思路如下void handle_arrival(double now) { int customer nextCustomer; totalCustomers; int freeWin find_free_window(); if (freeWin 0) { start_service(freeWin, now); } else { enqueue(customer, now); } if (now SIM_TIME) { double next_arrive now exponential_random(ARRIVE_RATE); if (next_arrive SIM_TIME) { insertEvent(next_arrive, 0, -1, customer); } } }這里有一個容易被忽略的細節(jié)生成下一位到達事件時要用新生成的隨機間隔加到當前時間上而不是用固定間隔。很多入門實現(xiàn)圖省事直接每隔固定分鐘數(shù)插入一個到達事件這樣模擬結(jié)果看起來“很整齊”但實際上丟失了隨機性。實驗要求學生理解泊松過程就應(yīng)該用指數(shù)分布間隔。另一個細節(jié)是如果當前時間已經(jīng)超過了模擬總時長就不再生成下一個到達事件了但窗口服務(wù)還在繼續(xù)。判斷條件是next_arrive SIM_TIME而不是now SIM_TIME。因為即使當前事件還在一分鐘前下一個隨機間隔也可能讓到達時間越過營業(yè)結(jié)束點這種情況下客戶不應(yīng)該再進銀行。3.5 離開事件與隊列取出離開事件發(fā)生時意味著某個窗口的服務(wù)已經(jīng)完成。處理邏輯是把對應(yīng)窗口置為空閑然后立刻檢查等待隊列里有沒有人。如果隊列非空就從隊頭取出一個客戶計算他的等待時間安排他開始服務(wù)并生成一個新的離開事件如果隊列為空窗口就保持空閑。void handle_departure(double now, int windowId) { windows[windowId].busy 0; if (queueHead ! NULL) { QueueNode *q dequeue(); double wait_time now - q-arriveTime; totalWaitTime wait_time; servedCustomers; serve_customer(windowId, now); free(q); } }這里有一個非常重要的順序問題必須先置空閑再取隊首客戶。如果反過來取隊首時發(fā)現(xiàn)沒有隊列邏輯上也對但如果有隊列你會直接從隊列取人卻忘了把窗口狀態(tài)改回忙碌導(dǎo)致后一個到達事件又分配同一個窗口。這種bug很難肉眼發(fā)現(xiàn)因為程序不會崩只會統(tǒng)計結(jié)果異常。離開事件處理完畢之后主循環(huán)會繼續(xù)取下一個事件。新生成的離開事件通過insertEvent按時間排入鏈表因此所有事件都會按發(fā)生先后順序被處理。哪怕一位客戶的離開時間比另一個新客戶的到達時間更早鏈表也會自動保證順序。3.6 統(tǒng)計指標計算平均值也講究策略平均等待時間相對簡單在每個客戶出隊時計算出該客戶的等待時間累加后除以服務(wù)客戶數(shù)即可。窗口利用率則是每個窗口的累計服務(wù)時間除以總模擬時間這里總模擬時間指的是最后一個事件結(jié)束的時間而不是預(yù)設(shè)的SIM_TIME。如果隊列在營業(yè)時間結(jié)束后很久才清空那總模擬時間等于最后一個客戶離開時間這一點需要格外注意。平均隊列長度則是一個容易做錯的統(tǒng)計量。很多人拿到隊列長度變化直接求算術(shù)平均比如在10個事件點采樣隊列長度加起來除以10。這樣做是錯的因為兩次事件之間的時間間隔不一樣。隊列長度為3的時間段可能持續(xù)100分鐘隊列長度為1的時間段可能只持續(xù)0.5分鐘簡單算術(shù)平均會被短時間段的數(shù)值嚴重誤導(dǎo)。正確做法是時間加權(quán)平均。維護兩個變量上一次事件時間lastTime和當前隊列長度queueLen。每當取出新事件時將累計量增加queueAccum curQueueLen * (now - lastTime); lastTime now;當整個模擬結(jié)束時平均隊列長度 queueAccum / (lastEventTime - initialTime)。這種做法的道理其實很簡單它把“隊列長度”在時間軸上畫成一條階梯曲線然后求這條曲線下的面積再除以總時長。這也是專業(yè)離散事件模擬工具里的標準做法。4. 示例代碼與運行效果4.1 核心代碼骨架下面給出一段半偽代碼結(jié)構(gòu)的示例函數(shù)名和結(jié)構(gòu)體定義與前面的思路一致。要直接運行的話需要把find_free_window、serve_customer等輔助函數(shù)補全但核心邏輯就在這里。#include stdio.h #include stdlib.h #include math.h #define WINDOW_NUM 3 #define SIM_TIME 480.0 #define ARRIVE_RATE 0.5 // 客戶到達率平均間隔2分鐘 #define SERVICE_RATE 0.3 // 服務(wù)率平均服務(wù)3.33分鐘 typedef struct Event { double time; int type; // 0到達 1離開 int window; int customer; struct Event *next; } Event; typedef struct QNode { int customer; double arriveTime; struct QNode *next; } QNode; typedef struct { int busy; double workTime; int servedCount; } Window; Event *eventList; QNode *queueHead, *queueTail; Window windows[WINDOW_NUM]; int nextCustomer 1; int totalCustomers 0; double totalWaitTime 0.0; int servedCustomers 0; double expRand(double rate) { double u rand() / (RAND_MAX 1.0); if (u 0.0) u 1e-12; return -log(1.0 - u) / rate; } void insertEvent(double time, int type, int window, int customer) { Event *e (Event *)malloc(sizeof(Event)); e-time time; e-type type; e-window window; e-customer customer; e-next NULL; if (!eventList || eventList-time time) { e-next eventList; eventList e; } else { Event *p eventList; while (p-next p-next-time time) { p p-next; } e-next p-next; p-next e; } } void enqueue(int customer, double arriveTime) { QNode *n (QNode *)malloc(sizeof(QNode)); n-customer customer; n-arriveTime arriveTime; n-next NULL; if (queueTail) { queueTail-next n; } else { queueHead n; } queueTail n; } QNode *dequeue() { if (!queueHead) return NULL; QNode *n queueHead; queueHead n-next; if (!queueHead) queueTail NULL; return n; } int findFreeWindow() { for (int i 0; i WINDOW_NUM; i) { if (!windows[i].busy) return i; } return -1; } void serveCustomer(int windowId, double now) { windows[windowId].busy 1; double serveTime expRand(SERVICE_RATE); windows[windowId].workTime serveTime; windows[windowId].servedCount; insertEvent(now serveTime, 1, windowId, 0); } void handleArrival(double now) { int customer nextCustomer; totalCustomers; int freeWin findFreeWindow(); if (freeWin 0) { serveCustomer(freeWin, now); } else { enqueue(customer, now); } if (now SIM_TIME) { double nextArrive now expRand(ARRIVE_RATE); if (nextArrive SIM_TIME) { insertEvent(nextArrive, 0, -1, customer); } } } void handleDeparture(double now, int windowId) { windows[windowId].busy 0; if (queueHead) { QNode *q dequeue(); double waitTime now - q-arriveTime; totalWaitTime waitTime; servedCustomers; serveCustomer(windowId, now); free(q); } } int main() { srand(1000); for (int i 0; i WINDOW_NUM; i) { windows[i].busy 0; windows[i].workTime 0.0; windows[i].servedCount 0; } insertEvent(0, 0, -1, 0); double now 0.0; double lastTime 0.0; double queueAccum 0.0; int curQueueLen 0; while (eventList) { Event *ev eventList; eventList ev-next; now ev-time; queueAccum curQueueLen * (now - lastTime); lastTime now; if (ev-type 0) { handleArrival(now); } else { handleDeparture(now, ev-window); } // 重新統(tǒng)計隊列長度需要在外面維護一個輔助函數(shù) // curQueueLen queueLength(); free(ev); } double avgWait servedCustomers ? totalWaitTime / servedCustomers : 0; double avgQueueLen queueAccum / (now - 0); double totalSimTime now; printf(總客戶數(shù): %d\n, totalCustomers); printf(接受服務(wù)客戶數(shù): %d\n, servedCustomers); printf(平均等待時間: %.2f 分鐘\n, avgWait); printf(平均隊列長度: %.2f 人\n, avgQueueLen); for (int i 0; i WINDOW_NUM; i) { printf(窗口%d利用率: %.2f\n, i 1, windows[i].workTime / totalSimTime); } return 0; }這段代碼要直接編譯還需要補一個queueLength函數(shù)邏輯是用一個遍歷函數(shù)數(shù)一下當前隊列節(jié)點數(shù)。不過更優(yōu)雅的做法是在主循環(huán)外部維護一個計數(shù)器入隊時1出隊時-1這樣統(tǒng)計隊列長度的時間復(fù)雜度是O(1)。我給的骨架里沒有寫這個計數(shù)器但實際項目里一定要加因為它不僅用于平均隊列長度統(tǒng)計也能避免每個事件都去遍歷鏈表浪費不必要的時間。4.2 運行結(jié)果樣例與解讀固定隨機種子運行一次輸出大概長這樣總客戶數(shù): 248 接受服務(wù)客戶數(shù): 248 平均等待時間: 3.87 分鐘 平均隊列長度: 1.72 人 窗口1利用率: 0.74 窗口2利用率: 0.69 窗口3利用率: 0.71這個結(jié)果是比較合理的。平均到達間隔2分鐘服務(wù)一位大約3.33分鐘三個窗口合起來的服務(wù)能力是每分鐘0.9個客戶而客戶到達率是每分鐘0.5個服務(wù)能力明顯過剩所以隊列不會堆積。如果平均等待時間漲到幾十分鐘大概率是參數(shù)寫成了“平均間隔0.5”之類的錯誤導(dǎo)致客戶大量涌入。我建議拿到結(jié)果后先做一次“合理性校驗”用到達率除以總服務(wù)能力得出系統(tǒng)負載率。上述參數(shù)下負載率是0.5/0.9約等于0.56平均隊列長度應(yīng)該在一個較低的數(shù)值。一旦模擬結(jié)果和粗略計算差很多優(yōu)先檢查隨機數(shù)參數(shù)。4.3 參數(shù)調(diào)整實驗從模擬看系統(tǒng)瓶頸做完基本實驗后我建議順手做幾組對照實驗這部分內(nèi)容放進實驗報告會非常有說服力。比如把窗口數(shù)從3改成2負載率變成0.5/0.6約等于0.83平均等待時間和平均隊列長度會明顯上升。再把窗口數(shù)改成4負載率降到0.42等待時間會大幅下降但窗口利用率也下降說明資源出現(xiàn)冗余。這就是離散事件模擬在現(xiàn)實中最常見的用途資源配置決策。銀行經(jīng)理不知道到底該開幾個窗口靠直覺拍板容易出錯把客戶到達率、服務(wù)率輸進模擬器跑一遍就能看到平均等待時間變化。雖然課程實驗只是模擬一個簡單銀行但方法論是可以直接遷移到機場值機柜臺、倉庫分揀線、服務(wù)器集群調(diào)度這些場景里的。5. 常見問題與調(diào)試技巧5.1 死循環(huán)和時間回退寫這個模擬最容易遇到的崩潰型問題是程序跑不完。原因往往不是有人忘了釋放內(nèi)存而是事件鏈表里出現(xiàn)了“時間回退”的事件。比如一個離開事件的時間是103.2而某個到達事件的時間也是103.2這沒關(guān)系但如果你生成的隨機服務(wù)時間是負數(shù)或者參數(shù)填錯導(dǎo)致下一個到達時間比當前時間還要小事件鏈表就會陷入不斷重復(fù)處理同一個事件的死循環(huán)。排查時最簡單的方法是打印每個事件的時間和類型。在while循環(huán)里加一行printf(%.2f type%d\n, ev-time, ev-type)觀察時間序列是否始終單調(diào)遞增。如果發(fā)現(xiàn)某次時間相同或變小立刻回頭看這次的事件是怎么生成的。我調(diào)試時曾經(jīng)遇到過一個很隱蔽的問題把平均到達間隔當成到達率用導(dǎo)致平均間隔變成0.5分鐘到達事件瘋狂生成程序活活跑了好幾分鐘還在繼續(xù)輸出客戶數(shù)。改成正確的參數(shù)后幾秒內(nèi)就出結(jié)果了。5.2 平均隊列長度算不準很多人在統(tǒng)計平均隊列長度時直接在每個事件處理完以后把隊列長度累加最后除以總事件數(shù)。這樣算出來可能和正確值差一大截。比如隊列長度5持續(xù)了100分鐘隊列長度0持續(xù)了10分鐘事件總數(shù)只有兩部算術(shù)平均是2.5但真實的平均隊列長度接近4.55。這個差距對實驗報告的影響很大。正確做法是時間加權(quán)平均。如果你在代碼里沒有維護lastTime和queueAccum可以這樣實現(xiàn)取出事件后先計算一個“面積貢獻”再更新lastTime為當前事件時間。我一開始犯錯就是因為把“每個事件的隊尾長度”當成了“時間段內(nèi)的代表值”想明白之后才發(fā)現(xiàn)原來只是乘法問題。實驗報告里寫上這個統(tǒng)計原理老師通常會認為你真正理解了離散事件模擬。5.3 隨機數(shù)種子與結(jié)果復(fù)現(xiàn)使用srand(time(NULL))會讓每次運行結(jié)果都不一樣。對實驗來說一個常見需求是“復(fù)現(xiàn)同一個bug”或“提交穩(wěn)定數(shù)據(jù)”這時期望保證每次運行結(jié)果一致。只需要把隨機種子改成固定值比如srand(2024)。固定種子后相同參數(shù)、相同代碼一定產(chǎn)生相同結(jié)果方便比較不同窗口數(shù)對結(jié)果的影響。另外rand()生成的隨機數(shù)質(zhì)量對大規(guī)模模擬有一定影響尤其是當你模擬百萬級客戶時低16位的隨機性可能會不夠。但對操作系統(tǒng)課程實驗來說標準庫已經(jīng)足夠。更講究一點的做法是使用自定義的隨機數(shù)生成器比如梅森旋轉(zhuǎn)算法或PCG。不過我不建議在課程實驗里額外引入復(fù)雜隨機庫因為老師要看的核心是模擬邏輯不是隨機數(shù)質(zhì)量。5.4 內(nèi)存釋放與大型模擬優(yōu)化思路事件節(jié)點和隊列節(jié)點都是malloc出來的如果處理完不free程序在小規(guī)模模擬中可能看不出來但如果模擬幾萬客戶內(nèi)存占用會持續(xù)增長。我的習慣是在popEvent之后、處理完事件后立即free在dequeue之后、使用完節(jié)點信息后立即free。這樣可以保證內(nèi)存使用量跟事件鏈表的當前長度相關(guān)而不是跟歷史事件總數(shù)相關(guān)。如果以后要做更大規(guī)模的模擬事件鏈表每次插入都是O(n)性能會隨著事件數(shù)量上升而下降。更好的方案是使用最小堆或優(yōu)先隊列來管理事件。C語言里手寫一個二叉堆并不難核心操作是sift-up和sift-down插入和取出都是O(logn)。在課程實驗階段先把鏈表版本跑通再考慮優(yōu)化不要一開始就追求復(fù)雜結(jié)構(gòu)否則調(diào)試難度會成倍上升。6. 寫在最后的調(diào)試心得這個實驗我前后改了三個版本。第一版把所有代碼堆在main函數(shù)里邏輯全揉成一團調(diào)試時看一眼就頭大。第二版拆成了函數(shù)但統(tǒng)計隊列長度時還在用算術(shù)平均數(shù)據(jù)怎么都不對。第三版才真正理解時間加權(quán)平均又把隨機數(shù)種子固定下來最后跑出的結(jié)果才算穩(wěn)定。我個人的體會是這類模擬題真正卡人的地方不是語法而是“事件推進”和“狀態(tài)統(tǒng)計”這兩個思維模型。只要想清楚每個事件的副作用是什么、每個統(tǒng)計量應(yīng)該怎么在時間軸上加權(quán)代碼只是順帶的事。最后再分享一個小技巧調(diào)試時把所有關(guān)鍵日志加個開關(guān)比如定義DEBUG宏時輸出每個事件的時間、類型、窗口編號、隊列長度發(fā)布最終版本時關(guān)掉這個宏。這種做法在大型軟件工程里叫日志分級放在課程實驗里也同樣實用。它可以幫助你把一次運行過程完整復(fù)盤而不是靠猜去定位bug。如果你正在做類似的模擬實驗可以照著這個思路先把數(shù)據(jù)結(jié)構(gòu)定下來再去填充事件處理的細節(jié)。之前沒有接觸過離散事件模擬也沒關(guān)系這個實驗就是讓你通過銀行排隊模型逐步建立事件驅(qū)動的直覺。等以后學到進程調(diào)度、報文轉(zhuǎn)發(fā)、連接池管理這些概念時你會發(fā)現(xiàn)它們跟銀行排隊的本質(zhì)問題一模一樣那時候你就能體會到這門實驗課真正的價值了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产真实野战在线视频| 日本丝袜美腿人妻九九| 国产精品国产精品国产| 九九九999久久久网站| 欧美日产国产在线成人第一区| 综合激情五月丁香| 一二三四区电影| 欧美乱伦专区| 4141514逼喷水三级片| 欧美姓爱综合网| 逼逼逼逼操操操操操操操操操午夜剧场| 六月丁香啪啪啪| 国产人妻一区二区三区欧美毛片| 天美传媒av 在线| 蜜臀久久99精品久久久电影| 一区二区三区四区在线不卡| 欧洲天天在线| 欧美日韩性爱视屏免费看了| 亚洲国产精品无码AV久久久| 啊啊啊久久| 日韩78m视频| 黄色网址在线免费观看| 香蕉久久精品| 大香蕉十区| 日天天九九天堂666| 9l视频自拍9l九色成人| 99操逼| 免费人成毛片乱码| 亚洲中文字幕一区二区| 国产人妻精品一区二区三区秋霞 | 青青草视频久久| 人妻 中文 日韩| 日韩无码一级黄色av片| 成 人 A V免费视频在线观看| 97欧美色综合| 熟妇无码视频三区| 加勒比色综合| 久久久三区二区一区| 欧美永久激情一区二区| 青青色综合| 嗯嗯嗯啊啊啊在线免费观看| 嗯啊不要啊在线| 久久久精品91八戒| 中文字幕av乱伦| 日本一级婬片试看三分钟| 国产福利电影| 激情婷婷综合久久| 午夜男人av| 日日噜噜夜夜狠狠视频无| 中文字幕av片| 精品超碰国产| 九九九精品成人免费视频小说| 99热97| 中文字幕精品一区欧美| 亚洲美女精品九九视频| 久操99| 99精品伊人| 人人天天欧洲| 啊啊啊不要啊啊受不了了视频在线| 五月丁香综合| 天天操天天舔| 丁香六月婷婷综合| 91婷婷伊人狠人| 97在线视频免费看| 少妇三P| 综合一区中亚洲国产成人综合精品 | 艹精品| 丰满欧美放荡少妇在线| 99精品在线| 国产女人极品高潮毛片| 人妻夜爽夜夜爽| 亚洲图片欧美| 女色综合| www.久久最新地址| 日本三级中国三级99人妇网站| 蜜桃成人1区2区3区| 欧美日日网| 97人人爱人人做人人乐| 日韩91网| 东京热视频网| 日日夜夜天天| 亚洲男人天堂2013| 国产精品农村妇女| 国产黄色 A 片免费看| 色丁香久久| 一区二区偷拍拍视频| 67194无码不卡| 欧美强奸乱能| 成人资源中文字幕在线观看天天| s片在线观看| 国产精品自拍视频| 美女被艹尤物视频| 香港成人一级视频在线青青草| 欧美视频第二页| 国产乱码久久久| 国产后入| 黄页大片在线观看| 欧美综合色综合| 色在线综合| www.色婷婷色综合| 操B久久| 九九九九9999| 久久一区二区三区入口| 精品二999| 日韩少妇无码| 亚洲日本男人天堂网| 97干综合网| 高潮精品| 精品熟女一区=区三区| 色天堂综合| 狠狠操使劲操| 蜜桃成人1区2区3区| 九九九九97| 91无码人妻精品一区二区三区蜜桃| 91色人妻| 人人摸人人舔一区二区| 午夜.DJ高清在线观看免费7| 九九九九九九九九九五码| 97超碰中文在线| 1禁看欧美黄片免费看| 看黑丝美女操逼青青网站| 亚洲精品熟妇1区2区3区。| 精品无码久久久久久久杏吧| 天天日少妇逼AV| 亚洲少妇免费视频\| 精品国产一区二区三区香蕉欧美| 久久国产精品熟女人妻| 激情视屏国产乱伦强奸| 日本不卡一二区| 久久久蜜桃一区二区三区| 超碰久久.com| 美日韩成人| 岛国天天午夜影院传媒网| 日人妻视频91| 日本性一区| 另类一区| 欧美色网络| 亚洲图片偷拍视频区| 五十路成人在线视频二区三区| 亚洲欧洲日韩天堂av| 97综合日韩| 亚洲欧美另类小说| 天天欧美欧美亚洲网| 爱丝福利| 天天日日夜夜| 北约熟女超碰| 97国产亚洲中文在线| 日韩激情无码影院| 欧美亚洲清纯| 日本中文字幕在线视频| 久久精品电影在线| 啊好大好舒服| 99在线观看| 97草草| 日韩在线观看中文字幕视频| 久草在线| 户外裸露刺激视频第一区| 国产久9| 日韩有码一区三区| 国产精品无码av嫩草| 欧美韩日精品99综合| 熟女人妻av在线资源,黄色的资源| 免费岛国一级片| 欧美日动态视频| 亚洲精品99| 国产精品一区av在线| 999国产精品999久久久久久| 日韩人人精品| 九九九九九九九九九五码| 国产精品成人无码av无码免费| 国产免费内射视频| 亚洲熟女少妇免费视频| 少妇与黑人高潮在线| 熟女乱伦二区| 日本熟女免费視颖| 成人线上超碰| 99av| 91中文字幕制服丝袜免费视频| 爱干爱射网啊啊啊| 啊啊啊啊嗯嗯嗯用力好爽| 在线无码视频| 欧美欧美啪啪视频| 91天堂| 欧美激情视频一区二区三区不卡| 欧美色图片| 神马久久网| 亚洲情色91| 丁香婷婷九月| www.狠狠操| 欧美v亚洲v日韩v最新在线二区| 超碰97久久| 97精品一区| 亚洲伊人久久精品影院| 九一精品牛牛一区二区| 91 国产丝袜在线放观看| 国产 码在线成人网站| 日韩黄色一区二区三区| 伊人久久大香线蕉无码| 高清无码一区二区三区| 日韩人妻一二三区视频| 无码一区二区精品视频久久久春药| 97在线视频网站| 国产一区二区在线看| 操老熟女AV| 白丝在线一区| 欧美黑人91| 天天影视之亚洲综合网| 青青操视频在线| 亚洲色悠悠久久88| 美女爽爽爽刺痛洞洞| 97超碰久| 久久久久96| 亚洲在钱| 欧美天天综合在线| 亚洲天堂一区| 伊人黄色片| 日韩99精品视频综合区| 性爱免费视频成人| 亚洲精品国产精品乱码不99| 日本一级黄色电影| 精品国产嫩穴视频| 久久中日麻豆| 91国产伊人大香蕉| 久久婷婷精品| 国内外色色色色色成人视频| 长长久久免费视频| 亚洲永久AV无码精品秋霞| 超碰97最新人妻| 欧美日韩青操| 日本媚薬中文字幕在线| 免费观看成人www精品视频| 亚洲欧美国产va在线播放频| 成人a级高清视频在线观看| 久久一级无码精品毛片6| 熟女被操视频网址| 啊啊啊啊视频免费| 久久m| 欧美在线|亚洲| 亚洲综合在线91| 亚洲人妻在线精品| 天天天天操| 日日夜夜骚| 亚洲图片 激情小说| 2017,超碰| 亚洲学生妹高清av| 国产精品成人无码av无码免费| 狠狠综合网| 人人澡人人爽人人精品| 久久久96精品| 懂色中文一区二区三区 | 精品少妇后入一区二区三区四区人妻巨乳| 91艹逼精品| 熟女少妇一区二区三区| 亚洲强奸乱伦影视网| 国产少妇肉丝在线观看| 久草在| 啊啊啊啊啊在线| 中国一级特黄大片护士| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 91欧美性| 亚洲色图尤物视频| 久久99热这里只频精品6学生| 色欲人妻一区二区在线| 大JI巴好深好爽又大又粗视频| 91丨豆花丨熟女| 久久久久久国产精品| 亚州综合色图| 国产黄色剧情影片麻豆免费播放| 色色五月丁香| 91久久国外网| 国产成年精品高清在线观看91| 俺去也婷婷| 亚洲九九视频在线观看| 香蕉久久AⅤ...| 欧美日韩国产中文精品字幕自在自线,| 日韩不卡网操逼中文字幕日韩| 亚洲 在线| 秋霞欧美性爰视频| 国产AV人人夜夜澡人人爽麻豆| 18禁看网站一区| 六月丁香五月婷婷| 婷婷人妻激情| 久久五月视频| 人妻熟女一区二区三区视频| 国产免费一区在线观看| 久久网亚洲| 外国91| 国产精品久久久久久久免牛肉蒲团| 欧美精品在线观看| 91九久| 午夜免费视频1000| 狠狠干,狠狠操| 久久精品国产久精国产| 亚洲中文字幕在现观看| 美女露胸露尿口| 欧美姓爱综合网| 熟女乱伦二区| 易易A毛视频| 99爱精品| 午夜精品久久一区二区| 亚洲精品一二三四区| 中文字幕丰满子伦无码专区在线视频最新 | 久热久一区二区三区| 超踫中文字幕| 九九人人操| 色色五月丁香| 在线 亚洲 网爆 自拍| 欧美老熟另类| 日本天天干天天日一区| 一本大道青青| 大色综合| 影音先锋新男人| 国产亚洲精品美女久久久| www.91理论| 91 亚洲 欧美 日韩 国产 综合| 综合久久久久久久综合网| 亚洲欧美日韩精品久| 国产激情在线观看| 久久女人视频| 中文字幕超碰CAO| 亚洲av无线观看| 天天摸天天舔天天操| 欧美综合网在线| 97在线视频免费看| 日韩中文字幕精品一区在线| av天堂5| 好吊色综合| 久热这里| 综合欧美激情网| 人妻熟女一区二区在线视频| 亚洲情色一区综合| 黄色网址在线免费观看| 午夜乱轮操逼视频免费看| 国产偷人妻精品一区二区在线| 国产无套粉嫩白浆在| 日韩欧无码一区二区三区免费不卡| 美欧老女人97| 欧美99| 婷婷去俺也去六月色| 殴美色网| 午夜毛片高清免费不卡| 丁香五月激情网| 操逼大黄片| 精品欧美乱码久| 国产美女口爆吞精| AV中文在线可看| 国产人妖视频一区在线观看| 久操免费观看| 人妖欧美一区二区| 欧洲一区二区三区免费| 久久草大香蕉| 91成人久久| 国产久久久久久| 91女优在线观看 | 麻豆天天躁天天揉揉AV| 91强在线播放| 不卡一区视频| 啊啊啊啊啊啊啊好爽不要| 免费毛片在线播放| 东京热男人的天堂精品| 久久欲| 九九热九九| 男人的天堂VA| 91精品操美女| 成人七区| 精品少妇一区二区三区免费观看| 伊人aaa| 亚洲aV性爱| 日韩大香蕉| 老女人91| 美女让帅哥通她小鸡鸡| 校园春色中文字幕AV| 三级片大波波| 欧美一区二区三区大综合| 久久黄色网址| 青青草操逼逼视频| 亚洲色五月| 日韩久久激情精品| 欧美性后入| 色欲人妻一区二区在线| 诱惑人妻欧美一区在线播放| 嗯嗯嗯嗯啊啊啊好紧好大| 国产又色又爽又舒服的三级视频| 91色久| 久久人妻精品| 欧美人妻二区三区| 日产成人久久| 日本操逼aaaaa| 日韩在线一区高清在线| 成人a级高清视频在线观看| 99久久久无码精品国产人| 性爱视频无打码在线观看| 日本熟女中文字幕一区| 98一区二区精品| 成人欧美日超碰| 亚洲图片小说欧洲| 欧亚性爱视频免费看| 天天做日日爱夜夜爽| 99九九久久| 欧美成人精品一区二区三区| 97国产精选| 在线观看一级α片刺激高潮视频| 骚逼高潮久久精品| A啊啊在线观看| 天天影视综合色| 2019精品国产无码成人| 五月丁香激情综合网| 久久久不卡区一区二区三区久久久| 96一区二区三区| 日韩成人私密一级精品av| 综合网色| 人妻天堂网| 综合久久中文字幕综合日韩精品| 日日干男人的天堂| 人人看人人爰人人操| 国产精品 亚洲情色| 亚州,欧美在线| 把腿张开老子CAO烂你| 亚洲第一二区另类图| 1240青青草一区二区三区视频天爱| 欧美性巨大╳╳╳╳╳高跟鞋| 久久综合久久综合人久久夜精品| 久96热在线观看视频| 高清不卡国产| 人人操人人搞人人草| 天天舔天天日天天射| 国产精品露脸在线观看| 天天干天天中出av| 美国aaaaa一级黄片| 9997se| www.yw尤物| 亚洲久久久久| 97中文字幕一区| av天天在线观看| 97免费视频在线观看| 欧美亚洲影视| 国产热RE99久久6国产精品首| 女优大全 - 91n| 色天使大香蕉| 91精品国产高清久久久久久,亚洲成人| 亚洲人码13| 国产92麻豆天美精品色欲5| 超碰久超碰久| 亚洲性综合| 久久久久性熟视频| 在线观看黄色电话| 亚洲本色精品一区二区久久| 久久超碰av在线| 午夜人妻精品综合在线| 国产欧美岛国精品一区| 国产一区二区成人av在线播放| 天操老女人| 强奸乱亚洲| 国产乱伦亚洲| 97色综合中文网| 91精品人妻啪啪间| 欧美激情久久久久| 欧美影音在线| 国产精品色哟哟| 丁香五月激情婷婷| 欧美刺激色黄片免费看| 欧美日韩国产高清在线一二三区 | 草久在线| 男人网站婷婷| 久久久久久波多野吉衣高潮| 久操高青| 亚洲A色| 蜜桃在线观看一区二区三区 | 大香交伊人网| 中文字幕久久精视频久久大全| 日本三级R| Blackedraw视频一区二区| 人人操人人摸人人骑| 中日韓欧美高清| 91天天综合| 78久久| 人妻丝袜美腿中文字幕| 凹凸视频在线一区二区| 男女啪啪网站免费视频| 精品中文字幕第一页| 亚洲天堂一区二区久久| 天天操夜夜操狠很操| 亚洲第一狼人丝袜美女另类 | 国产成人精品必看| 亚洲午夜福利视频| 天天综合精品| 亚洲五区熟女| 亚洲成人帖图| 久久精品国产亚洲妲己影视| 多乙久久久久久| 91色艳| 久插不卡| 蜜臀久久99精品久久久久电影| 欧成人精品H无码| 中文字幕精品一区欧美| www.狠狠操| 超碰欧美在线欧美| 91老女人| 探花激情视频| 色综合 加勒比| 美国人人操人人操| 97久久超碰国产网站| 玖玖资源视频一区二区三区| 日本韩国国产精品一区| 国产精品交换一区二区| 大香蕉色欲AV| 日本操大逼| 91人妻超碰| 人妻精品一区二区三区| 入口操逼网站| 精品熟妇视频一区二区| 国产www色在线观看| 亚洲少妇激情视频| 无码精品久久久天天影视| 亚洲男人天堂2019| 中国特猛少妇色xxx| 国产精品免费视频人成| 老色鬼成人精品视频下载大在线观看| 免费的黄片有限公司| 偷窥自拍亚洲色图| 日本成a人v网站在线观看| 91free福利| 欧美,日韩,中文,另类| 在线99热| 被窝影院午夜看片无码| 欧美日韩一干二干| 草草影院日本第一页| 欧美日韩少妇色情| 国产女人操逼视频| 老熟女综合| 中文97国产| 郑州宾馆老熟女露脸啪啪| 91美女視頻| 丁香五月天啪啪| 亚洲一区二区三区春色| 人澡逼| 人妻久久久久久| 日韩有码专区| 亚州欧美总和| 亚洲伊人久久精品狠狠在线| 免费亚洲黄色视频在线观看| 色欧美亚洲| 四虎免费看黄| 天天插天天干| 色综合网1| 精品丝袜无码一区二区三APP| 亚洲蜜臀精品视频久久| 黑操B| 国产成年女人免费视频播放a| 午夜福利一区二区三区四区五区色婷婷| 可以免费观看的AV| 人人看人人摸人人色| 亚洲一区二区三区中文字幕| 日韩一级二级三级在线不卡观看完整| 欧美色日本| 亚洲欧美大香蕉| 国产人妻天天干精品| 人人操欧美风骚| 日韩99999| 久久夜夜夜| 国产乱婷婷精品二区三区| 国模精品娜娜一二三区 | 2020国产精品| 99精品久久久久久久婷婷蜜桃| 小日子操bb在线看| 人妻二区| 强奸乱伦免费网站| 成人无码在线超碰网| 黄片视频观看| 性久久久| 日日操丁香五月天| 国产操偷| 丝袜大香蕉| 久久国产精品91| 亚洲不卡不卡中文字幕不卡| 熟妇最新先锋一二三区| 久都青青视频| 媚薬在线视频麻豆| 久久老熟女| 欧美人妻少妇| 天堂俺去俺来也www久久婷婷| 少妇被c 黄 免费观看| 香蕉视频欧美一卡二卡| 国产又粗又大硬免费色网视频| 在线毛片片免费观看| 久久露脸国产老熟女| 99热最新| 日韩精品操少妇| 欧美78P| 亚洲精品性爱片| 天美AV片| 四虎免费视频| 欧美Ⅴ性爱| 人人操AV| 日本免费二区三区| 成年女人黄网站| 爽爽淫人网| 色偷偷综合91久久噜噜| 国产黄片精品在线| 欧美一区二区三区大综合| 91艹| 人人看人人爰人人操| 国产人妻精品久久久一区二区三区 | 欧美精品999| 欧美视频第二页| 欧洲视频在线| 九月婷婷久久| 高清视频一区| 人妻久久久久久久久久久久久久久| 国产精品天干天干综合网麻豆| 精品九九九| 亚洲日本韩国极品一区二区| 97伊人超碰| 乱伦1色页| 91夜夜蜜桃臀1区2区3区| 高潮精品| 亚洲人在线| 俺去啦俺来也久久综合| 99啪啪| 欧美1区二区三区公司| 国模不卡一本二本三电影| 91亚洲情色| 激情五月综合网| 色欲久久99国产精品久久久久久| 中文字幕在线日亚州9| 天天操妹子| 欧美超碰9798| 午夜.DJ高清在线观看免费7| 今日头条成人一区二区三区四虎精品| 青青免费在线视频一区| 国产小炒后入式| 五月天色色网站| 午夜精品久久久久久久久久久久久| 大香蕉碰碰| 无码人妻一区二区三区色欲aⅴ| 天天躁日日躁AAAXX| 国产91 丝袜在线播放00-百度| 国产三级日产三级韩国三级 | 国产最新AV| 日韩肏逼视频| 啊啊啊骚| 99啪啪| 精品久久人妻成人网| 青青草色AV| 欧美激情总合网| 日韩一性一交一A片俄罗斯| 四季av一区二区凹凸精品小说| www狠狠| 中文字幕一区电影在线观看| 亚洲色图 欧美| 99热这里只有精品1| 色五月第四色| 久操B网| 六月丁香婷| 日韩一区二区三区四区五区| 无码一区免费在线不卡| 亚州黄站| 亚洲熟女少妇免费视频| 白丝在线一区| 超碰97玖玖爱| 99.色网| 久久草草欧美精品| 在线观看免费视频国产| 先锋色眉乱伦资源| 国产成年免费大片黄在线观看| 干B网| 1024精品在线| 天美传媒麻豆一区二区三区国产精| 人妻在线大香蕉| 91电影色诱| 中文字幕55555| 国产精品网站免费| 男人久久精品| 综合激情一一91| 91女优在线观看 | 九九精品无码专区免费| 久久五月丁香| 人妻嗯啊啊在线播放| 伊人天堂在线| 涩涩久久精品| 国产精品久久久亚洲第一牛牛_在线观看| 欧美激色| 久久69| 日韩精品免费高清视频在线| 精彩国产视频播放1区2区| 一二三四视频在线社区中文字幕| 欧美精品不卡一二三四在线91| 国产少妇内射| 欧美视频一| 3D污黄视频在线观看| 大香蕉人妻| 成人五月天色网| 96精品久久| 97国产高清视频在线观看| 成人片在线播放| 蜜臀99999| 丝袜美腿操av| 国产女人和拘做爰视频| 涩五月婷婷| 国产成人主播| 三上悠亚在线毛片91| 久久久久国产精品片区无码直播 | 久久久久一本一区二区青青蜜月| 久久女女| 婷婷在线视频在线观看| 四虎国产精品永久地址入口| 草草影院在线视频| 吉田爱美AV在线| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 国产成人99久久亚洲综合| 欧美一区二区三区入口| 男人的天堂网免费| 97干在线视频| 五月色综合| 搡老女人老91妇女熟女| 日韩熟女无码| 黄色乱论网站| 97国产|免费| 韩日性爱av| 97一区二区蜜臀| 91美女在线观看| 亚州情色j区| 黄色一区三区| 国产成人手机视频激情| 精品久久久久久久久久久久| 亚洲一区操| 嗯嗯嗯啊啊啊操的我好爽 | 麻豆久久久久久久久丝袜 | 久久少妇人妻| 国产精品自拍欧美在线| 激情人妻另类| 久精品无码av一区二免费国产在线观看| 日韩在线人妻网站| 国产亚洲精品激情| 曰本91情色| 91九色网| 精品欧美老熟女一二区| 老司机福利青青草| 久久久久久性爱视频| 免费亚洲黄色视频在线观看| 9ⅰ久久久天天| AV大香蕉| 强奸乱伦免费网站| 欧美人妻一区二区| 啊啊啊com| www…国产操逼| 免费A V在线播放| 男人的天堂2018东京热啪啪啪| 国产亚洲精品无码三区| 亚洲综合 欧美| 久久理论字幕视频| av凤凰久久久| 色狠狠 - 百度| 婷婷人妻激情| 丰满欧美放荡少妇在线| 伊人一区二区三区| 精品96久久| 激情综合五月天| 夜夜天天噜狠狠爱2021| 婷婷久久五月综合激情| 欧美裸体美女日麻屄| 97在线无精品| 亚洲人在线成线成人| 99久热| 成年人性爱日韩| 国产AV激情无码久久无码 | 亚洲 自拍偷拍 欧美| 亚洲综合20p| 人人妻人人玩人人澡人人爽| 中文字幕AV片| 美女十八禁| 成人一级二级| 婷婷五月天色网| 国产久久一区二区| 绯色AV粉色AV蜜臀AV| 欧美熟妇精品黑人巨大一二三区| 99久久久| 欧美 中文字幕 一区| 久久伊人大香蕉| 中国国产精品一区视频| 亚洲性爱免费电影| 国产精品午夜高潮呻吟久久av| 中国国国产一级特黄毛片| 蜜乳性色无码专日粉嫩骚逼AV| 为用户提供免费看黄网址在线观看| 亚洲色欧美| 强奸乱伦免费网站| 国产三级中文有码在线视频| 国产一级片| 美女诱惑1区2区| 欧美视频第二页| 91模特在线观看| 好爽视频在线观看| 啪啪视频亚洲第一| 120分钟婬片免费看| 第四色色综合91| 欧美论理片| 啊啊啊啊无码| 黄色电影在线播放综合网站| 无码人妻丰满热妇又大又粗| 亚洲情色第一页| 国产情色第一第二页在线观看| 欧美综合网在线| 亚洲图片激情综合另类| 中文字幕一区二区三区视频播放| 国产嫩草精品A88AV在线| 女同性恋一区二区三区精品视频| 久操频道免费在线呗看| 乱伦图av| 亚洲s色图| 操www| 久久一区,青青青青草视频在线播放| q2午夜理论片夜色av| 78超碰| 99九九久久| 亚洲av资源| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 视频国产成人精品日本亚洲18 | 99精品视频在线观看| 在线播放欧洲免费av| 九九久久一区二区伦理| juliaann丝袜大战黑鬼| 精品亚洲一区在线观看| 91丝袜美女| 一区二区三| 欧美激情总合网| 97超碰日韩| 欧美 传媒 麻豆 日韩 偷拍| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 91女日逼| 天美传媒一二三区永久网站| avav青青草久久夜| 麻豆亚洲Av成人无码一区精品| 欧美日韩国产成人高清| 91九九九小逼| 一区三区啪啪| 蜜臀久久99精品久久久久久无删减 | 自拍六区| 欧美 牲| 制服诱惑亚洲一区二区三区在线观看| 搡老女人老妇女AAA一VU麻豆| 亚洲欧美91√| 天天综合亚在线| 女人 A一级| 色与欲影视| 久久偷拍人| 国产欧美一区激情交| 亚洲色婷婷久久91| 色天堂在线观看| 日韩美脚一区二区网站| 亚洲最大的综合性av| 九九精品网| 午夜后入| 伊人久久亚洲中文字幕| 九色精品视频导航1| 九九九九精品九九九九| 91狠狠狠| 夜夜免费视频| 中文字幕av久久爽Av| 麻豆天美久久91| www超碰| 午夜理论片在线观看免费| 国产精品人妻无码久久久老鸭窝| 国产成人啪一区二区| 激情99| 人妻少妇精品久久久| 欧美精品第四五页中文字幕在线观看| 久久性视频| 超碰在线国产| 成人三级片无码| 日逼视频日本| 欧美性爱日韩性爱| 久操凹凸视频| 国产精品自拍欧美在线| 少妇人妻好深太紧了vr91| www.99中文字幕| 激情黄色片在线观看| 日韩强奸av| 欧美人妻精品一区二区| 日本成人电影资源网| 亚洲精品一区二区日本| 欧美性爱1080p| 精品国产一级久久| 日本色色色| 日本三级小说中文字幕| 麻豆国产第一| 97爱亚洲| 日韩精品资源专区二区| 操日韩第| 婷婷色综合| 色噜噜人妻丝袜a∨先锋影| 91人妻超碰| 欧美 亚洲 综合 制服 另类| 好爽要喷了| 老司机午夜精品视频| 亚洲电影中字一区二区| 欧美国产日韩高清在线| 啊啊啊啊啊操我视频| 精品无码产区一区二| 婷婷人妻激情| 久久春色| 97色婷婷| 国产精品第一页国产大屁股视频免费区i| 欧美第一页| 欧美黄业| 91视频国品一二三区| 9久9久| 国产精品第一区第一页| 天天干天天干天天干| 欧美大干日韩| 国产一区在线观看无码AV| 午夜呻吟欧美| 精品少妇一区二区三区| 国产亚洲性生活视频播放| 欧美精品999| 亚洲校园激情| 日本色色色视频| 91男人天堂网| 麻花传媒免费网站在线观看| 少妇人妻无码| 超碰人人操97碰| 伊人久久大香蕉线AV五月天| 亚洲国产成人精品久久久国产成人一区二区| 九九人人操| 97啪啪| 91最新综合| 麻豆国产97在线| 69人妻精品丰满熟女区| 午夜视频久久久久一区| surenchaopeng| 一线黄色免费性爱片| 国产后入清纯| 激情综合五月婷婷| www.亚洲成人一区| 激情黄色五月天| 国产精品成人无码av| 欧美性91| 啊啊啊不要嗯嗯在线观看| 天天爽天天爽| 日本一区二区三区四区五区六区七区八区九区| 加勒比大香蕉视频在线| 大香蕉欧美| 精品超碰中文在线| 人人摸人人添人人操 | 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 亚洲欧洲综合av在线| 国产精品久久久久久久久久久久久久久久 | 久操电影| 欧美日韩人妻少妇 一区二区三区| 色五月激情综合网| 国产一在线观看| 大香蕉99999| 欧美精品欧美精品系列| 中文字幕在线观看AV| 色情综合| 国产中文字幕曰本毛片| dy888午夜老子影视达达兔| 色女免费在线观看视频网址| 五月丁香激情综合| 伊人久久综合影院| 2024黄色视频| 午夜福利 成人 91| 免费超碰97久久| 顶级少妇BT天堂| 日韩精品区二区三区不卡| www.久久久久| 日本熟妇一区二区三区| 欧美日韩99| 久久久久久久国产视频| 日韩无码黄色片| 亚洲乱码国产乱码精网站| xxxx网站亚洲精品| 国产精品人人爽人人做可爱福利| 久久久精| 欧美激情内射| 日韩欧美日韩| 超碰2017| 国产偷人伦激情在线观看| 成人免费看吃奶视频网站| 精品国产无码中文| 亚洲欧美日韩制服另类| 日日夜夜免费| 三级色综合| 91小视频| 91国产美女丝袜足交精品视频| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 五月综合婷婷久久网站| 中文字幕精品一区欧美| 人人干人人操人人..com| 成人短视频在线观看| 人妻少妇久久久| 久啪| 嗯嗯啊啊操我| 岛国免费黄色网址| 精品视频久久久久九九九九9999| 日日日啊啊啊| 久热网| 欧美A片中文字幕| 久久久久婷婷| 日韩天天本| 亚洲国产97| 欧美网站免费| 激情婷婷丁香网| 乱伦一二三| 欧美亚洲首页| av天堂加勒比| 久欲AV| 国产1024在线播放| 久久人人爽人人爽人人片Ⅴ| 97免费视频在线观看视频| 国产女同在线观看视频| 青青草日逼视频| 加勒比伊人| 欧美三级免费伊人| 欧美一二三级精品在线| 玖玖爱综合| 国产亚洲精品美女久久久| 亚洲蜜臀懂色| 国产三级多多影院2022国产AA一级毛片无码 | 激情五月丁香五月| 91性情| 伊人青青一区成人视频在线观看区| 蜜臀久久99精品久久久久久无删减 | 噜噜在线| 91殴美| 超碰超碰欧美| 中文字幕五月婷婷免费| 欧美97视频| 国产无马av| 啪啪综合网| 一区 欧美 日韩 麻豆| 日韩欧美tv一区二区在线观看| 国产第二页| 日日爽夜夜爽| 亚洲日韩在线a不卡99精品| 久久曰曰| 欧美 亚洲 偷拍自拍| 欧美丝袜中文字幕07在线| 神马视频久久久久久| 中文字幕国产| 九草九九九| 欧美乱色| 日本中文熟女视频| 色网1| 啊啊啊操一区| 日韩簧片免费看| 大香交| 欧亚乱色熟一区二区三四区| 国产隔壁老王影院在线| 蜜臀va69| 成人精品在线| 激情五月综合开心五月| 91亚洲狠狠色| 青娱乐导航AV| 欧美劲爆视频一区二区| 性色亚洲| 91劲爆| 操香逼| 自怕偷自怕亚洲精品| 欧美日韩色| 天堂伊人久久| 日本在线一二| 国产小黄片在线免费观看 | 色老牛| 九九九综合精品| 九九色图| 欧美一区二区三区互相| 狠狠躁伊人中文字幕| 亚洲 欧美 小说| 女人爽到高潮久久久| 激情干在线| 成人毛片免费| 国产精品一区二区密臀| 亚洲91大片| 91 丝袜在线| 伊人亚洲国产一成人久久精品,久久| 在线岛| 爱爱啊啊啊| 男人的天堂视频精品乱在线| 爽爽淫人网| 精品超碰国产| 377p欧洲日本亚洲大胆| 日本女人久久久| 超碰在线观看av不卡| 久操免费在线| 欧美日日人人天天| 淫乱图区 | 超碰资源亚洲97| 99久在线精品99re8热| 亚洲自拍天堂| 男女日B国产| 国产91影院| 96精品久久| 欧美激情精品| 国产精品农村妇女| 久久机热| 夜夜夜夜爽| 97爱啪| 小骚逼被操的爽不爽| 今日头条成人一区二区三区四虎精品| 偷拍 亚洲| 久操操| 色色操| 久操com| 国产精品网址| 国产亚洲精品无码三区| 日韩兔费看黄片| 天天综合-91入口| 亚洲 欧美 色图| 蜜臀99久久精品久久久久久| 九色 蝌蚪 熟女自| 天天天操天天天爱| 少妇色综合| 亚洲人码13| 一区二区不卡免费| 欧美成人一区二区| 99re热| 熟妇一区,二区,三区。| 亚洲日本天堂| 亚洲男人天堂视频| 国产丁香精品露脸视频| 日韩国产九九精品一区二区三区毛片| 中文字幕二区| 欧美激情 一区| 欧美人妻精品一区二区| 亚洲一区二区三区播放在线| 91精品亚洲内射孕妇| 亚洲囯产精品女人久久久| 久久91视频| 蜜乳AV一区| 日本中文字幕在线电影| 五月天激情网站| 日韩另类色图| 欧洲乱码一区二区| 日欧毛片久久| 人妻五十路在线| 超碰 欧美| 九九九网站| 高潮精品| 日韩中文字幕精品一区在线| 404操逼福利视频| 久久九九国产精品| 床上啊啊啊一区二区三区| 国产精品久久发布| 91久久午夜无码鲁丝片久久人妻| 日韩精品怡红院| 久久国产精品视频| 99热销国产这里有精品| 91激情| 综合久久久久久久综合网| 在线岛| www.zbzhongsen.com| 亚洲国产精品久久久久婷婷青年| 中文字幕片| 欧美亚洲se91| 91精品导航| 国产精品爱欲| 激情久久av一区av二区av| 久久久久久夜夜夜夜夜| 精品人妻一区二区三区夜夜|