创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!
为安岳等地区用户提供了全套网页设计制作服务,及安岳网站建设行业解决方案。主营业务为成都网站设计、成都网站制作、安岳网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!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
{
...
}
}
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联-成都网站建设公司行业资讯频道,感谢您对创新互联的支持。