关系逻辑

zz文件系统磁盘布局与I/O映射

别等时光非礼了梦想. 提交于 2019-11-29 06:48:57
http://www.sysnote.org/2015/08/06/fs-io-map/ 本文主要对文件系统的磁盘布局进行概要的梳理,并在此基础上分析文件系统I/O到块I/O的映射机制。 1.文件系统磁盘布局 首先文件系统层面来阐述文件与块设备的关系。 1.1文件描述符与inode 应用程序在访问文件时都会先打开文件,在内核中,对应每个进程,都会有一个文件描述符表表示这个进程打开的文件,但是用户程序不能直接访问内核中的文件描述符表,而只能使用文件描述符表的索引(一个整数),这些索引就被称为文件描述符。当调用open 打开一个文件或创建一个新文件时,内核分配一个文件描述符并返回给用户程序,该文件描述符表项中的指针指向新打开的文件。 文件描述表中每一项都是一个指针,指向一个用于描述打开的文件的数据块–file对象,file对象中描述了文件的打开模式,读写位置等重要信息,当进程打开一个文件时,内核就会创建一个新的file对象。需要注意的是,file对象不是专属于某个进程的,不同进程的文件描述符表中的指针可以指向相同的file对象,从而共享这个打开的文件。file对象有引用计数,记录了引用这个对象的文件描述符个数,只有当引用计数为0时,内核才销毁file对象,因此某个进程关闭文件,不影响与之共享同一个file对象的进程。 file对象中包含一个指针,指向dentry对象

从分而治之的思想到架构的设计

江枫思渺然 提交于 2019-11-29 05:44:28
辛巴当上了国王,他究竟要怎样才能管理好它的王国? 分治与总量控制 在上一篇文章里,我们得到两个信息: 人类大脑的信息实时处理能力存在上限 软件系统的复杂度远超人类大脑的复杂度处理上限 从而引出了人类解决大规模复杂问题的根本方法 分而治之 然而分而治之的需要基于一个前提进行 复杂度总量控制 因为绝大多数人类参与的问题中,分而治之都会引入额外的汇总求解成本。要尽量减少复杂度,有两个方面的思想层次的指导: 子问题在人类可控范围内尽量的大 每个子问题要高内聚,问题间要低耦合 子问题在人类可控范围内尽量大,则有助于减少子问题数量,因而减少合并处理子问题的成本。同时子问题不超过一个人处理能力的上限是因为,一旦超过一个人的能力范围,要多人合作解决同一个平面上问题的不同部分时,必然会因合作之间沟通等原因降低整体开发效率(1 + 1 < 2) 高内聚、低耦合是一体,但从不同角度描述的理念。高内聚,即所需完成的事情所需的资源在内部通过较少的代价即可取得,低耦合则是指代 输出给外部、或者从外部输入的资源尽可能的小。 在存在关联的子问题中,耦合并不可能消除。耦合这个词可能大多数程序员听起来有有点不好的意味,但耦合存在另外一个中性的名字——接口。所以,产生了一个接口就产生了一个耦合,接口参数越多,耦合就越强。 以上是对之前文章的回顾,本文后续将基于个人理解,讲述 分治的隔离级别,如何识别要拆分的点

详解RS232、RS485、RS422、串口和握手

牧云@^-^@ 提交于 2019-11-29 04:54:05
详解RS232、RS485、RS422、串口和握手 2019年08月06日 16:20:08 不脱发的程序猿 阅读数 1423更多 分类专栏: 技术分享 程序人生 通信 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/m0_38106923/article/details/98615747 目录 1、RS232基础 1.1、电气特性 1.2、连接器的机械特性 1.3、传输电缆 1.4、链路层 1.5、传输控制 1.6、RS-232标准的不足 2、RS485基础 2.1、RS-485 的电气特性 2.2、传输速率与传输距离 2.3、网络拓扑 2.4、连接器 3、RS422基础知识 4、串口与握手基础知识 4.1、串口基础知识 4.1.1、波特率 4.1.2、数据位 4.1.3、停止位 4.1.4、奇偶校验位 4.2、握手基础知识 4.2.1、软件握手 4.2.2、硬件握手 4.2.3、XModem握手 1、RS232基础 计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式。由于串行通讯方式具有使用线路少、成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用。 在串行通讯时,要求通讯双方都采用一个标准接口

python3.6异步IO包asyncio部分核心源码思路梳理

情到浓时终转凉″ 提交于 2019-11-29 03:41:20
关于python异步编程的演进过程,两篇文章阐述得妥妥当当,明明白白。 中文资料:https://mp.weixin.qq.com/s?__biz=MzIxMjY5NTE0MA==&mid=2247483720&idx=1&sn=f016c06ddd17765fd50b705fed64429c 英文资料:http://aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html 其实中文资料就是参考的英文资料,英文资料是开源书《 500 Lines or Less 》中的一个主题章节,整书地址:https://github.com/aosabook/500lines python的asyncio源码的核心思路其实跟基于生成器的协程异步编程思路大体一致,只是前者做了大量的代码优化和功能扩充。所以对照生成器协程代码来理解asyncio是很有帮助的。以下的这一小段代码就是采用基于生成器的协程的异步编程方式写的一个小爬虫案例,来自上述中文资料,asyncio的核心代码的思路大体上能从这段代码中找到原型。 该脚本命名为:yield_from.py import socket from selectors import DefaultSelector, EVENT_READ, EVENT_WRITE selector =

shell脚本的条件测试与比较

喜欢而已 提交于 2019-11-29 03:26:24
博文大纲: 一、shell脚本的条件测试 二、文件测试表达式 三、字符串测试表达式 四、整数二元比较操作符 五、逻辑操作符 通常,在bash的各种条件结构和流程控制结构中都要进行各种测试,然后根据测试结果执行不同的操作,有时也会与if等条件语句相结合,来完成测试判断,以减少程序运行的错误。 执行条件测试表达式后通常会返回“真”或“假”,就像执行命令后的返回值为0表示真,非0表示假一样。 一、shell脚本的条件测试 在bash编程里,条件测试常用的语法形式如下: 语法1:test <测试表达式>:这是利用test命令进行条件测试表达的方法,test命令和“<测试表达式>”之间至少有一个空格。 语法2: [ <测试表达式> ]:这是通过[ ](单中括号)进行条件测试表达式的方法,和test命令的用法相同,这是比较推荐的一种方法。[ ]的边界和内容之间至少有一个空格。 语法3:[[ <测试表达式> ]]:这是通过[[ ]](双中括号)进行条件测试表达式的方法,是比test和[ ]更新的语法。[[ ]]的边界和内容之间至少有一个空格。 语法4:(( <测试表达式>)):这是通过(( ))(双小括号)进行条件测试表达式的方法,一般用于if语句里。(())(双小括号)两端不需要有空格。 语法1中的test命令和语法2中的[ ]是一样的。语法3中的[[]]是扩展test命令,语法4中的(()

收益 or 挑战?Serverless 究竟给前端带来了什么

两盒软妹~` 提交于 2019-11-29 01:56:34
作者 | 黄子毅(紫益) 阿里前端技术专家 导读 :前端开发者是最早享受到 “Serverless” 好处的群体,因为浏览器就是一个开箱即用、甚至无需为计算付费的环境!Serverless 把前端开发体验带入了后端,利用 FaaS 与 BaaS 打造一套开箱即用的后端开发环境。本文作者将从前端角度出发,为你讲述 Serverless 带来的收益及挑战。 引言 Serverless 是一种 “无服务器架构”,让用户无需关心程序运行环境、资源及数量,只要将精力 Focus 到业务逻辑上的技术。 现在公司已经实现 DevOps 化,正在向 Serverless 迈进,而为什么前端要关注 Serverless? 对业务前端同学: 会改变前后端接口定义规范; 一定会改变前后端联调方式,让前端参与服务器逻辑开发,甚至 Node Java 混部; 大大降低 Nodejs 服务器维护门槛,只要会写 JS 代码就可以维护 Node 服务,无需学习 DevOps 相关知识。 对一个自由开发者: 未来服务器部署更弹性,更省钱; 部署速度更快,更不易出错。 前端框架总是带入后端思维,而 Serverless 则是把前端思维带入了后端运维。 前端开发者其实是最早享受到 “Serverless” 好处的群体。他们不需要拥有自己的服务,甚至不需要自己的浏览器,就可以让自己的 JS 代码均匀

Swoole.001.手撸网络服务器模型

百般思念 提交于 2019-11-28 23:59:55
github: https://github.com/masterzcw/swoole Swoole进程结构 Master进程: 主进程 Manger进程: 管理进程 Worker进程: 工作进程 Task进程: 异步任务工作进程 Master进程 第一层, Master进程, 这个是swoole的主进程,这个进程是用于处理swoole的核心事件驱动的, 那么在这个进程当中可以看到它拥有一个MainReactor[线程]以及若干个Reactor[线程], swoole所有对于事件的监听都会在这些线程中实现, 比如来自客户端的连接, 信号处理等. 1.1 MainReactor(主线程) 主线程会负责监听server socket, 如果有新的连接accept, 主线程会评估每个Reactor线程的连接数量. 将此连接分配给连接数最少的reactor线程, 做一个负载均衡. 1.2 、Reactor线程组 Reactor线程负责维护客户端机器的TCP连接、处理网络IO、收发数据完全是异步非阻塞的模式. swoole的主线程在Accept新的连接后, 会将这个连接分配给一个固定的Reactor线程, 在socket可读时读取数据, 并进行协议解析, 将请求投递到Worker进程. 在socket可写时将数据发送给TCP客户端. 1.3、心跳包检测线程(HeartbeatCheck)

数据库逻辑结构单元

随声附和 提交于 2019-11-28 22:05:23
数据库逻辑结构单元 0:数据库逻辑结构包括表空间,段,区,数据块   1、数据库在逻辑上是由多个表间组成的,表空间中存储的对象是段;   2、段,由区组成,比如数据段,索引段,和undo段;   3、区,是磁盘分配的最小单位,是物理上连续的块,一个extent的大小是1M,由64个页组成;   4、块(页),在MySQL中块就是页,是数据库中最小的I/O单位,同时也是内存数据缓冲区的单位,及数据文件存储空间单位,一个page的大小是16K(默认,一般也不会更改),innodb_page_size,其值应设置为操作系统块大小的整数倍。 1、表空间(tablespace)   表空间是数据库最大的逻辑结构,一个数据库在逻辑上由多个表空间组成,一个表空间只隶属于一个数据库。   1、一个表空间可以有多数据文件,但是一个数据文件只能属于一个表空间;   2、一个表空间就是一片磁盘区域,由一个或者多个磁盘文件组成,一个表空间可以容纳许多表、索引等。 2、段(segment)   一个表就是一个段,段可以分成:数据段、索引段、回滚段   1、数据段用来存储用户的数据,每个表都有一个对应的回滚段,其名称和数据表的名字相同;   2、索引段用来存储系统、用户的索引信息;   3、回滚段用来存储用户数据修改前的值,回退段与事务是一对多的关系,一个事务只能使用一个回退段

浅谈WEB前后端分离

房东的猫 提交于 2019-11-28 19:44:30
重审业务逻辑 用过MVC的童鞋都知道 业务逻辑(Bussiness Logic) ,但是大多对这概念又是模棱两可,业务逻辑从来都是这样难以理解,谈论前后端分离之前这个概念非常有必要探讨一下!   在简单的CRUD的系统中,基本上都是对数据进行增删改查操作,并没有多少业务逻辑可言;但像银行系统对金融数据的操作就显得不那么简单了,以转账为例:A给B转帐转100元,简易代码如下: if(A.balance - 100 >= 0){ A.balance -100; B.balance +100; }else{ //返回异常信息 }   这串代码已经不仅仅是对数据的增删改查了,它包含了一些业务规则,比如A的余额如果少于100,这个代码会返回异常信息提示"余额不足",类似于这种,一组和特定领域业务相关而又不可拆分的代码,可以看作业务逻辑的实现。所以转账是作为一部个不可拆分的整体提供给用户的,也就是说Business层是不可能给你提供一个"A.余额+x"这种接口的,如果你想转账,请用转账方法,方法里面怎么对数据操作,你无需关心,你也没法关心。 ===== 这里注意强调一下:页面/渲染逻辑和业务逻辑的区别,页面通常需要多个数据用来展示,比如网上银行界面即显示用户名、余额和转账记录等,这些信息的组合称作页面/渲染/展示逻辑,并不等于业务逻辑,业务逻辑只应提供基本的业务数据而不应该和页面逻辑掺和起来

我决定 发展推广 一个 物理学 学派 “逻辑物理学”

五迷三道 提交于 2019-11-28 15:38:59
逻辑物理学 的 创始人 是 百度贴吧 的 灵魂保卫者, 见 百度贴吧 逻辑物理学吧 https://tieba.baidu.com/f?kw=%E9%80%BB%E8%BE%91%E7%89%A9%E7%90%86%E5%AD%A6&ie=utf-8 , 灵魂保卫者 对 逻辑物理学 的 简介 是 “ 欢迎来到逻辑物理学吧!我会让大家看到一个剥掉数学这个外壳后的物理学!大家拭目以待吧! 逻辑物理学,致力于将逻辑比较关系从物理学中分离出来,只有纯碎的客观物理关系才是研究本质的基础~找出物理学中的正确逻辑关系,就是逻辑物理学的研究方法~ ” 来源: https://www.cnblogs.com/KSongKing/p/11413349.html