基本概念

1. 进程的基本概念

线程(thread)是进程(processes)中某个单一顺序的控制流,也被称为轻量进程(lightweight processes)。
进程是表示资源分配的基本单位,又是调度运行的基本单位。

比如: 用户运行自己的程序,系统就创建一个进程,并为它分配资源,包含各种表格、内存空间、磁盘空间、I/O设备等。

然后,把该进程放人进程的就绪队列。

进程调度程序选中它,为它分配CPU以及其他有关资源,该进程才真正运行。 所以,进程是系统中的并发运行的单位。

2. 线程的基本概念

在Mac、Windows NT等採用微内核结构的操作系统中,进程的功能发生了变化:它仅仅是资源分配的单位,而不再是调度运行的单位。 在微内核系统中,真正调度运行的基本单位是线程。因此,实现并发功能的单位是线程。 线程是进程中运行运算的最小单位,也就是运行处理机调度的基本单位。 如果把进程理解为在逻辑上操作系统所完毕的任务,那么线程表示完毕该任务的很多可能的子任务之中的一个。

比如: 如果用户启动了一个窗体中的数据库应用程序。操作系统就将对数据库的调用表示为一个进程。 如果用户要从数据库中产生一份工资单报表,并传到一个文件里,这是一个子任务。 在产生工资单报表的过程中。用户又能够输人数据库查询请求,这又是一个子任务。 这样,操作系统则把每一个请求――工资单报表和新输人的数据查询表示为数据库进程中的独立的线程。 线程能够在处理器上独立调度运行。这样。在多处理器环境下就同意几个线程各自在单独处理器上进行。 操作系统提供线程就是为了方便而有效地实现这样的并发性

引入线程的优点 1. 易于调度。

2. 提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来运行同一程序的不同部分。 3. 开销少。创建线程比创建进程要快,所需开销非常少。。

4. 利于充分发挥多处理器的功能。

通过创建多线程进程。每一个线程在一个处理器上运行。从而实现应用程序的并发性。使每一个处理器都得到充分运行。

3. 线程的基本状态

就绪:调用线程的start方法后线程进入就绪状态
堵塞:线程调度系统将就绪状态的线程转为运行状态
运行:遇到synchronized语句时,由运行状态转为堵塞
结束:当线程关联的代码运行完后,线程变为结束状态

4. 线程与进程的差别

线程与进程的差别能够归纳为下面4点: 1)地址空间:进程间相互独立,同一进程的各线程间共享。某进程内的线程在其他进程不可见。
2)通信方式:进程间通信IPC,线程间能够直接读写进程数据段(如全局变量)来进行通信。

须要进程同步和相互排斥手段的辅助,以保证数据的一致性。
3)调度切换:线程上下文切换比进程上下文切换要快得多。
4)二者均可并发运行,在多线程OS中,进程不是一个可运行的实体。

简而言之。一个程序至少有一个进程,一个进程至少有一个线程。

线程的划分尺度小于进程。使得多线程程序的并发性高。 另外,进程在运行过程中拥有独立的内存单元,而多个线程共享内存。从而极大地提高了程序的运行效率。 线程在运行过程中与进程还是有差别的。每一个独立的线程有一个程序运行的入口、顺序运行序列和程序的出口。 可是线程不能够独立运行。必须依存在应用程序中,由应用程序提供多个线程运行控制。

从逻辑角度来看。多线程的意义在于一个应用程序中,有多个运行部分能够同一时候运行。 但操作系统并没有将多个线程看做多个独立的应用。来实现进程的调度和管理以及资源分配。这就是进程和线程的重要差别。

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动。进程是系统进行资源分配和调度的一个独立单位。 线程是进程的一个实体,是CPU调度和分派的基本单位。它是比进程更小的能独立运行的基本单位。

线程自己基本上不拥有系统资源。仅仅拥有一点在运行中不可缺少的资源(如程序计数器。一组寄存器和栈), 可是它可与同属一个进程的其他的线程共享进程所拥有的所有资源。 一个线程能够创建和撤销还有一个线程;同一个进程中的多个线程之间能够并发运行。

5. 多线程有几种实现方法

多线程有两种实现方法。

一种是继承Thread类,一种是实现Runnable接口。 
同步有两种方法。

一种同步方法,一种同步代码。各自是synchronized,wait与notify

6. 多线程同步和相互排斥异同

线程同步是指线程之间所具有的一种制约关系,一个线程的运行依赖还有一个线程的消息。当它没有得到还有一个线程的消息时应等待,直到消息到达时才被唤醒。 线程相互排斥是指对于共享的进程系统资源,在各单个线程訪问时的排它性。 当有若干个线程都要使用某一共享资源时,不论什么时刻最多仅仅同意一个线程去使用。 其他要使用该资源的线程必须等待,直到占用资源者释放该资源。线程相互排斥能够看成是一种特殊的线程同步。

[Other]面试复习笔记:线程与进程复习的更多相关文章

  1. Python3基础笔记---线程与进程

    参考博客:Py西游攻关之多线程(threading模块) 一.并发与并行的区别 并发:交替做不同事的能力并行:同时做不同事的能力 行话解释:并发:不同代码块交替执行的性能并行:不同代码块同时执行的性能 ...

  2. 前端复习笔记--1.html标签复习速查

    概览 文档章节 <body> <header> <nav> 导航 <aside> 表示和主要内容不相关的区域 <article> 表示一个独 ...

  3. Python复习笔记(七)线程和进程

    1. 多任务 并行:真的多任务 并发:假的多任务 2. 多任务-线程 Python的 Thread模块是比较底层的模块,Python的 Threading模块 是对Thread做了一些包装,可以更加方 ...

  4. [Java基础] Java线程复习笔记

    先说说线程和进程,现代操作系统几乎无一例外地采用进程的概念,进程之间基本上可以认为是相互独立的,共享的资源非常少.线程可以认为是轻量级的进 程,充分地利用线程可以使得同一个进程中执行多种任务.Java ...

  5. java8--多线程(java疯狂讲义3复习笔记)

    多线程这块,平时用的框架里都封装好了,只有写批处理和工具包时用过几次.现在水平仅仅限于会用的程度,需要全面深入学习多线程. 主要内容:创建线程,启动线程,控制线程,多线程的同步,线程池,使用线程安全的 ...

  6. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  7. javaSE复习之——线程

    线程其实就是程序执行的一条路径,一个进程中可以包含多条线程,多线程并发执行可以提高程序效率,可以同使完成多项任务 多线程的应用场景 迅雷多线程一起下载 服务器同时处理多个客户请求 多线程原理(单核CP ...

  8. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  9. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

随机推荐

  1. gulp 前缀

    var gulp = require('gulp'), autoprefixer = require('gulp-autoprefixer'); gulp.task('testAutoFx', fun ...

  2. Linux从入门到适应(二):更换清华源

    1 进入到/etc/apt文件夹当中,找到sources.list,将其备份.命令:cp -p sources.list sources.list.old 2 采用管理员方式打开sources.lis ...

  3. 学习 Qt 编程的好书精品推荐!

    最近一段时间,准备开始搞Qt方面的东西,想找几本书看看.网上介绍QT的书籍也有很多,不想浪费时间,所以想找几本精品的书籍来看.花了半天的时间找了几本非常不错的,这里面整理好之后推荐给大家! 下面介绍的 ...

  4. Kvm:通过 libvirt 远程管理虚拟机

    1.通过qemu+ssh方式 2.通过qemu+tcp方式 主控端需要安装相关工具包: #yum groupinstall "Virtualization" #yum instal ...

  5. The Bells are Ringing(枚举)

    Description Perhaps you all have heard the mythical story about Tower of Hanoi (The details of this ...

  6. //……关于HTTP与HTTPS

    图1 图2 第一张访问域名http://www.tsinghua.edu.cn,谷歌浏览器提示不安全链接,第二张是https://www.12306.cn/index,浏览器显示安全,为什么会这样子呢 ...

  7. MySQL SQL语句 生成32位 UUID

    在运营中,有时会碰到线下下单,线下注册,需要在数据库对其数据批量生成导入的场景. 此时如果你的数据表主键并不是Int整型自动递增而是32位的UUID这种情况该怎么办呢? MySQL 其实实现了UUID ...

  8. 一起去打CS(codevs 5059)

    题目描述 Description 早就和lyk约好了去打cs,一直没找着时间,终于今天我家没人,他家也没人,总算可以出去了.但是偏偏天公不作美,某某人非要留那么多题要做.没办法只能尽快做完然后抓紧时间 ...

  9. Codeforces679C. Bear and Square Grid

    n<=500,n*n的01矩阵,可以选择一个k*k的矩阵全变1,求最大1联通区域. 敢敢n^3..模拟k*k的矩阵的位置,从左到右扫的时候,每变一个位置只会引起边界的信息变化,就记含边界的k*k ...

  10. 本地配置nginx的https

    前文:因为要用谷歌下的getUserMedia方法,而getUserMedia方法只能在https下才能调用,所以在本地搭建https来测试,现在说说步骤. 步骤1:下载nginx-1.10.3.zi ...