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

莱州网站开发wordpress 导出export.php

莱州网站开发,wordpress 导出export.php,网站平台建设调研报告,域名升级系统自动更新C协程和线程的区别 线程是操作系统级别的资源#xff0c;由操作系统负责调度和切换#xff0c;每个线程都有自己的堆栈和执行上下文。线程之间的切换需要保存和恢复线程的执行上下文#xff0c;这个过程有一定的开销。协程是用户态的轻量级线程#xff0c;协程的调度完全由…C协程和线程的区别 线程是操作系统级别的资源由操作系统负责调度和切换每个线程都有自己的堆栈和执行上下文。线程之间的切换需要保存和恢复线程的执行上下文这个过程有一定的开销。协程是用户态的轻量级线程协程的调度完全由用户控制一个线程可以拥有多个协程协程之间的切换不需要操作系统的干预因此开销更小。协程也有自己的堆栈和执行上下文但是协程的堆栈是动态分配的可以根据需要增长或缩小协程的执行上下文是保存在协程状态中的协程状态是分配在堆上的内部对象。线程是同步机制即线程在执行过程中如果遇到阻塞比如IO操作就会让出CPU等待阻塞结束后再继续执行。这样会导致线程的资源浪费和调度开销的增加。线程之间如果要共享数据还需要使用锁机制来避免竞争和冲突这也会增加复杂度和开销。协程是异步机制即协程在执行过程中可以主动挂起让出CPU然后在适当的时候再恢复执行。这样可以避免无意义的等待和切换提高CPU的利用率。协程之间如果要共享数据不需要使用锁机制只需要判断状态就可以了这也会降低复杂度和开销。 C协程的基本概念和用法 C协程是在C20标准中引入的一个新特性目的是为了简化异步编程的模式提高性能和效率。C协程的实现主要依赖于三个新的关键字co_await, co_yield, co_return以及一些新的类型和库函数。C协程是一种特殊的函数它的返回类型必须是一个有promise_type成员类型的类型比如std::future, std::generator, std::task等。这个promise_type类型是一个承诺对象它负责生成协程函数的返回对象提交协程的结果或异常以及控制协程的启动和终止行为。C协程可以使用co_await关键字来调用一个等待体对象根据其内部定义决定其操作是挂起还是继续以及挂起和恢复时的行为。等待体对象必须有await_ready, await_suspend, await_resume三个成员函数或者重载了operator co_await的类型。一般而言等待体对象可以表示一个异步操作比如网络IO文件读写定时器等。C协程可以使用co_yield关键字来挂起协程并且产生一个值这个值会保存在承诺对象中通过yield_value函数。在协程外部可以通过承诺对象得到这个值。这个机制可以用来实现生成器即按需产生值的函数。C协程可以使用co_return关键字来终止协程并且返回一个值这个值会保存在承诺对象中通过return_value函数。在协程外部可以通过承诺对象得到这个值。这个机制可以用来实现异步函数即返回一个未来值的函数。C协程的唯一标识是协程句柄它是一个std::coroutine_handle模板类的实例它可以用来恢复或销毁协程。协程句柄可以通过承诺对象的get_return_object函数或者from_promise静态函数得到。协程句柄还可以访问协程状态即保存协程的上下文和数据的对象。 以下是一个简单的C协程的例子实现了一个生成斐波那契数列的函数 #include iostream #include coroutine// 定义一个生成器类型用于返回协程函数的对象 templatetypename T struct generator {// 定义一个承诺类型用于控制协程的行为struct promise_type {// 保存协程产生的值T value;// 生成协程函数的返回对象generator get_return_object() {// 从承诺对象中获取协程句柄return generator{ std::coroutine_handlepromise_type::from_promise(*this) };}// 表示协程启动后不立即挂起std::suspend_never initial_suspend() {return {};}// 表示协程终止后不再恢复std::suspend_never final_suspend() noexcept {return {};}// 处理协程的返回值void return_void() {}// 处理协程的异常void unhandled_exception() {std::terminate();}// 保存协程的产生的值std::suspend_always yield_value(T val) {value val;return {};}};// 保存协程句柄std::coroutine_handlepromise_type handle;// 构造函数从协程句柄初始化explicit generator(std::coroutine_handlepromise_type h) : handle(h) {}// 析构函数销毁协程~generator() {if (handle) {handle.destroy();}}// 生成器不能被拷贝只能被移动generator(const generator) delete;generator operator(const generator) delete;generator(generator other) noexcept : handle(other.handle) {other.handle nullptr;}generator operator(generator other) noexcept {handle other.handle;other.handle nullptr;return *this;}// 返回协程产生的值T value() const {return handle.promise().value;}// 恢复协程的执行void resume() {handle.resume();}// 判断协程是否结束bool done() const {return handle.done();} };// 定义一个协程函数返回一个生成器对象用于生成斐波那契数列 generatorint fibonacci(int n) {int a 0, b 1;for (int i 0; i n; i) {co_yield a; // 挂起协程并产生一个值auto tmp a;a b;b tmp b;} }int main() {// 调用协程函数得到一个生成器对象auto gen fibonacci(10);// 循环访问生成器产生的值直到协程结束while (!gen.done()) {std::cout gen.value() ; // 输出协程产生的值gen.resume(); // 恢复协程的执行}std::cout std::endl;return 0; }输出结果 0 1 1 2 3 5 8 13 21 34 Cpp中的线程纤程和协程 - 知乎 (zhihu.com)  (73 封私信) 如何理解协程和线程以及它们之间的区别 - 知乎 (zhihu.com)
http://www.zqtcl.cn/news/981062/

相关文章:

  • 东莞企业网站制作推广运营多样化的网站建设公司
  • 深圳做网站那里好提交网址给百度
  • 泰州企业建站系统中企动力科技做什么的
  • 唐山公司网站建设 中企动力唐山宽带动态ip如何做网站访问
  • 个人商城网站怎么做电商网站及企业微信订烟
  • 温州市网站优化广告平面设计教程
  • 南通制作网站的有哪些公司吗sae 部署wordpress
  • 友情链接对网站的影响wordpress admin init
  • 渭南网站开发做网红用哪个网站
  • 湖北建设网站wordpress 翻页电子书
  • 网站设计命名规范厦门建站比较好的公司
  • 用vs2010做网站登入前端培训费用大概多少郑州
  • 网站建设后的效果评估杭州网站制作公司
  • 3网站建设公司影楼修图用什么软件
  • 手机网站的内容模块多用户商城开源左
  • 库尔勒网站建站宝盒合作
  • 五河网站建设哪家好wordpress获取文章作者
  • 怎么修改网站内容wordpress ajax接口
  • 绵阳市城乡建设和规划局网站重庆网站建设公司有哪些
  • 宿迁网站建设公司排名展厅设计企业
  • 做家具定制的设计网站开阿里巴巴网站建设流程
  • 站长统计软件广州免费核酸在哪里做
  • 做soho一定要做网站吗在百度网站备案查询上显示未备案是什么意思
  • 移动公司营销网站设计html旅游网站模板
  • 专业生产车间设计图纸网站ui设计师证
  • 如何建网站教程视频10种网络营销方法
  • 网站内链优化的角度wordpress缓存插件破解版
  • 南宁网站建设哪个好天津网站建设咨询
  • 网站开发常用中间件计算机语言python
  • 学习html5的网站软件系统开发怎样容易