十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
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
{
...
}
}
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。