libuv

『中高级前端面试』之终极知识点

若如初见. 提交于 2020-08-18 04:29:19
作者:陈大鱼头 github: KRISACHAN Chrome浏览器进程 在资源不足的设备上,将服务合并到浏览器进程中 浏览器主进程 负责浏览器界面显示 各个页面的管理,创建以及销毁 将渲染进程的结果绘制到用户界面上 网络资源管理 GPU进程 用于3D渲染绘制 网络进程 发起网络请求 插件进程 第三方插件处理,运行在沙箱中 渲染进程 页面渲染 脚本执行 事件处理 网络传输流程 生成HTTP请求消息 输入网址 浏览浏览器解析URL 生成HTTP请求信息 收到响应 状态码 含义 1xx 告知请求的处理进度和情况 2xx 成功 3xx 表示需要进一步操作 4xx 客户端错误 5xx 服务端错误 向DNS服务器查询Web服务器的IP地址 Socket库提供查询IP地址的功能 通过解析器向DNS服务器发出查询 全世界DNS服务器的大接力 寻找相应的DNS服务器并获取IP地址 通过缓存加快DNS服务器的响应 委托协议栈发送消息 协议栈通过TCP协议收发数据的操作。 创建套接字 浏览器,邮件等一般的应用程序收发数据时用TCP DNS查询等收发较短的控制数据时用UDP 连接服务器 浏览器调用Socket.connect 在TCP模块处创建表示连接控制信息的头部 通过TCP头部中的发送方和接收方端口号找到要连接的套接字 收发数据 浏览器调用Socket.write 将HTTP请求消息交给协议栈

网络开发库从libuv说到epoll

ぃ、小莉子 提交于 2020-08-17 04:12:44
引言   这篇博文可能有点水,主要将自己libuv的学习过程和理解. 简单谈方法. 有点杂. 那我们开始吧. 首先介绍 github . 这个工具特别好用. 代码托管. 如果不翻墙可能有点卡. 但是应该试试. 这里扯一点, github 对代码水平提高 太重要了.还有一个解决疑难问题的论坛 stackoverflow http://stackoverflow.com/. 真的屌的不行.   附赠    github 简易教程, 不用谢 http://www.nowcoder.com/courses/2   国内还有一个 逼格特别高的论坛, 哪天你nb了, 也可以上去装逼, 以其中一个帖子为例    知乎epoll讨论 http://www.zhihu.com/question/21516827 到这里关于 引言就结束了. 前言   现在我们开始说libuv, 这是个网络跨平台的库,是C库.比其它同类的网络库, 多了个高效编程.不需要考虑太多细节. 是node.js的底层. 自己学习了一两周,发现, 功能挺强大的.通用性好. 但总觉得有点恶心.后面有时间说. 总的而言很优秀,很好, 但不喜欢.   下面我来分享怎么学习libuv 首先 你要去 官网下载libuv 代码. libuv github 源码 https://github.com/libuv/libuv

一位工作10年的前端总结的10个忠告

别来无恙 提交于 2020-08-12 00:07:28
最近在知乎看到这样一个问题:“作为IT行业的过来人,你有什么话想对后辈说的?” 笔者作为一位工作10年的老前端,忍不住也答了一波,为前端的朋友们总结了10条“走心”建议,都是那些年我踩过的坑,希望能帮你少走一些弯路。 前端十年,从业人数激增面试竞争更为激烈,前几天一个朋友跟我说:“现在全网好像都在告诉我今年找工作很难,找工作快要崩溃了。”在疫情黑天鹅阴霾的笼罩下,让今年求职的人变得异常困难:xx企业缩招、xx公司裁员,俨然已成热搜常态。除此之外,大前端的发展无论从技术深度和广度也发生了陡峭的变化。 前端不再是页面仔、组件仔,而是指能够使用JavaScript和相关H5技术开发iOS、Android、AR、VR、IoT、PC、Server、WebApp、3D甚至Web AI的综合性技术人才。这十年笔者从百度、腾讯到放弃阿里的offer选择创业,见证了无数前端新新新新新新新新技术此起彼伏和老一代框架的销声匿迹,更亲身经历了一个程序员的不平凡的十年,对技术和生活有了更深刻的认知。 讲给前端圈年轻人的十点“走心”建议: 1、非科班出身的同学切记夯实计算机基础 2、避免天天使用各种cli搬砖,发布属于自己的CLI 3、X平台的小程序和生成小程序库,要深入理解背后原理 4、走出自己的安逸区,敢于去迈上更高的人生台阶 5、提升自己的技术能力,对框架的源码要深入阅读 6、要学C|C++

一位工作10年的前端总结的10个忠告

拟墨画扇 提交于 2020-07-28 07:58:58
最近在知乎看到这样一个问题:“作为IT行业的过来人,你有什么话想对后辈说的?” 笔者作为一位工作10年的老前端,忍不住也答了一波,为前端的朋友们总结了10条“走心”建议,都是那些年我踩过的坑,希望能帮你少走一些弯路。 前端十年,从业人数激增面试竞争更为激烈,前几天一个朋友跟我说:“现在全网好像都在告诉我今年找工作很难,找工作快要崩溃了。”在疫情黑天鹅阴霾的笼罩下,让今年求职的人变得异常困难:xx企业缩招、xx公司裁员,俨然已成热搜常态。除此之外,大前端的发展无论从技术深度和广度也发生了陡峭的变化。 前端不再是页面仔、组件仔,而是指能够使用JavaScript和相关H5技术开发iOS、Android、AR、VR、IoT、PC、Server、WebApp、3D甚至Web AI的综合性技术人才。这十年笔者从百度、腾讯到放弃阿里的offer选择创业,见证了无数前端新新新新新新新新技术此起彼伏和老一代框架的销声匿迹,更亲身经历了一个程序员的不平凡的十年,对技术和生活有了更深刻的认知。 讲给前端圈年轻人的十点“走心”建议: 1、非科班出身的同学切记夯实计算机基础 2、避免天天使用各种cli搬砖,发布属于自己的CLI 3、X平台的小程序和生成小程序库,要深入理解背后原理 4、走出自己的安逸区,敢于去迈上更高的人生台阶 5、提升自己的技术能力,对框架的源码要深入阅读 6、要学C|C++

nodejs多线程

好久不见. 提交于 2020-05-02 09:04:23
Nodejs一直以单线程异步IO著称,擅长IO密集型操作,不擅长CPU密集型操作。但是,新版的Nodejs,在不断弥补这方面的短板。 在 Node 10.5.0,官方给出了一个实验性质的模块 worker_threads 给 Node 提供了真正的多线程能力 在 Node.js 12.11.0,worker_threads 模块正式进入稳定版 至此,Nodejs算是了真正的多线程能力。进程是资源分配的最小单位,线程是CPU调度的最小单位。 1. Nodejs多线程种类 Node.js 中有三类线程 (child_process 和 cluster 的实现均为进程) 1. event loop的主线程 2. libuv的异步I/O线程池 3. worker_threads的线程 2. worker_threads的作用 worker_thread 相比进程的方案,他们与父线程公用一个进程 ID,可轻松与另一个线程共享内存(ArrayBuffer 或 SharedArrayBuffer),从而避免了额外的序列化和反序列化开销。 但是 Worker Threads 对于 I/O 密集型操作是没有太大的帮助的,因为异步的 I/O 操作比 worker 更有效率,Wokers 的主要作用是用于提升对于 CPU 密集型操作的性能。 3. worker_threads的线程 3.1

了解JavaScript的运行核心——事件循环(Event Loop)

一个人想着一个人 提交于 2020-04-29 15:21:49
前言 什么要学底层的事件循环Event Loop,不仅仅是因为这是一道面试的常考题。作为一个程序员,了解程序的运行机制是很重要的,这样可以帮助你去输出更优质的代码。前端是一个范围很广的领域,技术一直在更新迭代,掌握了底层的原理可以应对新的技术。 JS初始设计 JavaScript从诞生起就是单线程。原因大概是不想让浏览器变得太复杂,因为多线程需要共享资源、且有可能修改彼此的运行结果,对于一种网页脚本语言来说,这就太复杂了。后来就约定俗成,JavaScript为一种单线程语言。(虽然 HTML5 增加了 Web Work 可用来另开一个线程,但是该线程仍受主线程的控制,所以 JavaScript 的本质依然是单线程) 什么是Event Loop? Event Loop就是事件循环,是浏览器和NodeJS用来解决Javascript单线程运行带来的问题的一种运行机制。 针对于浏览器和NodeJS两种不同环境,Event Loop也有不同的实现: 浏览器的Event Loop是在html5的规范中明确定义 NodeJS的Event Loop是基于libuv实现的 libuv已经对Event Loop做出了实现,而HTML5规范中只是定义了浏览器中Event Loop的模型,具体的实现留给了浏览器厂商 因此浏览器和NodeJS的Event Loop是两种不同的概念。不过在搞清楚Event

前端知识体系-NodeJS相关】NodeJS基础知识全面总结

本秂侑毒 提交于 2020-04-26 13:54:33
NodeJS基础知识 1. Node的全局对象和全局变量 1.1 全局对象:所有模块都可以调用的 global:表示Node所在的全局环境,类似于浏览器的window对象。 process:该对象表示Node所处的当前进程,允许开发者与该进程互动。 console:指向Node内置的console模块,提供命令行环境中的标准输入、标准输出功能。 1.2 全局函数 定时器函数:共有4个,分别是setTimeout(), clearTimeout(), setInterval(), clearInterval(); require:用于加载模块; Buffer():用于操作二进制数据。 1.3 全局变量 __filename:指向当前运行的脚本文件名。 __dirname:指向当前运行的脚本所在的目录。 2. Node的三大特点 2.1 单线程 Node.js不为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户连接了,就触发一个内部事件,通过非阻塞I/O、事件驱动机制,让Node.js程序宏观上也是并行的。 2.2 非阻塞I/O 由于Node.js中采用了非阻塞型I/O机制,因此在执行了访问数据库的代码之后,将立即转而执行其后面的代码,把数据库返回结果的处理代码放在回调函数中,从而提高了程序的执行效率。 当某个I/O执行完毕时,将以事件的形式通知执行I/O操作的线程

Node要领

痴心易碎 提交于 2020-04-06 18:56:42
Node是什么 Node 是一个 JavaScript 运行平台。特征:异步和事件驱动机制,还有它的标准库。 Node 的动力源来自 V8 JavaScript 引擎,是由服务于 Google Chrome 的 Chromium 项目组开发的。 V8 负责 JavaScript 代码的解释和执行。用 c++ 绑定层可将 libuv 和 v8 结合起来。 node 包含 v8 特性: shipping,staged,in progress 三组。 npm 要求 Node 项目所在的目录下有一个 package.json 文件。创建 package.json 文件的最简单方法使用 npm 。 node 程序主要分: web应用程序 命令行工具 后台程序 桌面程序 web应用程序:提供单页应用的简单程序,rest微服务和全栈的 web 应用。 mkdir example-project cd example-project npm init -y 核心模块: node 的核心模块就相当于其他语言的标准库,它们是编写服务器端 JavaScript 所需的工具。 事件模块是一个处理事件的小型库, node 的大多数 api 都是以它为基础来做的。 node 有文件系统库, fs,path , tcp 客户端和服务端库 net , http 库,域名解析库 dns ,测试的断言库 assert

《ASP.NET Core 3框架揭秘》勘误[逐步完善中…]

百般思念 提交于 2020-04-06 02:58:20
第一次印刷 [上册] P6 最后1段 原文:KestrelServer是采用 libuv 创建的跨平台Web服务器。 改为:KestrelServer是一款跨平台Web服务器。 P21 第1段 原文:curl.exe or the Invoke-WebRequest 改为: curl或者Invoke-WebRequest P47 第1段 原文:可以发现它具有如下两个程序集的 应用 改为:可以发现它具有如下针对两个程序集的 引用 P64 第2段 原文:这个方法可以是一个单纯的 虚 方法 改为:这个方法可以是一个单纯的 抽象 方法 P67 第2个代码片段 原文:public class FoobarEngineFactory : EngineFactory 改为:public class FoobarEngineFactory : MvcEngineFactory P69 第2个代码片段 原文:.Register< ControllerActivator , SingletonControllerActivator>(); 改为:.Register< IControllerActivator , SingletonControllerActivator>(); P71 第1个代码片段 原文: public Foo(IBar bar, IBaz):this(bar) =>Baz =

node.js Internals: How can I find out where `process.binding('eval')` gets defined?

我们两清 提交于 2020-03-01 04:03:52
问题 How can I find out where in the C++ source code of node.js the JavaScript object gets defined which I can access through process.binding('eval') ? - I already found out that it's in /src/node_script.cc in this special case, but: How can I know where I can find that module just when I just take a look on the /src/ directory overview ? I don't want to step through all the files in /src/ in order to look for a module. Where can I find some deep going information about the internals of process