基本概念

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. js获取当前位置

    <!DOCTYPE html><html><head><meta name="viewport" content="initia ...

  2. RN code push自定义弹框

    最近在弄react native的code push热更新问题.开始是用的后台默默更新配置.由于微软服务器速度问题,经常遇到用户一直在下载中问题.而用户也不知道代码需要更新才能使用新功能,影响了正常业 ...

  3. tcpdump用于抓取tcp数据包

    一.简单使用:-c监听次数.-v打印详情.host后接监听地址 1.1.监听 tcpdump -c -v host www.baidu.com 1.2.访问被监听的网址: 1.3.查看监听的数据:

  4. day21 04 三级菜单

    day21 04 三级菜单 1.使用递归调用的方法 整体代码类型比较简单如下: menu={'北京':{'海淀':{'a':{},'h':{},'c':{}},'昌平':{'沙河':{},'天通苑': ...

  5. 第二十节:Scrapy爬虫框架之使用Pipeline存储

    在上两节当中,我们爬取了360图片,但是我们需要将图片下载下来,这将如何下载和存储呢? 下边叙述一下三种情况:1.将图片下载后存储到MongoDB数据库:2.将图片下载后存储在MySQL数据库:3.将 ...

  6. Win8系统下MT4不能添加指标无法找到技术指标

    首次使用MT4平台时系统会将MT4所有文件都加载到了Windows用户目录下,导致在MT4安装位置添加了技术指标后,MT4平台也无法找到技术指标,关于这个问题的解决方法如下 MT4是一款享誉盛名的市场 ...

  7. 将scl分频

    多个scl后一个高脉冲,脉冲宽度一个scl脉冲. always @ ( posedge MCLK or negedge RST_N ) begin if (rClkCount == 24) //如果有 ...

  8. jsp获取绝对路径----${pageContext.request.contextPath}

    JSP取得绝对路径 在JavaWeb开发中,常使用绝对路径的方式来引入JavaScript和CSS文件,这样可以避免因为目录变动导致引入文件找不到的情况,常用的做法如下: 一.使用${pageCont ...

  9. xtu summer individual 5 A - To Add or Not to Add

    To Add or Not to Add Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeFo ...

  10. Android BGABadgeView:新消息/未接来电/未读消息/新通知圆球红点提示(1)

     Android BGABadgeView:新消息/未接来电/未读消息/新通知圆球红点提示(1) 现在很多的APP会有新消息/未接来电/未读消息/新通知圆球红点提示,典型的以微信.QQ新消息提示为 ...