您好,登錄后才能下訂單哦!
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
{
...
}
}
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。