操作系统3--进程的同步
大家可以看下我使用幕布软件画的思维导图,如果大家想使用幕布可以通过我的邀请链接注册,可免费获得一个月高级会员https://mubu.com/inv/477598
3.1 进程同步3.1.1 同步概念3.1.1.1 进程同步的概念进程同步机制的主要任务就是对多个相关进程在执行次序上进行协调,使并发执行的进程之间能按照一定的规则共享系统资源,并能很好的配合工作,从而使程序的执行具有可再现性。
3.1.1.2 制约关系对于处于同一个系统中的多个进程,由于他们共享着系统的资源,或者为了完成同一个任务而相互合作,所以他们之间可能存在下面两种制约关系:
间接相互制约关系 系统中的进程难免会调用像打印机、CPU等这样的临界资源。如果想这些资源正常调用,必须保证多个进程之间互斥地访问这些资源,进而就在这些进程间形成了间接相互制约关系。 为了保证这些进程能有序的进行,对于系统中的这类资源,必须由系统实施统一分配,即用户在使用之前必须先提出申请,绝不允许用户直接使用。
直接相互制约关系 在系统中也会存在一些进程,他们为了完成同一个目标而相互配合合作工作,这种就是直接互相制约关系。 进程间的直接制约 ...
Android网络请求3--解析OkHttp源码
1. OkHttp简介okhttp是一个第三方类库,用于android中请求网络。
这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献。用于替代因移除了HttpClient而导致没用的Volley。
目前更多人选择了Retrofit。
2. 源码解析
本文对OkHttp的探讨全部基于目前的最新版OkHttp:4.0.1,而这个版本作者已经使用kotlin对源码进行了重写,所以有些小伙伴可能阅读稍微有点问题,但是别担心,本文中所涉及的源码阅读起来基本上和Java一样,所以请不会kotlin的小伙伴还是耐心看下去,不太懂的语法就百度下,同时我也会对某些语法作注释
2.1 OkHttp请求流程2.1.1 从请求处理开始分析我们无论在使用OkHttp进行什么请求的时候都会创建OkHttpClient对象并调用他的newCall()方法,那我们就从这个方法看起:
123override fun newCall(request: Request): Call {return RealCall.newRealCall(this, request, forWebS ...
Android网络请求2--解析Volley源码
本文大篇幅参考此篇文章,大家可以结合两篇文章看一下
1. Volley简介在很早以前,如果Android开发者想使用网络请求的话,必须自己通过HttpClient或者HttpURLConnection编写代码来访问。但是他两的用法还是很复杂的,如果不适当的封装的话,就会有很多多余代码甚至效率降低。所以当时出现了很多第三方网络通信框架,但是都是第三方的,而谷歌官方一直没有作为。最终在2013年,谷歌终于意识到了问题,于是他们推出了一个官方的全新的网络框架——Volley。Volley它又能非常简单的进行HTTP通信,又能轻松加载网络上的图片。他的设计目的就是应对数据量不大但是频发的网络操作,但是对于下载等需要大数据量的网络操作,他就不太适合。
2. 源码解析2.1 从RequestQueue入手如果你使用Volley的话,就会发现Volley不管进行什么操作,首先第一步就是先创建RequestQueue对象。所以我们就可以认定他为Volley的入口。创建RequestQueue的方法是RequestQueue mQueue = Volley.newRequestQueue(getAp ...
操作系统2--进程的描述和控制
大家可以看下我使用幕布软件画的思维导图,如果大家想使用幕布可以通过我的邀请链接注册,可免费获得一个月高级会员https://mubu.com/inv/477598
[TOC]
2.1 进程的描述2.1.1 进程的定义和特征2.1.1.1 进程的定义为了能够使程序并发执行,并且可以对并发执行的程序加以描述和控制,人们引入了“进程”的概念。为了使参与并发执行的每个程序都能独立地运行,操作系统必须为之配置一个专门的数据结构,称为进程数据块(PCB)。他用来纪录进程的各种属性,描述进程的动态变化过程。主要包含有进程的描述信息(进程标识符,进程名,用户标识符,进程组关系等)、进程控制信息(当前状态,优先级,代码执行入口地址,保存的磁盘地址等等)、所拥有的资源和使用情况(虚拟地址空间的状态,文件打开列表等)和CPU现场信息等内容。PCB是系统感知进程存在的唯一标志。所以一般情况下,我们把进程实体就简称为进程,创建进程,实质上是创建进程实体中的PCB;撤销进程,实质上是撤销进程的PCB。对于进程的定义,比较典型的有:
进程是程序的一次执行
进程是一个程序及其数据在处理机上顺序执行时所发生的活 ...
操作系统1--操作系统概述
大家可以看下我使用幕布软件画的思维导图,如果大家想使用幕布可以通过我的邀请链接注册,可免费获得一个月高级会员https://mubu.com/inv/477598
现如今主流的操作系统1.1.1 PC1.1.1.1 WindowsMicrosoft Windows是微软公司推出的一系列操作系统。其问世时间为1985年,起初为运行于MS-DOS之下的桌面环境,其后续版本逐渐发展成为主要为个人计算机和服务器用户设计的操作系统,并最终获得了世界个人计算机操作系统的垄断地位。此操作系统可以在几种不同类型的平台上运行,如个人计算机、移动设备、服务器和嵌入式系统等等,其中在个人计算机的领域应用内最为普遍。Windows操作系统当前最新的稳定版是于2015年7月29日发布的 Windows 10。Windows Server当前最新的稳定版是2018年10月2日发布的Windows Server 2019。Windows Phone当前最新的稳定版是Windows10 Mobile,但是已停止开发新版本,仅对现有版本进行安全补丁和维护,直到2019年12月。
1.1.1.2 macOSmacO ...
Android多线程2--Java中的线程池
简介我们在写项目经常要用到多线程。但是线程的创建和摧毁都是较消耗资源和性能的,如果你每需要一个任务就新建一个线程,那可能会在线程的创建和摧毁上浪费掉很多资源。那如果我们让线程执行任务后不摧毁,接着执行下一个任务,这样是不是就能避免这种情况了。Java1.5中提供了Executor框架用于把任务的提交和执行解耦,任务的执行就交给Runnable或者Callable,而Executor框架用于处理任务。Executor中最核心的成员就是ThreadPoolExecutor,他就是线程池核心实现类。
ThreadPoolExecutor我们现在先来看下这个方法。构造器:123456789101112131415161718192021public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,markdownlint long keepAliveTime, TimeUnit unit, ...
Android多线程1--Java中的阻塞队列
阻塞队列前言在谈论阻塞队列之前我们先看下操作系统多线程部分一个经典的例子——生产者和消费者问题:
现在有两个进程,一个是生产者一个是消费者,还有一个线程缓冲区。生产者主要作用就是向缓冲区中添加数据,消费者就是从缓冲区中取出数据。这个问题的核心就是如何确保生产者不会在缓冲区满了的时候还往其中添加元素,消费者不会在缓冲区空了的时候还要求取出数据。
关于这个问题的解决办法我们以后再说,我们现在主要讨论线程缓冲区——阻塞队列。
阻塞队列简介阻塞队列就是队列,只是在一般的队列上添加了两个条件:
当队列满了的时候不允许再添加数据
当队列空了的时候不允许从中取数据
在Java中,阻塞队列是通过BlockingQueue来实现的,BlockingQueue是Java.util.concurrent包下一个重要的数据结构。
BlockingQueue的操作方法
方法
抛异常
返回特定值
阻塞
超时
插入
add(E e)
offer(E e)
put(E e)
offer(E e, long timeout, TimeUnit unit)
移除
remove()
poll() ...
Next配置备份
Hexo配置备份
评论系统
来必力 - https://www.livere.com/
valine(在用) - https://valine.js.org/
阅读量显示
leancloud - https://leancloud.cn/
valine(在用) - https://valine.js.org/
Kotlin入门1:Kotlin和Java区别基础篇
Koltin入门Kotlin简介
科特林岛(Котлин)是一座俄罗斯的岛屿,位于圣彼得堡以西约30公里处,形状狭长,东西长度约14公里,南北宽度约2公里,面积有16平方公里,扼守俄国进入芬兰湾的水道。科特林岛上建有喀琅施塔得市,为圣彼得堡下辖的城市。
而我们虽说的kotlin,就是一门根据它命名的一种现代程序设计语言。Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发。Kotlin可以编译成Java字节码,也可以编译JavaScript,方便在没有JVM的设备上运行。Kotlin已正式成为Android官方支持开发语言。
变量kotlin和Java的最基本的区别就是kotlin中万物皆对象,Java中还存在着int、float等基本类型,但是在kotlin中,它把这些都定义成了对象,类似于Java中的封装类
变量的声明上面说了,kotlin万物皆对象,所以所有的变量也都是对象。在kotlin定义对象和Java有点小区别。kotlin定义对象的格式为
声明类型 变量名: 变量类型
其中:
声明类型分为val和var。val是不可变类型,类似于c ...
Kotlin Anko入门
Kotlin Anko入门简介Anko的官网就是他的GitHub地址
https://github.com/Kotlin/anko
官方对Anko的解释是
Anko是一个 Kotlin 库,它使Android应用程序开发更快更容易。它使您的代码清晰易读,让您忘记Android SDK for Java的粗糙边缘。
为什么这样说呢?比方说如果你写Android,你在xml中定义了一个Button,他的ID是button_login。如果是Java:12setContentView(R.layout.activity_words_detail);Button button = findViewById(R.Id.button_login);而如果你使用kotlin的话,你可以就按如下代码写123import kotlinx.android.synthetic.main.activity_kotlin_main.*...button_login.setText("Kotlin Android Extensions 我不太喜欢");这样确实比Java方便多了,不需 ...