标签: 操作系统

深入理解并发和并行

深入理解并发和并行

并发是逻辑上的同时发生,而并行是物理上的同时发生。并发可以跑在一个处理器上通过时间片进行切换,而并行需要两个或两个以上的线程跑在不同的处理器上。如果同一个任务的多个线程始终运行在不变的CPU核心上,那就不是并行。

系统架构7个非功能性需求

系统架构7个非功能性需求

非功能性需求是什么呢?保障系统持续健康运转的辅助需求。依然以电商系统的优惠券为例,在促销活动期间发放大量优惠券,如何防止用户集中领券时系统不崩盘呢?活动结束后,如何收缩服务器,节省服务器资源呢? 非功能性需求是面向运维的,重要但是不太紧迫,有时候可以没有操作界面,由架构师提出解决方案,再推动各个业务开发部门去接入相应组件。这些辅助系统对业务系统性能影响很小,并且长期处于优化状态。

操作系统面试题(2)Linux命令与Shell

操作系统面试题(2)Linux命令与Shell

整理一些操作系统面试题,内容包括Linux命令与Shell脚本。本章节面试题有:Linux常用命令有哪些;如何查看文件内容;如何查看磁盘使用空间;举例说明grep命令怎么使用;如何找出占用空间最大的文件;什么是Shell;脚本变量和环境变量有什么区别;Shell 脚本如何写一个函数;Shell 脚本如何连接两个字符串。

操作系统面试题(1)Linux基础

操作系统面试题(1)Linux基础

整理一些操作系统面试题,内容包括Linux结构、Linux内存管理等等。本章节面试题有:Linux有什么特点和优势;Linux的基本组件有哪些;Linux内核有什么作用;为什么需要进程间通信,有哪些通信方式;Linux文件系统有什么特点;软链接和硬链接有什么区别;Linux常见系统目录的作用;Linux内存管理机制是什么。

Java面试题(9) – IO模型

Java面试题(9) – IO模型

整理一些Java基础面试题,内容涵盖语言基础、并发、JVM、IO模型、中间件、开发框架等等。本章节的面试题有: 说说什么是IO流;Java中有几种类型的流;说说Java中常用的IO流实现类;什么是Java序列化,如何实现Java序列化;PrintStream、BufferedWriter、PrintWriter的区别是什么;字符流和字节流有什么区别;如何实现对象克隆;什么是缓冲区,有什么作用; 什么是阻塞IO,什么是非阻塞IO。

彻底理解协程

彻底理解协程

协程不是操作系统的底层特性,系统感知不到它的存在。它运行在线程里面,通过分时复用线程的方式运行,不会增加线程的数量。协程也有上下文切换,但是不会切换到内核态去,比线程切换的开销要小很多。每个协程的体积比线程要小得多,一个线程可以容纳数量相当可观的协程。在IO密集型的任务中有着大量的阻塞等待过程,协程采用协作式调度,在IO阻塞的时候让出CPU,当IO就绪后再主动占用CPU,牺牲任务执行的公平性换取吞吐量。

彻底理解线程

彻底理解线程

操作系统支持多个应用程序同时执行,每个应用至少对应一个进程,彼此之间的操作和数据不受干扰。当一个进程需要磁盘IO的时候,CPU就切换到另外的进程去执行,提高了CPU利用率。CPU在不同的进程之间切换执行,任务多的时候一直处于工作状态。有了进程,为什么还要线程?因为进程的成本太高了。启动新的进程必须分配独立的内存空间,建立数据表维护它的代码段、堆栈段和数据段,这是昂贵的多任务工作方式。如果两个进程之间需要通信,要采用管道通信、消息队列、共享内存等等方式。线程可以看作轻量化的进程,或者粒度更小的进程。线程之间使用相同的地址空间,切换线程的时间远远小于切换进程的时间。一个进程的开销大约是线程开销的30倍左右。

彻底理解进程

彻底理解进程

操作系统的”进程”很早就出现了,许多教科书上定义这个概念总是晦涩难懂。计算机技术发展太快了,简单的概念经过无数次演化,也会变得复杂。我们追溯一下操作系统的发展历史,就能理解进程解决了什么问题、为什么这样设计。进程是独立功能的程序的一次动态执行过程,也是系统资源分配的独立实体。每个进程都拥有独立的地址空间。一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,要使用进程间通信,比如管道、文件、套接字等。