fork()与写时复制

没有写时复制时的问题最初在Unit系统中,在使用fork()系统调用创建子进程的时候,会复制父进程的整个地址空间并把复制的那一份分配给子进程。这种情况比较耗时。因为它需要: 为子进程的页表分配空间 为子进程的页分配页面 初始子进程的页表 把父进程的页复制到子进程相应的页中。 创建一个地址空间的这种方法涉及许多内存访问,消耗许多CPU周期,并且完全破环了高速缓存中的内容。在大多数情况下,这种做法常常时毫无意义的,因为许多子进程通过装入一个新的程序开始它们的执行,这样就完全丢弃了所继承的地址空间。

Linux内核设计与实现读书笔记一

进程管理进程相关概念进程就是处于执行期的程序。进程是处于执行期的程序以及相关资源的总称。线程是进程中的活动对象,每个线程都拥有一个独立的程序计数器、进程栈和一组进程寄存器。内核调度的对象是线程而不是进程。 进程描述符及任务结构内核吧进程的列表存放在叫做任务队列的双向循环列表中。链表中每一项的类型都是task_struct、被称为进程描述符。该结构包含了内核管理一个进程所需的所有信息。

Dubbo小知识点总结

Dubbo的几种集群容错方案 集群容错方案 解释 Failover(默认) 快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。 Failsafe 安全失败,出现异常时,直接忽略,通常用于写入日志 Fai...

MyBatis的使用回顾

Mapper文件的编写select123<select id = “ selectPerson” parameterType = “ int” resultType = “ hashmap” > SELECT * FROM PERSON WHERE ID =#{id}</ select> 这里有两点需要注意的,一是区分#和$的区别.#的底层是基于预编译语句来实现了,这样可以避免SQL注入的风险。而$在底层是通过字符串的直接拼接来实现了,因此有SQL注入的风险。

Dubbo集群容错

简介Dubbo集群容错方面的源码包括四个部分,分别式服务目录Directory、服务路由Router、集群Cluster和负载均衡LoadBalance。 它们之间的关系是这样的:

Dubbo服务调用过程

简介Dubbo服务调用的基本过程如图: 首先服务消费者通过代理对象Proxy发起远程调用,接着通过网络客户端将编码后的请求发送给服务提供方的网络层上。Server收到请求之后,首先要做的就是对数据包进行解码。然后将解码后的请求发送至分发器,再由分发器将请求发送到指定的线程池上,最后由线程池调用具体的服务。这就是一个远程调用请求的发送过程。

InnoDB的锁

什么是锁?锁是数据库系统区别于文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问。 lock和latchlatch一般称为闩锁,因为其要求锁定的时间必须非常短,则应用的性能会非常的差。在InnoDB存储引擎中,latch由可以分为matuex(互斥量)和rwlock(读写锁)。其目的是用来保证并发线程操作临界资源的正确性,并且通常没有死锁检查机制。 lock的对象是事务,用来锁定的是数据库中的对象,如表、页、行。并且一般lock的对象仅在事务commit或rollback后进行释放。此外lock是有死锁检查机制的。

SpringBoot启动原理

SpringBoot启动SpringBoot因为内置了tomcat或jetty服务器,不需要直接部署War文件,所以SpringBoot的程序起点是一个普通的主函数。主函数如下: 123456@SpringBootApplicationpublic class SpringbootStudyApplication { public static void main(String[] args) { SpringApplication.run(SpringbootStudyApplication.class, args); }} 整个SpringBoot的启动过程其实都是通过@SpringBootApplication注解和SpringApplication.run方法来实现的。 整个启动的过程可以概括为: 读取所有依赖的META-INF/spring.factories文件,该文件指明了哪些依赖可以被自动加载。 根据importSelector类选择加载哪些依赖,使用conditionOn系列注解排除掉不需要的配置文件 将剩余的配置文件所代表的bean加载到IOC容器中。

Maven和Git命令的一些总结

Maven命令 创建Maven的普通Java项目 123mvn archetype:create -DgroupId=packageName - DartifactId=projectName 创建Maven的Web项目: 1234mvn archetype:create -DgroupId=packageName -DartifactId=webappName -DarchetypeArtifactId=maven-archetype-webapp 编译源代码 1mvc compile

高可用Redis:Redis Cluster

Redis Cluster是Redis官方提供的Redis集群功能。 为什么现需要Redis Cluster 主从复制不能满足高可用的要求 随着业务的发展,需要更高的QPS 数据量的增长导致服务器内存不足以存储 网络流量的增长,业务的流量已经超过了服务器的网卡的上限值,可以考虑使用分布式技术来进行分流。 离线计算,需要中间环节缓冲等别的需求。 数据分布当单机的redis节点无法满足要求,按照分区规则把数据分到若干个子集中。

123413