中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux中的協程是什么

發布時間:2020-06-29 16:14:17 來源:億速云 閱讀:254 作者:元一 欄目:建站服務器

linux中的協程是什么?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

協程定義

協程是一種用戶態的輕量級線程,協程的調度完全由用戶控制。協程擁有自己的寄存器上下文和棧。協程調度切換時,將寄存器上下文和棧保存到其他地方,在切回來的時候,恢復先前保存的寄存器上下文和棧,直接操作棧則基本沒有內核切換的開銷,可以不加鎖的訪問全局變量,所以上下文的切換非常快。linux協程是一種輕量級的用戶態線程,操作系統對協程無感知。協程實現的是協作式調度(非搶占式調度),即協程切換由當前協程控制,主動讓出CPU。通常情況下,一個線程包含多個協程。

協程又稱為輕量級線程,每個協程都自帶了一個棧,可以認為一個協程就是一個函數和這個存放這個函數運行時數據的棧,這個棧非常小,一般只有幾十kb。

協程的特點

1、協程是一個并發運行的多任務系統,一般由一個操作系統線程驅動;

2、協程任務元數據資源占用比操作系統線程更低,且任務切換開銷小;

3、協程是任務間協作式調度,即某一任務主動放棄執行后進而調度另外一任務投入運行。

舉例:

while (1) {

    int nfds = epoll_wait(epoll_fd, events, curfds, -1);

    if (nfds == -1) {

        perror("epoll_wait");

        break;

    }


    for (i = 0;i < nfds;i ++) {

        int sockfd = listenfd(events[i].data.fd, sockfds);

        if (sockfd) {

            socklen_t len = sizeof(struct sockaddr_in);

            int clientfd = accept(sockfd, (struct sockaddr*)&remote, &len);


            pthread_t thread_id;

            pthread_create(&thread_id, NULL, client_cb, &clientfd);

        }

        else

        {

            ...

        }

}

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節
推薦閱讀:
  1. lua 協程
  2. GO協程

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永康市| 临武县| 辽宁省| 清丰县| 额济纳旗| 遂昌县| 西平县| 乐清市| 英超| 日土县| 芦溪县| 乌拉特中旗| 怀柔区| 都江堰市| 信宜市| 文山县| 邮箱| 邳州市| 石门县| 镶黄旗| 塘沽区| 建瓯市| 岳阳市| 绥滨县| 山东省| 南丹县| 武山县| 化德县| 达拉特旗| 榆中县| 云梦县| 贵阳市| 亚东县| 中卫市| 望谟县| 连州市| 孟村| 泰来县| 蓝山县| 明光市| 盐城市|