温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

linux中的协程是什么

发布时间:2020-06-29 16:14:17 来源:亿速云 阅读:237 作者:元一 栏目:建站服务器

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