多线程及多进程部分概念汇总

news/2024/8/24 0:58:28

1.线程的基本概念、线程的基本状态及状态之间的关系?

  1.1线程概念

  >>是进程中的一个执行控制单元,执行顺序流。同类的多个线程共享一块内存空间和一组系统资源,线程本身有一个供程序执行时的堆栈。线程在切换时负荷小,因此,线程也被称为轻负荷进程。

        一个进程中至少有一个线程在负责控制程序的执行

        一个进程中如果只有一个执行路径,这个程序称为单线程

        一个进程中有多个执行路径时,这个程序成为多线程

  1.2线程的基本状态

 

2.线程与进程的区别?

  • 进程是资源分配的最小单位,线程是程序执行的最小单位。

  • 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

  • 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。

  • 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

3.多线程同步和互斥有几种实现方法,都是什么?

  1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 
  2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 
  3、信号量:为控制一个具有有限数量用户资源而设计。 
  4、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。

临界区(Critical Section)(同一个进程内,实现互斥)
保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后
其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。
互斥量(Mutex)(可以跨进程,实现互斥) 互斥量跟临界区很相似,只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下此共享资源都不会同时被多个线程所访问。
当前占据资源的线程在任务处理完后应将拥有的互斥对象交出,以便其他线程在获得后得以访问资源。互斥量比临界区复杂。因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的
安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。 互斥量与临界区的作用非常相似,但互斥量是可以命名的,也就是说它可以跨越进程使用。所以创建互斥量需要的资源更多,所以如果只为了在进程内部是用的话使用临界区会带来
速度上的优势并能够减少资源占用量。
信号量(Semaphores)(主要是实现同步,可以跨进程) 信号量对象对线程的同步方式与前面几种方法不同,信号允许多个线程同时使用共享资源,这与操作系统中的PV操作相同。它指出了同时访问共享资源的线程最大数目。
它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。一般是将当前可用资源计数设置为最大资源计数,每增加一个线程对共享资源的访问,
当前可用资源计数就会减1,只要当前可用资源计数是大于0的,就可以发出信号量信号。但是当前可用计数减小到0时则说明当前占用资源的线程数已经达到了所允许的最大数目,
不能在允许其他线程的进入,此时的信号量信号将无法发出
事件(Event)(实现同步,可以跨进程) 事件对象也可以通过通知操作的方式来保持线程的同步。并且可以实现不同进程中的线程同步操作。

 

4.多线程同步和互斥有何异同,在什么情况下分别使用他们?举例说明。

  线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。

  线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,

    其它要使用该资源的线程必须等待,直到占用资源者释放该资源。线程互斥可以看成是一种特殊的线程同步(下文统称为同步)。

 

转载于:https://www.cnblogs.com/edver/p/9189026.html


http://www.niftyadmin.cn/n/4557700.html

相关文章

Spring MVC 出现 Did not find handler method for [uri] 可能的解决方法

在做SpringMVC 测试时发现在配置完全正确 0.相关JAR包完全导入&#xff0c;Tomcat启动完全成功 1.配置有扫描 <!-- 处理静态资源 --><mvc:default-servlet-handler/><!--Configures the annotation-driven Spring MVC Controller programming model.Note that…

在Windows系统和Linux服务器安装MongoDB和基本使用

Windows系统本地数据库连接文档存储&#xff08;MongoDB / CouchDB&#xff09;&#xff1a;文档存储一般以类似json的格式存储&#xff0c;存储的内容是文档型的。这样的存储方式&#xff0c;也就有有机会对某些字段建立索引&#xff08;index&#xff09;&#xff0c;实现关系…

java NIO关于*Buffer的 flip | reset | rewind | clear 的灵活使用备忘

首先对于Buffer的理解&#xff1a; 有两种状态&#xff1a; 读 || 写 四个重要的属性&#xff1a; capacity: 【Buffer实例最大容量&#xff0c;不可变】 limit: 【Buffer实例最大 {可写 | 可读 } 的值&#xff0c;在写模式下&#xff0c;默认与初始化 给定的 capacity…

要看什么书 全国计算机二级考试C语言类初了C语言还要考些什么

1 另一类是数据库程序设计(Visual )自选一类参加考试http://www.examda.com/ncre/Dynamic/dagang/20070308/145902533.html 二级定位为计算机程序员 一类是语言程序设计(C、C、Java、Visual Basic、Delphi) 学高等教育出版社的《公共基础知识》机试的环境是vc6.0 去年改的以前用…

我对于 JDK中 BIO/NIO/AIO 的理解

BIO/NIO/AIO名字的具体含义&#xff1a;BIO&#xff1a;Bloking IO &#xff08;同步&#xff0c;阻塞IO&#xff09;NIO&#xff1a;Non-bloking IO &#xff08;同步&#xff0c;非阻塞IO&#xff5b;由于是在nio包下,称为NIO1 jdk1.6&#xff5d;&#xff09;AIO&#xff1a…

在C#中 如何实现Repeater分页

page" Convert.ToString(currentpage 1); } else { hlnextpage.Enabled false; } //转到首页 if (pds.CurrentPageIndex 要 (fldName 0) AS fldName 这样处理&#xff1b;输入参数&#xff1a;tblName: 表名 strGetFields: 需要返回的列 *:返回所以列信息PageSize: 页…

C语言提问

用100钱买100只鸡 %11d是控制输出为一个整形11位的数 答案只有一个 就是买100只 1钱的小鸡其他的根本100钱买不到100只鸡 以此类推 例如i12345则输出2345 %7d是控制输出为一个整形7位的数 %4d是控制输出为一个整形4位的数 ||| 这道题是否有问题

请给我简单介绍一下计算机二级C语言是什么

考试内容一、C语言程序的结构1. 程序的构成 能够编写简单的C程序 具有良好的程序设计风格3. 掌握程序设计中简单的数据结构和算法并能阅读简单的程序4. 在VisualC6.0集成环境下 满分100分上机操作包括&#xff1a;&#xff08;1&#xff09;填空&#xff1b;&#xff08;2&…