多线程

来源:互联网 发布:c 开发 gprs源码 编辑:程序博客网 时间:2024/06/14 14:54

多线程

  • 简介

    提起线程,首先了解的应该是进程,下面对进程和线程进行简要介绍。

    进程:包含程序指令和相关资源的集合。每个进程和其他进程一起参与调度,竞争CPU,内存等系统资源。每次进程切换,都存在进程资源的保存和恢复动作,称为上下文切换。进程引入解决了多用户支持问题。但进程也存在问题,如进程频繁切换引起的额外开销可能会严重影响系统性能。对进程来说,系统资源是独占的,每次切换,这些独立资源都需要切换。

    多线程:分配给同一个进程的资源,用多个任务方法。同一个进程的内部的多个线程,共享同一个进程的所有资源。线程可以实现同一个应用程序的并发,免去进程频繁切换的开销,且并发任务间通信更简单。

    多线程应用:网络应用和嵌入式应用。它们要达到的要求是并发、实时。

  • 线程状态

    就绪态:参与调度,等待被执行。一旦被调度选中,立即开始执行;

    运行态:占用CPU,正在运行中;

    休眠态:暂不参与调度,等待特定时间发生;

    终止态:已经运行完毕,等待回收线程资源。

  • 线程环境

    线程存在于进程中,进程内的所有全局资源对于内部每个线程均是可见的。

    进程内典型全局资源包括:代码区(进程空间内可见的函数代码,对于每个线程来说是可见的);静态存储区(全局变量和静态变量);本地栈空间(存放本地线程的函数调用栈,函数内部的局部变量等);部分寄存器变量。

    一个进程发起之后,首先会生成一个缺省的线程,称为主线程。主线程通过main函数进入线程,由主线程衍生的线程称为从线程,从线程也可以有自己的入口函数。此函数由用户指定,传入的为函数指针,可以包括入口函数的参数。

    线程共性包括创建并启动线程;停止线程;睡眠、等待、分离等;

    多线程目的:最大限度地利用CPU资源,但某一线程的处理不需要占用CPU而只和I/O、OEMBIOS等资源打交道时,让需要占用CPU资源的其它线程有机会获得CPU资源。

  • 线程与进程区别

    1)地址空间和其它资源:进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见;

    2)通信:金慈宁宫间通信IPC,线程间通信可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性;

    3)调度和切换:线程上下文切换比进程上下文切换要快得多;

    4)在多线程OS中,进程不是一个可执行的实体。

    5)进程是资源分配的基本单位,而线程时独立运行和调度的基本单位。

    6)创建线程的花费比创建进程的花费少,同时线程之间的切换开销一般小于进行之间的切换。

    7)由于同一个进程内的线程共享内存和文件,故线程之间互相通信不必调用内核。

    8)线程的独立执行,能够充分利用和发挥处理机与外围设备并行工作的能力。

  • 多线程实现方法(Java中)

    多线程:1)继承Thread类,2)实现Runnable接口

    线程同步:1)用synchronized修饰需要同步的方法;2)用synchronized块包围需要同步的语句;3)使用java.util.concurrent包中的各种同步锁。

  • 多线程同步和互斥实现方法

    1)临界区(Critical Section):某一时刻只能有一个线程访问数据。如果有多个线程试图同时访问临界区,则只能有一个线程进入,其他想访问临界区的线程将被挂起,并一直持续到进入临界区的线程离开。它只能用来同步本进程内的线程,不能用来同步多个进程中的线程。

    2)事件(Event):它通过通知操作的方式来保持线程的同步。它可以实现不同进程中的线程同步操作。

    3)互斥量(Mutex):只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,故任何情况下,次共享资源都不会同时被多个线程所访问。当前占据资源的线程在任务处理完后,应将拥有的互斥对象交出,以便其他线程在获得后得以访问资源。互斥量不仅可以在同一应用进程不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。

    4)信号量(Semaphroes):它与前几种方法不同,信号允许多个线程同时使用共享资源,与操作系统中的PV操作相同。它指出了同时访问共享资源的线程最大数目。允许多个线程在同一时刻访问同一资源,但需要限制在同一时刻访问此资源的最大线程数目。

  • 多线程同步和互斥

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

    线程互斥:指对于共享的进程系统资源,在各个单线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其他要使用该资源的线程必须等待,直到占用资源者释放该资源。线程互斥可以看做是一种特殊的线程同步。

0 0
原创粉丝点击