本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
过去一直在做客户端的开发工作,过程中多少了解和使用过虚拟化技术产品,但对虚拟化技术和实现原理没有一个系统性的认识。这两天抽空学习相关材料,对整体有个印象,这里做一下总结。
软件用了那么多,你知道软件的 32 位和 64 位之间的区别吗?再来 32 位的操作系统可以运行在 64 位的电脑上吗?64 位的操作系统可以运行在 32 位的电脑上吗?如果不行,原因是什么?
我在多年的工程生涯中发现很多工程师碰到一个共性的问题:Linux工程师很多,甚至有很多有多年工作经验,但是对一些关键概念的理解非常模糊,比如不理解CPU、内存资源等的真正分布,具体的工作机制,这使得他们对很多问题的分析都摸不到方向。比如进程的调度延时是多少?Linux能否硬实时?多核下多线程如何执行?系统的内存究竟耗到哪里去了?我写的应用程序究竟耗了多少内存?什么是内存泄漏,如何判定内存是否真的泄漏?CPU速度、内存大小和系统性能的关联究竟是什么?内存和I/O存在着怎样的千丝万缕的联系?
服务器虚拟化技术是云计算的基石,在最大化利用硬件资源的同时,又降低了使用成本,让系统具备弹性伸缩能力,促使现代系统的架构出现了革命性的变化。无论是微服务架构还是服务网格架构,都是在服务器虚拟化技术日渐成熟后才得以大规模使用。本文主要介绍 CPU 虚拟化技术的演进过程,以英特尔的 x86 平台为主,为掌握云计算相关知识打好基础。
进程要访问某种资源,进程通过一定的方式排队,确认享受资源的优先顺序。计算机中资源过少,所以进程访问某种资源时需要排队。
从操作系统诞生,虚拟化技术就一直伴随着它发展。因为硬件的限制,人们从一开始就希望使用软件来模拟硬件,而这也是虚拟机的核心思想。
系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 优化原则:减少系统瓶颈,减少资源占用,增加系统的反应速度。
首先要实现多任务,我们需要设计Master-Worker模式,Master负责分配任务,Worker负责执行任务。因此,多任务环境下,通常是一个Master,多个Wroker。
本章内容将讲解 Docker 虚拟化、虚拟化本质、namespace、cgroups。
当 cpu 飙升到 500%时,先用操作系统命令 top 命令观察是不是 mysqld 占用导致的,如果不是,找出占用高的进程,并进行相关处理。
其中,ARM7、ARM9、ARM9E和ARM10为4个通用处理器系列,每一个系列提供一套相对独特的性能来满足不同应用领域的需求。SecurCore系列专门为安全要求较高的应用而设计。
线程池设置多大,并没有固定答案, 需要结合实际情况不断的测试才能得出最准确的数据.
我们会用 Javascript、Typescript 来写前端应用,用 Java、Go 等来写后端应用,也会用 Python 来写一些工具脚本。
如果只跑一个应用的话,可能会浪费资源,所以出现虚拟机的部署形式,一个宿主机器,可以部署多个应用。
抛开一些操作系统,计算机原理不谈,说一个基本的理论(不用纠结是否严谨,只为好理解):一个CPU核心,单位时间内只能执行一个线程的指令 ** 那么理论上,我一个线程只需要不停的执行指令,就可以跑满一个核心的利用率。
我们都知道计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用程序则是具有某种功能的程序,程序是运行于操作系统之上的。
Docker的图标代表,它托着许多集装箱。我们可以把宿主机可当做这只鲸鱼,把相互隔离的容器可看成集装箱,每个集装箱中都包含自己的应用程序。
抛开一些操作系统,计算机原理不谈,说一个基本的理论(不用纠结是否严谨,只为好理解):一个CPU核心,单位时间内只能执行一个线程的指令** 那么理论上,我一个线程只需要不停的执行指令,就可以跑满一个核心的利用率。
抛开一些操作系统,计算机原理不谈,说一个基本的理论(不用纠结是否严谨,只为好理解):一个CPU核心,单位时间内只能执行一个线程的指令 那么理论上,我一个线程只需要不停的执行指令,就可以跑满一个核心的利用率。
之前对这部分的内容很感兴趣,没想到读起来有点晦涩,还是因为对服务器的知识不是很了解。 说道服务器一般人都会想到tomcat或者Jboss或者weblogic,现在流行起来的Node总让人不太放心,JS代码也能做服务器?其实不然,首先一个误区就是Node的服务器是JS写出来的....其实它只有表面暴露给用户使用的模块是用js写的,底层的很多东西还是由C/C++完成的。如果运行在不同的操作系统上,node还会基于操作系统切换底层的实现方式。 再说说Nodejs的特性——最让人印象深刻的就是单线程事件
---- 新智元专栏 作者:torvaldsing 【新智元导读】为什么中国做了30年芯片都没有出现英特尔、ARM这样的巨头?关键在于国产CPU缺少强大的生态系统。有着十余年芯片行业经验的torvaldsing投书新智元,把x86生态系统和ARM生态系统的艰难发展历程和残酷的市场竞争大起底。最后呼吁马化腾:请借助腾讯的强大生态,把CPU和OS这两个老大难问题给OTT掉! 这几天中兴事件持续发酵以来,各种议论纷纷扰扰。 上周,新智元推送了《中国芯“逃兵”:缺芯是因为缺钱;中国芯“老炮”:芯片救国靠BA
来源 | https://juejin.cn/post/6948034657321484318
新智元推送了《中国芯“逃兵”:缺芯是因为缺钱;中国芯“老炮”:芯片救国靠BAT不是开玩笑》一文,引起了无数从业者热议。
每个虚拟机就是一个操作系统,每个操作系统都要分配对应的操作系统资源,大家都用window系统,真正的生产环境一般都是用linux操作系统其中一部分原因就是因为linux系统消耗资源比较少。如果在一个物理服务器上放入10个虚拟机,每个虚拟机系统占用1g资源,等于浪费了10g的内存资源。所以当操作系统越来越多的时候消耗在系统上的资源也就越来越大。
常见的计算机(台式,笔记本),与不常见的计算机(服务器)大部分都遵守冯诺依曼体系结构。
打开电脑的任务管理器,看着跳动的CPU使用率,发现很舒服。每一个线程占用了多少CPU清清楚楚,也就能针对性的确认为啥你的电脑跑的慢了。
所有的软件代码最终都是通过 CPU 来跑的,能不能把 CPU 高效利用起来是区分性能高低的标志,也就是说不能让它空转。
大家好,这里记录,我每周读到的技术书籍、专栏、文章以及遇到的工作上的技术经历的思考,不见得都对,但开始思考总是好的。
定义:平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,和 CPU 使用率并没有直接关系。换言之,要计算 CPU 负载的值,只考虑正在运行或等待分配 CPU 时间的进程。不考虑正常的休眠过程(休眠状态),僵尸或停止的过程。
我喜欢在写文章(不用纸和笔用电脑了)的时候听音乐(不用 MP3 用电脑了),假如电脑只能做一件事情的话,我就只能在写完文章的时候再听音乐,或者听完音乐的时候再开始写作,这样就很不爽——在没有操作系统前,的确就是这么不爽。
采用64位处理器的树莓派3B,虽然具有64位硬件,但是系统还没有跟上节奏。官方尚未正式发布64位Raspbian,近期有团队移植了Debian 9 arm64到树莓派3B,将“装死”一年多的树莓派3B的性能完全释放出来,测试跑下来发现CPU性能最高比32位系统高30倍!
对服务端而言,如果客户端高并发的所有请求任务进入到执行的阶段,必然会给服务端带来系统级的灾难,这是因为服务端的底层服务以及系统的集群计算能力它终究是存在可承载的能力是有限的,毕竟不管是服务的承载能力还是计算引擎的数据分析都是,都是存在它的边界能力的,而不可能无限制的来接受客户端的所有请求并对这些请求进行立刻马上的处理,如果真如此,这样带来的灾难是系统级的瘫痪。
最近宝强同志不幸遭遇了一场事故,可谓是赔了夫人又折兵. 男人们看到这个 新闻,然后转头看看自己的另一半,眼神也不禁若有所思. 遭遇背叛是每个人都不愿遇到的, 那么我们作为目光短浅的凡人,该如何事先做好
在高并发的场景之下,Java经常使用到的技术就是多线程。而多线程的使用,到底是否真的能够有效地提高服务的性能和效率,就必须拿捏得当,从计算机操作系统,到服务代码,到应用上线之后的监测。得谨小慎微的行走~
操作系统中的经典定义: 进程:资源分配单位。 线程:调度单位。 操作系统中用PCB(Process Control Block, 进程控制块)来描述进程。Linux中的PCB是task_struct结构体。
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
前面我们所有的实验都是跑的裸机程序(裸奔),从本章开始,我们开始介绍UCOSII(实时多任务操作系统内核)。
在前面文章中,我们介绍了实时性的基本模型、并分析了实时性窗口内不同位置的时间对整个系统的价值,得出了一个结论——实时性窗口中越靠前的时间对系统中的其它任务越有价值;当一个有实时性要求的事件发生时,如果“不顾其它任务、自私自利”——只“单纯”考虑以越快越好的速度尽快完成当前的事件处理,会给整个系统的实时性带来毁灭性的结果——事实上,当所有任务都采取这一策略时,系统中没有任何一个任务的实时性是可以确定得到保证的。关于以上的结论,如果你还没有阅读过前一篇文章、或是对上述结论仍然抱有疑惑,可以阅读《实时性迷思(1)——”快是优点么“?》。
打个比方,Hadoop相当于一台虚拟计算机(由多台计算机构造的集群),那么HDFS就是这台虚拟计算机的文件系统,管理磁盘资源;而YARN负责管理虚拟计算机的CPU和内存资源。在YARN上跑的MapReduce程序(比如5.4节跑的PI和wordcount两个应用程序)就是在这台虚拟计算机跑的应用程序,需要磁盘、内存和CPU等资源。
我可以通过Thread类new一个出来,也可以通过Runnable实现出来。另外我跟各个系统平台还有很大关系,我虽然诞生自JVM的虚拟环境,但运行时的程序本身是用C语言之类的开发语言编写的本机程序,因此我还占用了本机资源,比如本机内存,这点可以观察Thread类里面有很多的native方法就能明白我确实不能像其他类那样"潇洒",因为这意味着我所拥有的这些方法往往是没有使用或者没有办法来使用跟平台无关的手段来实现。另外多啰嗦一句,有时候需要本机内存的操作随jvm的实现不同也会有差别,但有些操作很常见,比如启动我这个线程的时候,加载类的时候,还有网络或者文件I/O操作等等,这些操作都需要本机内存的参与,这得益于JNI的支持使得JAVA运行时能够很方便的调用类似C语言编写的本机代码。所以说到这里的话,因操作系统不同因而实现不同,也就不仅仅是我自己不那么"潇洒"了,当然多数基本的类型还是都自由自在的畅游在JVM这个环境下的。
生活中的多任务时时刻刻存在,例如小张一边码字一边看屏幕,又例如小蔡可以一边跳舞一边打篮球,这就是生活中的多任务。那么计算机中的多任务是什么呢、怎么使用呢?就让我们一起探讨计算机中,多任务-线程、多任务-进程、多任务-协程的理解以及在python中的应用。
本文引用了“一文读懂什么是进程、线程、协程”一文的主要内容,感谢原作者的无私分享。
作者 | 张甦, 数据库领域的专家和知名人士、图书《MySQL王者晋级之路》作者,51CTO 专家博主。近10年互联网线上处理及培训经验,专注于 MySQL 数据库,对 MongoDB、Redis 等 NoSQL 数据库以及 Hadoop 生态圈相关技术有深入研究,具备非常丰富的理论与实战经验。
Go 语言比 Java 语言性能优越的一个原因,就是轻量级线程Goroutines(协程Coroutine)。本篇文章深入分析下 Java 的线程和 Go 的协程。
并发问题一直是Java领域的高阶问题,要想掌握它不仅需要了解JVM的内存模型,更需要对计算机底层硬件有深入的理解。本文主要探讨下Java并发安全问题的根源所在,通过对根源问题对探究,加深对于Java并发安全的理解。
大家早上好,我今天给大家分享我们的基础软件建设。网易杭州研究院在整个网易集团的主要职责是为网易的非游戏业务构建统一的技术平台,来支撑网易音乐、网易新闻、严选,以及之前的考拉海购的业务需求。在 2019 年的时候,我们把考拉海购出售给阿里集团了,但是在之前,考拉也曾经一度是我们最大的一个支撑对象。所以对我们来讲,重点就是要去探索一个比较统一的、开放的、自主可控的技术架构,来满足我们的业务需求。
领取专属 10元无门槛券
手把手带您无忧上云