2016-06-27 并发编程

摘自 深入理解操作系统 CHA 12

并发是在逻辑控制流上重叠。应用级并发在下列情况下是很有用的:

1 访问慢速I/O设备。

2 与人交互

3 通过推迟工作以降低延迟

4 服务多个网络客户端

5 在多核机器上进行并发运算

使用应用级并发的应用程序称为 并发程序。现代操作系统提供了3种基本的构造并发程序的方法:

1 进程:此方法,每个逻辑控制流都是一个进程,由内核来调度和维护。进程有自己的虚拟地址空间,若要和其他流进行通信,控制流必须使用IPC(进程间通信)机制。IPC机制有:管道,共享内存,队列,信号量

2 I/O多路复用:在此并发编程中,应用程序在一个进程的上下文中显式的调度他们自己的逻辑流。逻辑流被转化为状态机,数据到达文件描述符后,主程序显式的从一个状态转换到另一个状态。因为程序是一个单独的进程,所以所有的流都共享同一个地址空间。

3 线程:线程是运行在一个单一进程上下文中的逻辑流,由内核调度。可以把线程看作其他2中的混合体。像进程流一样由内核进行调度,而像I/O多路复用流一样共享一个虚拟的地址空间。

时间: 2024-10-20 01:16:34

2016-06-27 并发编程的相关文章

2016/4/27 网络编程

OSI:开放系统互联参考模型 是IOS提出为异构系统互联提供了概念性的框架 : 分为七层  应用  表示  会话  传输  网络  数据连接  物理 网络编程  编写能直接或间接的通过网络协议与其他计算机上的某个程序进行通讯 : Telnet协议  23端口        简单邮件传输   25端口     文件传输  21端口    超文本传输  80端口 TCP 可靠的双流向协议 可以发送任意数量的数据 能够确认消息检测消息的的错误 并恢复 UDP 协议 不太可靠 单项传输 数据可能丢失 i

工作周记 - 第六周 (2016/06/27 - 2016/07/01)

1.搭建定时任务quartz 本来是打算把定时任务放入后台管理中,这样目前没问题,但是弱后期加入权限管理-shiro,那么肯定有冲突的,原因是最新版的shiro会使用quartz-1.6版本,而最新的quartz已经到了2.3 有人索性把quartz版本降到了1.6,这样就没问题,我想这样不好,2.3的新功能都用不到,1.6多多少少肯定会有一定bug,所以就另开了一个项目作为定时任务,虽然现阶段的任务量少,但是后期一定会多起来,比如定时报表,定时跑批等等 这样也省的把原来的任务再分离出来,这么做

2016/06/27 HDFS概述

1.初识HDFS     HDFS作为一个分布式文件系统,具有高容错的特点,它可以部署在廉价的通用硬件上,提供高吞吐率的数据访问(吞吐率:是对一个系统和它的部件处理传输数据请求能力的总体评价),适合那些需要处理海量数据集的应用程序. 1.1 HDFS主要特性 支持超大文件.超大文件在这里指的是几百MB,几百GB甚至几TB大小的文件,一般来说,一个Hadoop文件系统会存储T(1TB = 1024GB).P(1P = 1024T)级别的数据.Hadoop需要能够支持这种级别的大文件. 检测和快速应

2016/06/27

C#集合相关 .count  //获取集合元素数量 .contains()//确定某元素是否存在于集合中 .sort()//升序排序 .Reverse()//翻转整个集合,搭配.Sort()可以实现降序排序 集合特点: 不需要指定元素数量,数组需要指定元素数量.集合只有一维,数组可以多维. using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading

Python3 与 C# 并发编程之~ 进程先导篇

Linux专项¶ 先写几个问号来概况下今天准备说的内容:(谜底自己解开,文中都有) 你知道Ctrl+C终止进程的本质吗?你知道Kill -9 pid的真正含义吗? 你知道那些跨平台框架(Python,NetCore)在Linux下创建进程干了啥? 你了解僵尸进程和孤儿进程的悲催生产史吗?孤儿找干爹,僵尸送往生想知道不? 想知道创建子进程后怎么李代桃僵吗?ps aux | grep xxx的背后到底隐藏了什么? 你了解Linux磁盘中p类型的文件到底是个啥吗? 为什么要realase发布而不用de

并发编程 16—— Lock

Java并发编程实践 目录 并发编程 01—— ConcurrentHashMap 并发编程 02—— 阻塞队列和生产者-消费者模式 并发编程 03—— 闭锁CountDownLatch 与 栅栏CyclicBarrier 并发编程 04—— Callable和Future 并发编程 05—— CompletionService : Executor 和 BlockingQueue 并发编程 06—— 任务取消 并发编程 07—— 任务取消 之 中断 并发编程 08—— 任务取消 之 停止基于线

Java并发编程与技术内幕:聊聊锁的技术内幕(上)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一.基础知识 在Java并发编程里头,锁是一个非常重要的概念.就如同现实生活一样,如果房子上了锁.别人就进不去.Java里头如果一段代码取得了一个锁,其它地方再想去这个锁(或者再执行这个相同的代码)就都得等待锁释放.锁其实分成非常多.比如有互斥锁.读写锁.乐观锁.悲观锁.自旋锁.公平锁.非公平锁等.包括信号量其实都可以认为是一个锁. 1.什么时需要锁呢? 其实非常多的场景,如共享实例变量.共

并发编程 17—— 使用内置条件队列实现简单的有界缓存

并发编程 01—— ConcurrentHashMap 并发编程 02—— 阻塞队列和生产者-消费者模式 并发编程 03—— 闭锁CountDownLatch 与 栅栏CyclicBarrier 并发编程 04—— Callable和Future 并发编程 05—— CompletionService : Executor 和 BlockingQueue 并发编程 06—— 任务取消 并发编程 07—— 任务取消 之 中断 并发编程 08—— 任务取消 之 停止基于线程的服务 并发编程 09——

Java并发编程75个问答

1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(bool on):true则把该线程设置为守护线程,反之则为用户线程.Thread.setDaemon()必须在Thread.start()之前调用,否则运行时会抛出异常. 两者的区别: 唯一的区别是判断虚拟机(JVM)何时离开,Daemon是为其他线程提供服务,如果全部的User Thread已经

Java并发编程系列-(5) Java并发容器

5 并发容器 5.1 Hashtable.HashMap.TreeMap.HashSet.LinkedHashMap 在介绍并发容器之前,先分析下普通的容器,以及相应的实现,方便后续的对比. Hashtable.HashMap.TreeMap 都是最常见的一些 Map 实现,是以键值对的形式存储和操作数据的容器类型. Hashtable 是早期 Java 类库提供的一个哈希表实现,本身是同步的,不支持 null 键和值,由于同步导致的性能开销,所以已经很少被推荐使用. HashMap 是应用更加