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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux cpu亲和力

發布時間:2023/12/20 linux 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux cpu亲和力 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在對項目進行性能優化,由于在多核平臺上,所以了解了些進程、線程綁定cpu核的問題,在這里將所學記錄一下。

不管是線程還是進程,都是通過設置親和性(affinity)來達到目的。對于[進程]的情況,一般是使用sched_setaffinity這個函數來實現,網上講的也比較多,這里主要講一下[線程]的情況。

與[進程]的情況相似,[線程]親和性的設置和獲取主要通過下面兩個函數來實現:

int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize,const cpu_set_t *cpuset); int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize, cpu_set_t *cpuset);

從函數名以及參數名都很明了,唯一需要點解釋下的可能就是cpu_set_t這個結構體了。這個結構體的理解類似于select中的fd_set, 可以理解為cpu集,也是通過約定好的宏來進行清除、設置以及判斷:

void CPU_ZERO (cpu_set_t *set); //初始化,設為空 void CPU_SET (int cpu, cpu_set_t *set); //將某個cpu加入cpu集中 void CPU_CLR (int cpu, cpu_set_t *set); //將某個cpu從cpu集中移出 int CPU_ISSET (int cpu, const cpu_set_t *set); //判斷某個cpu是否已在cpu集中設置了

cpu集可以認為是一個掩碼,每個設置的位都對應一個可以合法調度的 cpu,而未設置的位則對應一個不可調度的 CPU。換而言之,線程都被綁定了,只能在那些對應位被設置了的處理器上運行。通常,掩碼中的所有位都被置位了,也就是可以在所有的cpu中調度。

以下為測試代碼:

#define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <pthread.h> #include <sched.h>void *myfun(void *arg) {cpu_set_t mask;cpu_set_t get;char buf[256];int i;int j;int num = sysconf(_SC_NPROCESSORS_CONF);printf("system has %d processor(s)\n", num);for (i = 0; i < num; i++) {CPU_ZERO(&mask);CPU_SET(i, &mask);if (pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) < 0) {fprintf(stderr, "set thread affinity failed\n");}CPU_ZERO(&get);if (pthread_getaffinity_np(pthread_self(), sizeof(get), &get) < 0) {fprintf(stderr, "get thread affinity failed\n");}for (j = 0; j < num; j++) {if (CPU_ISSET(j, &get)) {printf("thread %d is running in processor %d\n", (int)pthread_self(), j);}}j = 0;while (j++ < 100000000) {memset(buf, 0, sizeof(buf));}}pthread_exit(NULL); }int main(int argc, char *argv[]) {pthread_t tid;if (pthread_create(&tid, NULL, (void *)myfun, NULL) != 0) {fprintf(stderr, "thread create failed\n");return -1;}pthread_join(tid, NULL);return 0; }

這段代碼將使myfun線程在所有cpu中,依次執行一段時間,在我的四核cpu上,執行結果為 ?:

system has 4 processor(s) thread 1095604544 is running in processor 0 thread 1095604544 is running in processor 1 thread 1095604544 is running in processor 2 thread 1095604544 is running in processor 3

在一些嵌入式設備中,運行的進程線程比較單一,如果指定進程線程運行于特定的cpu核,減少進程、線程的核間切換,有可能可以獲得更高的性能。

? 回復「?籃球的大肚子」進入技術群聊

回復「1024」獲取1000G學習資料

總結

以上是生活随笔為你收集整理的Linux cpu亲和力的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 精品乱码一区二区三区四区 | 日本一级淫片色费放 | 日韩最新视频 | 成人一区av | 欧美1234区 | 超黄网站在线观看 | 日韩一级不卡 | 亚洲国产网址 | 毛片全黄 | 91福利专区 | 亚洲欧美一区二区三区在线 | 日韩av二区| 亚洲精品一区二区三区中文字幕 | 久久久久久亚洲精品中文字幕 | 亚洲最大综合网 | 天天射寡妇 | 在线观看中文字幕码 | 亚洲一区二区影院 | 亚洲天堂性 | av中文字幕av | 欧美女同视频 | 乌克兰毛片 | 中文在线最新版天堂 | 亚洲av综合一区二区 | 青青草免费av | 色美av| av色网站 | 欧美日韩国产精品成人 | 亚洲国产成人精品一区二区三区 | 青娱乐青青草 | 国产乱码一区二区 | 一区二区国产电影 | 人人爱爱| 97se视频| 奇米影视一区二区三区 | 午夜视频福利在线观看 | 一区二区欧美在线观看 | 99视频这里有精品 | 国产欧美日韩专区 | 久久伊人av | 性av免费| julia一区二区三区在线观看 | 青青在线视频观看 | 亚洲v天堂 | 中文字幕精品视频 | 一本色道久久88亚洲精品综合 | 美女隐私免费看 | 超碰在线98 | 久青草资源福利视频 | 特黄色一级片 | 91精品系列| 日韩色综合| 啊灬啊灬啊灬秀婷 | 日韩熟妇一区二区三区 | 国产高清第一页 | 麻豆网页| 久久亚洲精选 | 久久三| 美国一级特黄 | 六月婷婷在线 | 看a网站 | 超碰人人超碰 | 欧美日韩色图片 | 午夜av免费观看 | 国产又粗又黄的视频 | 免费亚洲视频 | 国产一卡二卡在线播放 | free国产hd露脸性开放 | 精品无码av一区二区三区 | 成人免费无码大片a毛片抽搐色欲 | 欧美性猛交ⅹxxx乱大交3 | 日韩国产欧美一区二区三区 | 欧美日韩另类视频 | 国产色片 | 在线播放中文字幕 | 国产午夜伦鲁鲁 | 久久成人a毛片免费观看网站 | 欧美多人猛交狂配 | 国产精品亚洲精品 | yy色综合| 日韩激情网址 | 日韩影视一区二区三区 | 精品99在线观看 | 四季av一区二区凹凸精品 | 永久视频在线观看 | 色窝窝综合色窝窝久久 | 91三级视频| 中文字幕.com | 久久泄欲网 | 色香蕉网站| 嫩草午夜少妇在线影视 | 欧洲美熟女乱又伦 | 91呦呦 | 亚洲情在线| www.爱操 | 污污污污污污www网站免费 | 制服丝袜天堂 | 亚洲干干干 | 亚洲天堂伦理 |