日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

skynet记录6:定时器

發布時間:2023/12/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 skynet记录6:定时器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

稍后填坑

?

kernel中,每一次時鐘中斷會trap到kernel code,這個時間間隔稱之為jiffies,每秒鐘發生的次數為HZ

如果是4核,分配到每個核就是HZ/4

cat /boot/config-`uname -r` | grep '^CONFIG_HZ=' 輸出:

CONFIG_HZ=250

cat /proc/interrupts | grep timer && sleep 1 && cat /proc/interrupts | grep timer 輸出:

? 0:???????? 16????????? 0????????? 0????????? 0?? IO-APIC?? 2-edge????? timer

LOC:?? 24690231?? 20180418?? 15869859?? 18248079?? Local timer interrupts

? 0:???????? 16????????? 0????????? 0????????? 0?? IO-APIC?? 2-edge????? timer

LOC:?? 24690269?? 20180590?? 15869980?? 18248114?? Local timer interrupts

上面休眠了1秒,這4個核的時鐘中斷次數加起來接近250(上面考慮printf略多)

?

skynet中timer數據結構:

struct timer {
?  struct link_list near[TIME_NEAR];???????????? // 256個等級list,一般kernel最關注256個jiffies時間之內的定時器
?  struct link_list t[4][TIME_LEVEL];    //?大于256jiffies的定時器放這里,見后面詳述
?  struct spinlock lock;
?  uint32_t time;            // 從系統啟動后經過的滴答數,即多少個1/100秒
?  uint32_t starttime;          // 系統啟動時間(絕對時間,單位為秒)
?  uint64_t current;          ? // 相對時間(相對于starttime)
?  uint64_t current_point;        // 絕對時間
};

上面的成員t:一共4個等級,64的n次方乘以256之內的放在t[n][TIME_LEVEL],單位0.01秒

64*64*64*64*256就是2^32

比如17000秒的定時器,大于64*256*0.01?小于64*256*0.01,所以放在t[1][TIME_LEVEL]隊列

?

轉載于:https://www.cnblogs.com/wjx0912/p/7604049.html

總結

以上是生活随笔為你收集整理的skynet记录6:定时器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。