os中引入进程的目的是,为了描述和实现多个程序的并发执行,以改善资源利用率及提高系统的吞吐量。

  为什么要引入线程?这是为了减少程序并发执行时系统所付出的额外开销(堆栈切换的开销等),使os具有更好的并发性。

 进程的两个基本属性:

    1、进程是一个拥有资源的独立单位;

    2、进程同时又是一个可以独立调度的基本单位;

系统为进程进行的操作:

  创建进程、 撤销进程、进程切换

进程作为资源的拥有者和系统的调度对象,需要花费系统较大的额外开销,故,系统中同时存咋的进程数目不宜过多,进程切换的频率也不宜过高,而这也就限制了并发度的进一步提高;

目标:既能提高进程并发度,又能降低系统的额外开销;

实现:将进程的资源申请和调度属性分开,即进程作为资源的申请和拥有者,但不作为调度的基本单位。这样,就产生了线程的概念;

  线程是进程中的一个实体,是独立调度和分派的基本单位;

线程自身基本上不拥有资源,只拥有少许运行中必不可少的私有资源。线程可与同属一个进程的其他线程共享进程的全部资源;

  进程中的所有线程共享该进程的状态;

线程具有三种基本状态:就绪、执行和阻塞;一般没有挂起状态;

一个进程可以创建和撤销一个或多个线程,同一进程的多个线程可以并发执行;

  对线程的操作包括:

    1、派生(spawn),当系统创建一个进程时,同时也为该进程派生一个线程(主线程),同一进程中的线程可以再派生其他线程;

    2、阻塞(Block), 当线程需要等待其他事件,它将被阻塞,释放处理机执行其他线程;

    3、解除阻塞(Unblock),当线程的阻塞事件发生,其状态转换为就绪,并插入到就绪队列,等待调度执行;

    4、结束(Finish),当线程执行完毕,释放其私有资源,(共享资源没有权限释放)

 注意:线程阻塞不一定会引起整个进程的阻塞,否则,引入线程带来的并发性就不会提高;(有时候线程阻塞会引起进程的阻塞,比如: )

  传统os,一个进程可以创建一个线程;MS DOS就是一个单用户,单进程,单线程的os,unix是一个多用户,多进程,单线程的os;

  现代os,windows和linux 都是多进程、多线程技术;java虚拟机是一个单进程、多线程的运行环境;

  引入线程的os中,线程是独立调度的基本单位(进程也要被调度);进程是资源拥有的基本单位,从而可以显著提高os的并发程度;

  同一进程中的线程间切换不会引起进程切换;但当一个进程中的线程切换到另一进程中的线程时,将会引起进程切换;

  进程之间可以并发执行;

  同属于一个进程的多个线程之间,也可并发执行;

  因而使os具有更好的并发性,从而更有效地使用系统资源和提高os吞吐量;

思考:不同进程之间的线程能否并发执行;

进程与线程  ----拥有资源

  进程是拥有资源的独立单位,它有权申请系统的各类资源;

线程除了拥有很少的私有资源以外,不能申请系统资源,可以共享其所属今晨的资源,即,进程的代码段、数据段以及系统资源,如已打开的文件,I/O设备等,都可被其内的所有线程共享;

    

  

OS之多线程的更多相关文章

  1. Objective-C 高级编程:iOS与OS X多线程和内存管理

    <Objective-C 高级编程:iOS与OS X多线程和内存管理> 基本信息 原书名: Pro Multithreading and Memory Management for iOS ...

  2. 《Objective-C高级编程:iOS与OS X多线程和内存管理》读后感

    拿到这本书的第一感觉是非常薄,可是内容就如同序里面所说,这不是一本面向刚開始学习的人的书,比較有深度,对C/C++全然不熟悉的话非常多东西会看不明确. 尽管此书在技术点上仅仅谈到了ARC.Blocks ...

  3. Oracle12c(12.1)中性能优化&amp;功能增强之通过参数THREADED_EXECTION使用多线程模型

    1.   后台 UNIX/Linux系统上,oracle用多进程模型.例如:linux上一个常规安装的数据库会有如下进程列: $ ps -ef | grep [o]ra_ oracle  15356  ...

  4. 多线程(一) NSThread

    OS中多线程的实现方案: 技术 语言 线程生命周期 使用频率 pthread C 程序员自行管理 几乎不用 NSthread OC 程序员自行管理 偶尔使用 GCD C 自动管理 经常使用 NSOpe ...

  5. iOS 多线程 GCD part3:API

    https://www.jianshu.com/p/072111f5889d 2017.03.05 22:54* 字数 1667 阅读 88评论 0喜欢 1 0. 预备知识 GCD对时间的描述有些新奇 ...

  6. Python并发编程04 /多线程、生产消费者模型、线程进程对比、线程的方法、线程join、守护线程、线程互斥锁

    Python并发编程04 /多线程.生产消费者模型.线程进程对比.线程的方法.线程join.守护线程.线程互斥锁 目录 Python并发编程04 /多线程.生产消费者模型.线程进程对比.线程的方法.线 ...

  7. ios升级<注:来着微信平台>

    <来着微信平台>  http://mp.weixin.qq.com/s?__biz=MjM5NTIyNTUyMQ==&mid=2709545194&idx=1&sn ...

  8. 【读书笔记】iOS-GCD-GCD与perfomSelector系方法比较

    一,GCD是导师步执行任务的技术之一.一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需要定义想执行的任务并追加到适当的Dispatch Queue中,CGD就能生成必要的线程并计划执行 ...

  9. iOS 学习资源

    这份学习资料是为 iOS 初学者所准备的, 旨在帮助 iOS 初学者们快速找到适合自己的学习资料, 节省他们搜索资料的时间, 使他们更好的规划好自己的 iOS 学习路线, 更快的入门, 更准确的定位的 ...

随机推荐

  1. ACPI引起linux系统无故重启

    新装机器无故重启多次. centos6 64bit uname -a Linux Eos 2.6.32-71.el6.x86_64 #1 SMP Fri May 20 03:51:51 BST 201 ...

  2. RHEL6.4 postfix+dovecot搭建邮件服务器

    实验需求:为公司搭建一台能够收信和发信的邮件服务器(192.168.100.1),为员工提供服务,公司域名为jinjianjun.com. 一.修改DNS服务器(192.168.100.2)上mx邮件 ...

  3. Android网络框架技术

    网络相关1. Asynchronous Http Client for Android Android异步Http请求项目地址:https://github.com/loopj/android-asy ...

  4. ExpandableListView(三)只展开一个group,没有child不展开group

    本文是自己在实践中,发现的问题. 有时候想让界面更加的人性化,就要实现很多的效果,比如只展开一个group,在点击下个group的同时,关闭之前的group 在一个ExpandableListView ...

  5. Linux c 信号—pause、sigsuspend 的相同于区别

    pause函数:      功能:让进程暂停直到信号出现 #include<unistd.h> intpause(); 函数说明:pause()会令目前的进程暂停(进入睡眠状态),直至信号 ...

  6. 纯JavaScript实现HTML5 Canvas六种特效滤镜

    纯JavaScript实现HTML5 Canvas六种特效滤镜  小试牛刀,实现了六款简单常见HTML5 Canvas特效滤镜,并且封装成一个纯 JavaScript可调用的API文件gloomyfi ...

  7. C++中搜索、截取字符串

    演示样例中有具体凝视,直接上代码: #include <iostream> #include <string> using std::cout; using std::endl ...

  8. 自己动手写处理器之第一阶段(3)——MIPS32指令集架构简单介绍

    将陆续上传本人写的新书<自己动手写处理器>(尚未出版).今天是第四篇.我尽量每周四篇 1.4 MIPS32指令集架构简单介绍 本书设计的处理器遵循MIPS32 Release 1架构,所以 ...

  9. Javascript 递归函数

    递归函数就是在函数内部调用它自己.在Javascript 中有很多写法,值得我们学习一下(Javascript太灵活了).还是用n的 阶乘 来写例子吧. 1. 首先,来看一个最普通 最正常的写法. f ...

  10. 原生javascript实现老.虎机抽奖点名demo源码思路解析

    想着使用原生Javascript做一个随机点名的小应用, 也可以做抽奖使用. html简单化,人名单可以通过js生成并处理. 可以非常随意的添加修改人名字. 应用想带点特效,比如老.虎机转动的特效. ...