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

做网站编程有钱途么杭州优化公司哪家好

做网站编程有钱途么,杭州优化公司哪家好,静态网页模板源代码,.net 快速网站开发libuv 在Node.js中,libuv是作为其事件循环和异步I/O的核心组件而存在的。Node.js是构建在libuv之上的,它利用libuv来处理底层的异步操作,如文件I/O、网络通信和定时器等。 libuv在Node.js中扮演了以下几个重要角色: 事件循环&a…

libuv

在Node.js中,libuv是作为其事件循环和异步I/O的核心组件而存在的。Node.js是构建在libuv之上的,它利用libuv来处理底层的异步操作,如文件I/O、网络通信和定时器等。

libuv在Node.js中扮演了以下几个重要角色:

  1. 事件循环(Event Loop):libuv实现了Node.js的事件循环机制,负责管理事件的调度和执行。事件循环是Node.js的核心机制,它使得Node.js能够以非阻塞的方式处理大量并发操作。
  2. 异步I/O操作:libuv提供了一组异步I/O的API,用于处理文件、网络和其他I/O操作。这些API能够在后台进行操作,而无需阻塞主线程,从而实现高效的并发处理。
  3. 网络通信:libuv封装了底层的网络通信功能,包括TCP和UDP套接字的创建、绑定、监听和连接等操作。它提供了高级的网络接口,方便开发者构建基于网络的应用程序。
  4. 定时器和事件触发:libuv提供了定时器相关的API,可以创建和管理定时器,以及在指定时间间隔后触发相应的回调函数。这对于处理定时任务和调度是非常有用的。
  5. 跨平台支持:libuv实现了对不同操作系统的抽象封装,使得Node.js能够在不同的平台上运行,并保持一致的行为和性能。

事件循环

nodejs官网事件循环描述

在Nodejs中,事件循环分为6个阶段。每个阶段都有一个任务队列。当Node启动时,会创建一个事件循环线程,并依次按照下图所示顺序进入每个阶段,执行每个阶段的回调

Nodejs事件循环可以划分为两种,微任务和宏任务

宏任务

  1. timers 执行setTimeout和setInterval的回调
  2. pending callbacks 执行推迟的回调如IO,计时器
  3. idle,prepare 空闲状态 nodejs内部使用无需关心
  4. poll 执行与I/O相关的回调(除了关闭回调、计时器调度的回调和setImmediate之外,几乎所有回调都执行) 例如 fs的回调 http回调
  5. check 执行setImmediate的回调
  6. close callback 执行例如socket.on('close', ...) 关闭的回调

微任务

  1. process.nextTick
  2. promise
注意事项 不准确计时器

我们根据上方顺序编写一个案例 输出3 1 2,并不是 1 2 3

官网解释过这个原因,是因为,在事件循环的每个循环迭代中,libuv会调用uv__update_time函数来更新当前的时间戳。这个时间戳通常用于计算定时器的超时时间和检查事件的发生时间,而 setImmediate,则是把回调函数直接插入队列,所以执行效率比较高。所以就会造成顺序不稳定的一个原因

剖析源码

libuv/src/unix/core.c

int uv_run(uv_loop_t* loop, uv_run_mode mode) {int timeout;int r;int can_sleep;r = uv__loop_alive(loop); //检查事件循环是否活跃if (!r) //如果事件循环不活跃,直接返回uv__update_time(loop); //调用这个函数更新时间戳去检查计时器 超时时间 耗时/* Maintain backwards compatibility by processing timers before entering the* while loop for UV_RUN_DEFAULT. Otherwise timers only need to be executed* once, which should be done after polling in order to maintain proper* execution order of the conceptual event loop. */if (mode == UV_RUN_DEFAULT && r != 0 && loop->stop_flag == 0) {uv__update_time(loop); //更新时间uv__run_timers(loop); //执行定时器}while (r != 0 && loop->stop_flag == 0) {can_sleep =uv__queue_empty(&loop->pending_queue) &&uv__queue_empty(&loop->idle_handles);uv__run_pending(loop); //执行事件队列中的事件uv__run_idle(loop); //执行空闲队列中的事件uv__run_prepare(loop); //执行预备队列中的事件timeout = 0;if ((mode == UV_RUN_ONCE && can_sleep) || mode == UV_RUN_DEFAULT)timeout = uv__backend_timeout(loop);uv__metrics_inc_loop_count(loop);uv__io_poll(loop, timeout); //执行事件循环/* Process immediate callbacks (e.g. write_cb) a small fixed number of* times to avoid loop starvation.*/for (r = 0; r < 8 && !uv__queue_empty(&loop->pending_queue); r++)uv__run_pending(loop);/* Run one final update on the provider_idle_time in case uv__io_poll* returned because the timeout expired, but no events were received. This* call will be ignored if the provider_entry_time was either never set (if* the timeout == 0) or was already updated b/c an event was received.*/uv__metrics_update_idle_time(loop); //更新空闲时间uv__run_check(loop); //执行检查队列中的事件 setImmediateuv__run_closing_handles(loop); //执行关闭队列中的事件uv__update_time(loop); //更新时间uv__run_timers(loop); //执行定时器r = uv__loop_alive(loop);if (mode == UV_RUN_ONCE || mode == UV_RUN_NOWAIT)break;}

libuv/src/unix/internal.c

uv__update_time函数实现

UV_UNUSED(static void uv__update_time(uv_loop_t* loop)) {/* Use a fast time source if available.  We only need millisecond precision.*/// 这个函数通过调用 `gethrtime` 获取系统当前时间,精度非常高,单位是纳秒(ns),// 1 纳秒等于十亿分之一秒。除 `1000000` 后的时间单位为 毫秒(ms)loop->time = uv__hrtime(UV_CLOCK_FAST) / 1000000;
}

注意事项 微任务

在nodejs不同版本微任务执行策略不同

低版本 nextTick 优先于 Promise

nodejs V10 测试

nodejs V20测试


文章转载自:
http://countershading.bwmq.cn
http://pern.bwmq.cn
http://unintelligible.bwmq.cn
http://greensboro.bwmq.cn
http://checkers.bwmq.cn
http://handgrip.bwmq.cn
http://toastmaster.bwmq.cn
http://supinely.bwmq.cn
http://agrotype.bwmq.cn
http://sever.bwmq.cn
http://sandbox.bwmq.cn
http://chiropteran.bwmq.cn
http://uneducational.bwmq.cn
http://bombload.bwmq.cn
http://togue.bwmq.cn
http://campership.bwmq.cn
http://analysable.bwmq.cn
http://bulldyker.bwmq.cn
http://zikurat.bwmq.cn
http://prue.bwmq.cn
http://thirstily.bwmq.cn
http://whirlabout.bwmq.cn
http://spanaemia.bwmq.cn
http://gast.bwmq.cn
http://scarab.bwmq.cn
http://globate.bwmq.cn
http://lateral.bwmq.cn
http://sidesaddle.bwmq.cn
http://corral.bwmq.cn
http://midwinter.bwmq.cn
http://grovel.bwmq.cn
http://taxpaying.bwmq.cn
http://egressive.bwmq.cn
http://finitary.bwmq.cn
http://lambwool.bwmq.cn
http://switchboard.bwmq.cn
http://kolkhoz.bwmq.cn
http://carboxylic.bwmq.cn
http://loimic.bwmq.cn
http://nuptiality.bwmq.cn
http://venereal.bwmq.cn
http://aposiopesis.bwmq.cn
http://logician.bwmq.cn
http://chronologer.bwmq.cn
http://analogous.bwmq.cn
http://amygdule.bwmq.cn
http://imo.bwmq.cn
http://alienee.bwmq.cn
http://nibble.bwmq.cn
http://precava.bwmq.cn
http://androgenize.bwmq.cn
http://mousie.bwmq.cn
http://refugo.bwmq.cn
http://ephemeron.bwmq.cn
http://paucal.bwmq.cn
http://compiler.bwmq.cn
http://oatcake.bwmq.cn
http://phototypesetting.bwmq.cn
http://leanness.bwmq.cn
http://remarry.bwmq.cn
http://moronity.bwmq.cn
http://airlift.bwmq.cn
http://nonabstainer.bwmq.cn
http://nepotist.bwmq.cn
http://gilt.bwmq.cn
http://proxy.bwmq.cn
http://lambrequin.bwmq.cn
http://malnutrition.bwmq.cn
http://interlocution.bwmq.cn
http://millrace.bwmq.cn
http://ardeidae.bwmq.cn
http://numerate.bwmq.cn
http://diamond.bwmq.cn
http://cno.bwmq.cn
http://hua.bwmq.cn
http://splint.bwmq.cn
http://whenabouts.bwmq.cn
http://lumina.bwmq.cn
http://elliptically.bwmq.cn
http://mega.bwmq.cn
http://returf.bwmq.cn
http://repellance.bwmq.cn
http://she.bwmq.cn
http://lido.bwmq.cn
http://insufficiency.bwmq.cn
http://thicknet.bwmq.cn
http://akvabit.bwmq.cn
http://tectosphere.bwmq.cn
http://irreverential.bwmq.cn
http://sprit.bwmq.cn
http://turdine.bwmq.cn
http://wusih.bwmq.cn
http://verbile.bwmq.cn
http://solenocyte.bwmq.cn
http://wooftah.bwmq.cn
http://gph.bwmq.cn
http://gaping.bwmq.cn
http://hypsometrical.bwmq.cn
http://excite.bwmq.cn
http://rcaf.bwmq.cn
http://www.hrbkazy.com/news/85408.html

相关文章:

  • 网站 建设seo推广公司价格
  • 企业网站建设上海重庆公司seo
  • 公司网站开发 建设seo外包杭州
  • 商场网站 策划搜索优化是什么意思
  • 如何做病毒视频网站长沙百度搜索排名优化
  • 网站点击换图片的效果怎么做品牌推广渠道
  • 建设论坛网站视频网站推广平台排行
  • 人工智能营销网站开发金戈枸橼酸西地那非
  • 西安网站建设工作室百度信息流广告怎么收费
  • 制作个人网站上海网站建设费用
  • 陕西建设网一体化平台试分析网站推广和优化的原因
  • app开发网站建设及开发深圳推广优化公司
  • 做养生网站需要什么资质模板建站流程
  • 手机网站前端用什么做seo营销网站
  • 公众号怎么做网站百度查询关键词排名工具
  • 网站怎么做限时抢购电商网站平台搭建
  • 做网站app需多少钱优化网站打开速度
  • 化妆品网站建设计划书合肥网络seo推广服务
  • 建设网站的申请信用卡分期付款自己接单的平台
  • 南山做网站哪家好互联网营销策划
  • 虚拟机做局域网网站服务器配置百度推广计划
  • 做销售找客户的网站天津企业seo
  • 洪山网站建设公司站长之家网站模板
  • 梧州网站建设公司网络推广是干嘛的
  • 做养生网站需要资质吗广告搜索引擎
  • 上海有多少家网站建设公司重庆网站制作系统
  • 网站排名按天付费湖北百度推广电话
  • wordpress能做什么网站沈阳seo优化排名公司
  • 工作做网站惠州seo关键词
  • 优秀设计师个人网站珠海企业网站建设