当前位置: 首页 > news >正文

微网站 无锡seo常用的工具

微网站 无锡,seo常用的工具,佛山手机网站建设公司,常州哪些网站公司做的好【并发编程二十】协程(coroutine)一、线程的缺点二、协程三、优点四、个人理解五、协程库1、window系统2、unix系统(包括linux的各个版本)2.1、makecontext2.2、swapcontext2.3、setcontext3、第三方库3.1、Boost.Coroutine23.2、…

【并发编程二十】协程(coroutine)

  • 一、线程的缺点
  • 二、协程
  • 三、优点
  • 四、个人理解
  • 五、协程库
    • 1、window系统
    • 2、unix系统(包括linux的各个版本)
      • 2.1、makecontext
      • 2.2、swapcontext
      • 2.3、setcontext
    • 3、第三方库
      • 3.1、Boost.Coroutine2
      • 3.2、Boost.Context
      • 3.3、libco
      • 3.4、libgo
      • 3.5、libaco
    • 4、c++20

简介,
本文主要讲解协程的概念和对应的协程库。

一、线程的缺点

  • 首先:线程分为用户线程和内核线程。(用户线程处于用户空间,内核线程处于内核空间)
  • 其次:用户线程和内核线程可以是一对多或者一对一的关系。
  • 再次:多线程编程时如果线程过多,会导致上下面的频繁切换,会有性能损耗。

二、协程

  • 协程,可以被认为是在应用层模拟的线程。协程避免了线程上下面切换的部分额外损耗,同时具有并发运行的优点(本质上是串行执行),降低了编写并发程序的复杂度。
  • 协程的概念早于线程提出,但它是非抢占式的调度,无法实现公平的任务调用,也无法直接利用多核cpu的优势。
  • 操作系统的原生api并不支持协程。(但是我们可以利用操作系统提供的其他api达到协程类似的效果,比如Windows下的芊程,实现用户协程的效果)。
  • 新生的一些高级语言,如golang都是在语言的运行环境中利用线程技术模拟了一套协程。

三、优点

  • 对于线程,其切换是由操作系统根据其系统内核中的调度器,抢占式地进行的,不能很好地保证线程间的先后顺序;

  • 协程可以理解为一种用户态的轻量级线程,切换由用户定义,各任务之间可以控制执行、暂停、恢复函数,来达到多任务协作的目的;

  • 协程上下文切换速度快, 不会陷入内核态;

  • 协程具有极高的执行效率,由于子程序切换不是线程切换,是由程序自身控制,故协程没有线程切换的开销

  • 访问共享资源不需要使用多线程的锁机制和变量冲突,由于只有一个线程;

  • 以同步代码的方式写异步逻辑;

四、个人理解

再此说下个人对协程的理解(非官方)

  • 协程是语言级别的概念,线程是操作系统的概念。
  • 协程可以理解为一个可以挂起和恢复的函数。
  • 如果你这个可以挂起和恢复的函数推送到一个容器中,维护起来,就是协程池。
  • 你挂起了,线程就可以切换、执行其他的协程逻辑,等你的协程中调用了恢复,我再来执行你的恢复后的逻辑。

五、协程库

1、window系统

  • Fiber (芊程)
    windows下提供的实现协程的方式。
  • 参见我的上一篇博客【并发编程十九】芊程(fiber)

2、unix系统(包括linux的各个版本)

glibc是GNU发布的libc库

  • ucontext
    该库是在unix下提供的,使用是最安全可靠,但性能较差,大概200万次/秒-
  • 在<ucontext.h>中定义了两种数据类型:mcontext_t ,ucontext_t 以及四个函数:getcontext(), setcontext(), makecontext(3),swapcontext(3) 以实现用户级线程在其控制进程中进行上下文切换
typedef struct ucontext_t {struct ucontext_t *uc_link;sigset_t          uc_sigmask;stack_t           uc_stack;mcontext_t        uc_mcontext;...
} ucontext_t;

2.1、makecontext

相当于windows系统下的芊程的CreateFiber

  • 设置为入口函数的地址
void makecontext(ucontext_t *ucp, (void *func)(), int argc, ...); // https://pubs.opengroup.org/onlinepubs/7908799/xsh/makecontext.html
extern void makecontext (ucontext_t *__ucp, void (*__func) (void), int __argc, ...) __THROW; // from my pc

2.2、swapcontext

相当于windows系统下,芊程的SwitchToFiber

  • 协程切换
int swapcontext(ucontext_t *restrict oucp, const ucontext_t *restrict ucp)

2.3、setcontext

恢复到ucp 指向的用户上下文(即开始执行执行的上下文), 成功调用不会返回。上下文应该是通过调用 getcontext() 或 makecontext(3) 创建的

int setcontext(const ucontext_t *ucp);

参考
linux手册翻译——getcontext(2) setcontext(2):https://www.jianshu.com/p/54f5c9fb53cf
ucontext的简单介绍:https://www.shuzhiduo.com/A/QV5Z09AVzy/
使用 setcontext 类函数实现 mini 协程库https://blog.csdn.net/liushengxi_root/article/details/85142236

3、第三方库

3.1、Boost.Coroutine2

Boost库也发布了Boost.Coroutine2协程库,其中包含了stackless和stackful两种协程的封装。(boost.coroutine已经废弃),

3.2、Boost.Context

Boost.Context这现有工具来辅助栈空间和运行状态的管理,ucontext算是历史比较悠久的,通过ucontext_t结构体保存栈信息、CPU执行上下文、信号掩码以及resume所需要的下一个ucontext_t结构的地址,但是人家实测ucontext的性能要比Boost.Context慢的多,Boost.Context是今年来C++各大协程底层支撑库的主流,性能一直在被优化。

性能佳,推荐使用,切换性能可达到1.25亿次/秒.(该说法未验证)

参考链接:
Boost.Context库简介及Boost.Coroutine协程使用方式https://juejin.cn/post/6844903790831730702

3.3、libco

  • 官网mirrors / Tencent / libco
  • 腾讯开源的一套c/c++版本的协程库。
  • libco是微信后台大规模使用的c/c++协程库,2013年至今稳定运行在微信后台的数万台机器上。
  • libco通过仅有的几个函数接口 co_create/co_resume/co_yield 再配合 co_poll,可以支持同步或者异步的写法,如线程库一样轻松。同时库里面提供了socket族函数的hook,使得后台逻辑服务几乎不用修改逻辑代码就可以完成异步化改造。

3.4、libgo

  • 官网:yyzybb537/libgo
    libgo-- a coroutine library and a parallel Programming Library
    Libgo is a stackful coroutine library for collaborative scheduling written in C++ 11, and it is also a powerful and easy-to-use parallel programming library.

Three platforms are currently supported:
Linux
MacOSX
Windows (Win7 or above,x86 or x64,complie with VS2015/2017)

3.5、libaco

  • 官网:https://github.com/hnes/libaco
  • libaco - A blazing fast and lightweight C asymmetric coroutine library.
  • 轻量级 C 非对称协程库

中文解释:https://www.codingdict.com/os/software/48326

4、c++20

协程已经进入了c++20的标准,我们可以使用c++20的标准来实现协程了。具体使用我们下一篇文章介绍。
【并发编程二十一】c++20协程

参考:
1、《c++服务器开发精髓》张远龙 著
2、Linux【协程】 | 常见协程库简介https://blog.csdn.net/weixin_45926547/article/details/123482246
3、C/C++ 协程库boost.coroutine2、魅族libgo、腾讯libco、开源libaco详解https://blog.csdn.net/qq_23350817/article/details/116447916
4、什么是协程?https://blog.csdn.net/ThinPikachu/article/details/121325198

http://www.yayakq.cn/news/639141/

相关文章:

  • 网站建设的具体奖罚措施wordpress密码hello
  • 营销网站搭建如何确认wordpress使用什么主题
  • 内力网站建设广州制作外贸网站
  • 网站黑链代码redis 在网站开发中怎么用
  • 哪个网站可以做竖屏广州最新消息
  • 怎么做自己的品牌网站兼职做ppt是哪个网站
  • 批量发布网站网站开发需求分析模板
  • 网站建设销售人员培训教程h5制作价格
  • 用html做班级网站动漫网站设计
  • 天津网站建设优化企业兰州市七里河建设局网站
  • 怎么面试一个网站开发的人企业客户信息管理系统
  • 网站设计摘要 优帮云个旧做网站哪家公司好
  • 平面设计的网站有哪些网站网站进入
  • 高端模板网站建设价格买卖链接网站
  • 网站单页面慧谷网站开发文档
  • 网站开发一般包括centos 6.5 wordpress
  • 超炫网站欣赏google推广有效果吗
  • 北京网站设计权威乐云践新广州培训+网站开发
  • 网站问卷调查怎么做wordpress系统是什么意思
  • 用asp做网站大概多久托管网站费用
  • 做门户网站用什么服务器自媒体平台账号注册
  • 郑州七彩网站建设公司 交通怎么做360网站
  • 网页制作题苏州网页优化软件
  • 后台网站开发文档甘肃谷歌seo
  • 网站建设教程免费设计网站都有什么作用是什么原因
  • 网站建设优化多少钱拼多多免费推广软件
  • 曲沃网站建设wordpress不同分类不同模板
  • 南昌网站建设企业什么是电子商务法
  • app 网站 优势梧州林业设计
  • 网站优化协议2024营业执照年审官网入口