epoll

「网络IO套路」当时就靠它追到女友

最后都变了- 提交于 2020-11-16 08:26:45
今天分享的基本上一面试就会被问的网络IO,文中涉及的代码部分不太重要,重要的是对这概念的理解。在看文章之前大家也可通过下面的思维导图看看自己是否能回答出来。 大纲 1 阻塞与非阻塞--开胃菜 阻塞 我们知道在调用某个函数的时候无非就是两种情况,要么 马上返回 ,然后根据返回值进行接下来的业务处理。当在使用 阻塞IO 的时候,应用程序会被无情的 挂起 ,等待内核完成操作,因为此时的内核可能将CPU时间切换到了其他需要的进程中,在我们的应用程序看来感觉被卡主(阻塞)了。 阻塞IO 传统阻塞IO模型 传统阻塞IO模型 特点: 通过阻塞式IO获取输入的数据 其中每个连接都采用独立的线程完成数据输入,业务处理以及数据返回的操作 这种方案有什么问题? 首先当并发较大的时候,需要创建大量的线程来处理连接,需要占用大量的系统资源。 连接建立完成以后,如果当前线程没有数据可读,将会阻塞在read操作上造成线程资源的浪费 鉴于上面的两个问题,通常是解决方案是啥呢? 第一种是 采用IO复用的模型 ,所谓IO复用模型即多个连接共享一个阻塞对象,应用程序只会在一个阻塞对象上等待。当某个连接有新的数据处理,操作系统直接 通知 应用程序,线程从阻塞状态返回并开始业务处理 第二种方案即采用 线程池复用的方式 。将连接完成后的业务处理任务分配给线程,一个线程处理多个连接的业务

一线互联网公司Redis使用精髓,你必须要掌握这4点!

对着背影说爱祢 提交于 2020-11-13 06:52:28
先来看一下这些Redis面试题你会几道? 1、什么是 Redis?简述它的优缺点? 2、Redis 与 memcached 相比有哪些优势? 3、Redis 支持哪几种数据类型? 4、Redis 主要消耗什么物理资源? 5、Redis 有哪几种数据淘汰策略? 6、Redis 官方为什么不提供 Windows 版本? 7、一个字符串类型的值能存储最大容量是多少? 8、为什么 Redis 需要把所有数据放到内存中? 9、Redis 集群方案应该怎么做?都有哪些方案? 10、Redis 集群方案什么情况下会导致整个集群不可用? 11、MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据? 12、Redis 有哪些适合的场景? 13、Redis 支持的 Java 客户端都有哪些?官方推荐用哪个? 14、Redis 和 Redisson 有什么关系? 15、Jedis 与 Redisson 对比有什么优缺点? 16、说说 Redis 哈希槽的概念? 17、Redis 集群的主从复制模型是怎样的? 18、Redis 集群会有写操作丢失吗?为什么? 19、Redis 集群如何选择数据库? 20、Redis 如何做内存优化? 了解Redis Redis是一种基于键值对(Key-Value)的NoSQL数据库

[书籍精读]《深入浅出Node.js》精读笔记分享

試著忘記壹切 提交于 2020-11-10 01:01:53
写在前面 书籍介绍:本书由首章Node介绍为索引,涉及Node的各个方面,主要内容包含模块机制的揭示、异步I/O实现原理的展现、异步编程的探讨、内存控制的介绍、二进制数据Buffer的细节、Node中的网络编程基础、Node中的Web开发、进程间的消息传递、Node测试以及通过Node构建产品需要的注意事项。 我的简评:这是一本难得的好书,这本书理论和实践结合的很好。如果你是一个纯前端的开发者,这本书可以读读开拓些视野,如果你是一个全栈的开发者,这本书作为入门和深入后端也很不错,推荐拜读。 !!文末有pdf书籍、笔记思维导图、随书代码打包下载地址,需要请自取!阅读[书籍精读系列]所有文章,请移步: 推荐收藏-JavaScript书籍精读笔记系列导航 第一章 Node简介 1.1.Node的诞生历程 2009年3月, Ryan Dahl 1.2.Node的命名与起源 别名 Nodejs、 NodeJS、 Node.js 找到了设计高性能, Web服务器的几个要点: 事件驱动、非阻塞I/O JavaScript 高性能、符合事件驱动、没有历史包袱 构建网络应用的一个基础框架 1.3.Node给JavaScript带来的意义 浏览器中除了V8作为JavaScript引擎外,还有一个WebKit布局引擎 浏览器通过事件驱动来服务界面上的交互, Node通过过事件驱动来服务I/O 1.4

「网络IO套路」当时就靠它追到女友

烈酒焚心 提交于 2020-11-01 09:59:52
一周至少一篇到今天已经持续 30 周了,希望每一篇多多少少能给大家带来点干货。同样的,今天分享的基本上一面试就会被问的网络IO。文中涉及的代码部分不太重要,重要的是对这概念的理解。在看文章之前大家也可通过下面的思维导图看看自己是否能回答出来。 大纲 1 阻塞与非阻塞--开胃菜 阻塞 我们知道在调用某个函数的时候无非就是两种情况,要么 马上返回 ,然后根据返回值进行接下来的业务处理。当在使用 阻塞IO 的时候,应用程序会被无情的 挂起 ,等待内核完成操作,因为此时的内核可能将CPU时间切换到了其他需要的进程中,在我们的应用程序看来感觉被卡主(阻塞)了。 阻塞IO 传统阻塞IO模型 传统阻塞IO模型 特点: 通过阻塞式IO获取输入的数据 其中每个连接都采用独立的线程完成数据输入,业务处理以及数据返回的操作 这种方案有什么问题? 首先当并发较大的时候,需要创建大量的线程来处理连接,需要占用大量的系统资源。 连接建立完成以后,如果当前线程没有数据可读,将会阻塞在read操作上造成线程资源的浪费 鉴于上面的两个问题,通常是解决方案是啥呢? 第一种是 采用IO复用的模型 ,所谓IO复用模型即多个连接共享一个阻塞对象,应用程序只会在一个阻塞对象上等待。当某个连接有新的数据处理,操作系统直接 通知 应用程序,线程从阻塞状态返回并开始业务处理 第二种方案即采用 线程池复用的方式

通俗易懂讲解epoll

心不动则不痛 提交于 2020-10-28 10:25:04
epoll 的本质是什么? 从事服务端开发,少不了要接触网络编程。epoll 作为 Linux 下高性能网络服务器的必备技术至关重要,nginx、Redis、Skynet 和大部分游戏服务器都使用到这一多路复用技术。 epoll 很重要,但是 epoll 与 select 的区别是什么呢?epoll 高效的原因是什么? 网上虽然也有不少讲解 epoll 的文章,但要么是过于浅显,或者陷入源码解析,很少能有通俗易懂的。笔者于是决定编写此文,让缺乏专业背景知识的读者也能够明白 epoll 的原理。 文章核心思想是:要让读者清晰明白 epoll 为什么性能好。 本文会从网卡接收数据的流程讲起,串联起 CPU 中断、操作系统进程调度等知识;再一步步分析阻塞接收数据、select 到 epoll 的进化过程;最后探究 epoll 的实现细节。 一、从网卡接收数据说起 下边是一个典型的计算机结构图,计算机由 CPU、存储器(内存)与网络接口等部件组成,了解 epoll 本质的第一步,要从硬件的角度看计算机怎样接收网络数据。 计算机结构图(图片来源:Linux内核完全注释之微型计算机组成结构) 下图展示了网卡接收数据的过程。 在 ① 阶段,网卡收到网线传来的数据; 经过 ② 阶段的硬件电路的传输; 最终 ③ 阶段将数据写入到内存中的某个地址上。 这个过程涉及到 DMA 传输、IO

「查缺补漏」巩固你的Nginx知识体系

萝らか妹 提交于 2020-10-27 17:46:25
Nginx 篇 基本介绍 Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器 / 电子邮件(IMAP/POP3)代理服务器,主要的优点是: 支持高并发连接,尤其是静态界面,官方测试 Nginx 能够支撑 5 万并发连接 内存占用极低 配置简单,使用灵活,可以基于自身需要增强其功能,同时支持自定义模块的开发 使用灵活:可以根据需要,配置不同的负载均衡模式,URL 地址重写等功能 稳定性高,在进行反向代理时,宕机的概率很低 支持热部署,应用启动重载非常迅速 基础使用 Windows 版 安装 文件下载地址:http://nginx.org/en/docs/windows.html 如果下载很慢可以用该链接: 百度云盘链接: https://pan.baidu.com/s/1r3mSEGhmz4HA46Cw9w6QTQ 提取码: d8bi 解压即可 基本命令 # 启动 # 建议使用第一种,第二种会使窗口一直处于执行中,不能进行其他命令操作 C:\server\nginx-1.19.2> start nginx C:\server\nginx-1.19.2> nginx.exe # 停止 # stop是快速停止nginx,可能并不保存相关信息;quit是完整有序的停止nginx,并保存相关信息 C:\server\nginx-1.19.2> nginx.exe -s stop

IO

百般思念 提交于 2020-10-27 09:17:57
一.I/O模型 1.使用同步IO模型实现的Reactor模式的工作流程 以epoll_wait为例 主线程往epoll内核事件表中注册socket上的读就绪事件 主线程调用epoll_wait等待socket上有数据可读 当socket上有数据可读时,epoll_wait通知主线程。主线程将socket可读事件放入请求队列 睡眠在请求队列上的某个工作线程被唤醒,它从socket读取数据,并处理客户请求,然后往epoll内核事件表中注册该socket上的写就绪事件 主线程调用epoll_wait通知主线程。主线程将socket可写事件放入请求队列 睡眠在请求队列上的某个工作线程被唤醒,它往socket上写入服务器处理客户请求的结果 2.如何理解阻塞非阻塞与同步异步的区别 同步和异步关注的是消息通讯机制 所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由调用者主动等待这个调用的结果 而异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用 阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态 阻塞调用是指调用结果返回之前,当前线程会被挂起