进程、虚拟内存概念与扩展
来源:互联网 发布:域名注册实名认证 编辑:程序博客网 时间:2024/06/03 19:00
进程
操作系统进程相关概念
关键名词
- process:一个正在执行程序的实例,包括程序计数器、寄存器、变量的当前值。
- critical region:对共享内存进行访问的程序片段
- semaphore:可以同时操作共享内存的数目
- mutex:两种状态解锁和枷锁
进程线程区别
- 进程:每个进程都有一个地址空间(存放可执行的程序、程序的数据、程序堆栈)和一个控制线程。
进程、线程实现
进程维护一个数据结构:包含进程所必须的先关资源(进程控制块)
线程:内核态、用户态、混合使用
进程通信
- pipe(一个命令的输出作为另一个命令的输入) :shell bash(>ps -e | grep vmware //显示vmware相关进程)
- 消息传递:kill -signal PID
- 套接字、共享内存、文件、信号量
进程调度
Cooperative Threads-Scheduling:程序自主控制
Preemptive Threads-Scheduling:优先级队列
Java多线程相关概念
基本的线程机制
- 定义任务:
implements Runnable
public class LiftOff implements Runnable { protected int countDown = 10; //Default private static int taskCount = 0; private final int id = taskCount++; public LiftOff(){} public LiftOff(int countDown) { this.countDown = countDown; } public String status() { return "#" + id + "(" + (countDown > 0 ? countDown : "Liftoff!") + ")."; } @Override public void run() { while(countDown-- > 0) { System.out.print(status()); Thread.yield(); } System.out.println(id); }}
- Thread类:使用
new Thread(Runnable object).start()
执行任务。由线程调度器调度执行。
public final static void main(String[] args) { //new LiftOff().run(); // 通过方法在一个线程内调用 for(int i = 0; i < 5; i++) { new Thread(new LiftOff()).start(); } System.out.println("Waiting for LiftOff.");}
- 使用Executor执行器
public static final void main(String[] args) { ExecutorService exec = Executors.newCachedThreadPool(); //Executors.newFixedThreadPool(5); //Executors.newSingleThreadExecutor(); for(int i=0; i<5; i++) { exec.execute(new LiftOff()); } exec.shutdown(); System.out.println("Waiting for LiftOff.");}
- 从任务中产生返回值
implements Callable<T>
- 休眠:
Thread.sleep(100);TimeUnit.MILLISECONDS.sleep(100);
- 优先级:
- 让步:
yield
共享受限资源
- 不正确访问时导致资源的竞争冲突。
- 解决共享资源竞争:
synchronized
、显示灵活的加锁Lock:new ReentrantLock()
对象 - 原子性与内存可见性
volatitle
变量和同步加锁 - 原子类
AtomicInteger, AtomicLong, AtomicReference
- 临界区·
synchronized(this)
对象同步代码块 - 在其他对象上加锁
synchronized(object)
- 线程本地存储
终结任务
- 统计进入各个门的人数。
- 阻塞的方法
- sleep
- wait —— notify、notifyAll(signal,signalAll)
- 等待输入、输出
- 获取同步控制方法时锁不可用
线程之间的协作
wait,notify,notifyAll
- 生产者、消费者:BlockingQueue
线程安全性、对象的共享
- race condition:由于不恰当的执行时序而出现不正确的结果。
- 例如:check-then-act;延迟初始化
- 解决:
- 原子变量类如java.util.concurrent.atomic.AtomicLong
- 内置锁(复合操作):
synchronized
——同步代码块、方法。内置锁的可重入性。 - 加锁机制既可以确保可见性又能确保原子性;volatile变量只能确保可见性。
//解决并发编程的方案1、不在线程之间共享该状态变量2、将状态变量修改为不可变的变量3、在访问状态变量时使用同步锁
内存
虚拟内存
- 虚拟内存图解
- 页面置换算法
关于Linux系统的swap交换空间
各种缓存实现实例
缓存更新的套路
有关采用Filter实现禁用缓存和使用缓存操作实现与分析
Servlet的Filter实现页面缓存
在Servlet Filter中使用Spring容器
SpringMVC通过Redis实现缓存主页
动手写一个并发缓存框架 历程
java java local cache本地缓存的两种实现,一个基于list轮询一个基于timer定时
Redis 缓存 + Spring 的集成示例
1 0
- 进程、虚拟内存概念与扩展
- 进程与虚拟内存空间
- Windows Internals – 1.3 概念与工具之进程、线程、虚拟内存
- win2000进程虚拟内存数据搜索与修改
- win2000进程虚拟内存数据搜索与修改
- win2000进程虚拟内存数据搜索与修改
- win2000进程虚拟内存数据搜索与修改
- win2000进程虚拟内存数据搜索与修改
- Linux进程地址空间与虚拟内存
- Linux进程地址空间与虚拟内存
- 进程虚拟内存
- 进程虚拟内存
- 进程与线程概念
- 虚拟内存地址概念
- 操作系统概念-----虚拟内存管理
- Windows系统的四个重要概念——进程、线程、虚拟内存、内核模式和用户模式
- 进程与线程的概念
- 概念题:进程与线程
- CListCtrl自动滚动
- redis--sorted sets类型及操作
- CSS样式控制超长文本在div,p等块级容器中的自动换行
- iOS开发:第一个iOS程序分析——代理,生命周期函数【转】
- memmove 、 memcpy 的区别
- 进程、虚拟内存概念与扩展
- MySQL 数据库及表的创建
- AES加密
- js闭包的用途
- WebView使用详解
- SetWindowsHookEx 详解(三)
- 分布式计算学习笔记之四:RESTfulWebservice 编程
- com.google.gson string to JsonObject
- 项目四