基本概念

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. 《BUG创造队》第五次作业:项目需求分析改进与系统设计

    项目 内容 这个作业属于哪个课程 2016级软件工程 这个作业的要求在哪里 实验九 团队作业5-团队项目需求改进与系统设计 团队名称 BUG创造队 作业学习目标 1.编写完整<软件需求规格说明书 ...

  2. IOS沙盒(sandbox)机制和文件操作

    IOS学习之IOS沙盒(sandbox)机制和文件操作   作者:totogo2010 ,发布于2012-9-21,来源:CSDN   目录: IOS学习之IOS沙盒(sandbox)机制和文件操作( ...

  3. Kali Linux 下载、引导、安装

    下载卡莉 Linux 官方镜像: https://www.kali.org/downloads/ 官方虚拟机镜像: https://www.offensive-security.com/kali-li ...

  4. add list of symbols in latex

    * add list of symbols -- latex 1. createa new tex file named "toc.tex' with the following conte ...

  5. form 表单onclick事件 禁止表单form提交

    最近遇到一次处理form数据的过滤,采用了button的onclick事件来检查,发现return false后表单仍然提交了. 于是仔细研究了下onclick.onsubmit.submit集合函数 ...

  6. PAT 1073. 多选题常见计分法

    PAT 1073. 多选题常见计分法 批改多选题是比较麻烦的事情,有很多不同的计分方法.有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到50%分数:如果考生选择了 ...

  7. 判断List集合为空

    package org.springframework.util; CollectionUtils.isEmpty(list)

  8. hdu1978

          {          scanf(          {         scanf(         ;i<n;i++) ;j<m;j++)         scanf(   ...

  9. Python模块:Re模块、附软件开发目录规范

    Re模块:(正则表达式) 正则表达式就是字符串的匹配规则 正则表达式在多数编程语言里都有相应的支持,Python里面对应的模块时re 常用的表达式规则:(都需要记住) “ . ”   #  默认匹配除 ...

  10. memcache适用和不适用场景[转载]

    适用memcached的业务场景:1)如果网站包含了访问量很大的动态网页,因而数据库的负载将会很高.由于大部分数据库请求都是读操作,那么memcached可以显著地减小数据库负载.2)如果数据库服务器 ...