1.进程生命周期 Linux操作系统属于多任务操作系统,系统中的每个进程能够分时复用CPU时间片,通过有效的进程调度策略实现多任务并行执行.而进程在被CPU调度运行,等待CPU资源分配以及等待外部事件时会属于不同的状态.下图描述了进程之间的状态关系: 运行状态:表示进程此刻正在运行.注,图示中的“运行”状态,并不对应TASK_RUNNING状态,TASK_RUNNING实际表示当前进程被填入CPU就绪队列,属于图示“等待”状态,后续在源码分析中会详细说明: 等待状态:表示进程外部事件已满足,并已…
代码地址:https://github.com/showkawa/spring-annotation/tree/master/src/main/java/com/brian AnnotationConfigApplicationContext启动原理分析主要分析下面三点 1.@Qualifier与@Primary注解的使用2.BeanFactory与ApplicationContext区别3.AnnotationConfigApplicationContext启动原理分析 1.@Qualifie…
本系列文章主要是近期针对Linux进程调度源码进行阅读与分析后的经验总结,分析过程中可能结合部分Linux网络编程的相关知识以便于理解,加深对Linux进程调度的理解和知识分享. 本系列文章主要结合Linux3.10.1内核版本源代码以及部分Linux2.4内核版本源代码进行分析,主要涉及fork(),vfork(),clone()应用层函数的底层实现原理,schedule调度器的实现以及CFS完全公平调度策略算法的分析.…
用户层的fork(),vfork(),clone()API函数在执行时,会触发系统调用完成从用户态陷入到内核态的过程,而上述函数的系统调用,最终实现都是通过内核函数do_fork()完成,本篇着重分析do_forkI()函数的实现过程. Linux操作系统中,产生一个新的进程和产生一个新的线程对于内核来说,最为本质的区别在于资源是否共享.这里的资源包括进程地址空间,文件描述符,信号,命名空间等.由于笔者没有分析过Windows操作系统,故不能说出在上述两种操作系统环境下对于进程和线程的描述. L…
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 之前的文章已经将调度器的数据结构.初始化.加入进程都进行了分析,这篇文章将主要说明调度器是如何在程序稳定运行的情况下进行进程调度的. 系统定时器 因为我们主要讲解的是调度器,而会涉及到一些系统定时器的知识,这里我们简单讲解一下内核中定时器是如何组织,又是如何通过通过定时器实现了调度器的间隔调度.首先我们先看一下内核定时器的框架 在内核中,会使用strut clock_event_device结构描述硬件…
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 上期文章linux调度器源码分析 - 概述(一)已经把调度器相关的数据结构介绍了一遍,本篇着重通过代码说明调度器在系统启动初始化阶段是如何初始化和工作的.通过上期文章我们知道,在多核CPU和SMP系统中,每个CPU(多核COU中的每个核)都有自己的struct rq队列,而rq队列中又有着自己的struct cfs_rq和struct rt_rq.在初始化时就是对这三个结构进行初始化. init_tas…
p { margin-bottom: 0.25cm; line-height: 120% } tomcat源码分析(三)一次http请求的旅行 在http请求旅行之前,我们先来准备下我们所需要的工具.首先要说的就是Connector,其作为Service的子容器,承担着http请求的核心功能.那我们先来准备下一啊吧. 我们知道一次网络请求过来之后,从网络的角度来看,是经过物理层→链路层→网络层->传输层->应用层,如下图所示. 我们所熟知的的Socket处于TCP(传输层),操作系统为我们提供…
使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基于react全家桶(React.React-router-dom.redux.styled-components)开发的一套博客后台管理系统,用于前端小站的管理,主要功能包括游客浏览.文章管理.类别管理.评论通知.推荐设置和用户管理 [访问地址] 域名:https://admin.xiaohuoch…
1. AQS共享模式 前面已经说过了AQS的原理及独享模式的源码分析,今天就来学习共享模式下的AQS的几个接口的源码. 首先还是从顶级接口acquireShared()方法入手: public final void acquireShared(int arg) { if (tryAcquireShared(arg) < 0) doAcquireShared(arg); } 与acquire()方法一样,tryAcquireShared()为自己是实现的对资源获取的接口,AQS对返回值的语义已经定…
Guava 源码分析之Cache的实现原理 前言 Google 出的 Guava 是 Java 核心增强的库,应用非常广泛. 我平时用的也挺频繁,这次就借助日常使用的 Cache 组件来看看 Google 大牛们是如何设计的. 缓存 本次主要讨论缓存.缓存在日常开发中举足轻重,如果你的应用对某类数据有着较高的读取频次,并且改动较小时那就非常适合利用缓存来提高性能. 缓存之所以可以提高性能是因为它的读取效率很高,就像是 CPU 的 L1.L2.L3 缓存一样,级别越高相应的读取速度也会越快. 但也…