线程的概念和多线程模型

weblog 789 0 0

《操作系统》

什么是线程,为什么要引入线程?

还没引入进程之前,系统中各个程序只能串行执行。所以只能一个进程执行完才能执行另外一个进程。进入了进程的概念之后,多个进程之间可以并行执行,从而实现了用户在计算机上可以便听音乐边聊qq的需求。

然而对于某一个进程而言,比如qq,它可以同时发送文件和视频聊天,但是进程是程序的一次执行,是程序执行流的最小单位,所以此时发送文件和视频聊天就不可能同时进行。

有的进程可能需要“同时”做很多事,而传统的进程只能串行地执行一系列程序。为此,引入了“线程”,来增加并发度。

引入线程后,线程成为了程序执行流的最小单位。可以把线程理解为“轻量级进程”。

线程是一个基本的CPU执行单元,也是程序执行流的最小单位。引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如QQ视频、文字聊天、传文件)

引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)。

引入了线程机制后,有什么变化

线程的属性

线程的实现方式

用户级线程

用户级线程由应用程序通过线程库实现。所有的线程管理工作都由应用程序负责(包括线程切换),用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在。(用户级线程对用户不透明,对操作系统透明)。可以这样理解,“用户级线程”就是“从用户视角看能看到的线程”

内核级线程

内核级线程的管理工作由操作系统内核完成。线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。

可以这样理解,“内核级线程”就是“从操作系统内核视角看能看到的线程”。

在同时支持用户级线程和内核级线程的系统中,可采用二者组合的方式:将n个用户级线程映射到m个内核级线程上( n >= m)

操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位。

例如:左边这个模型中,该进程由两个内核级线程,三个用户级线程,在用户看来,这个进程中有三个线程。但即使该进程在一个4核处理机的计算机上运行,也最多只能被分配到两个核,最多只能有两个用户线程并行执行。

多线程模型

多对一模型

多对一模型:多个用户及线程映射到一个内核级线程。每个用户进程只对应一个内核级线程。

优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高

缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行

一对一模型

一对一模型:一个用户及线程映射到一个内核级线程。每个用户进程有与用户级线程同数量的内核级线程。

优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核处理机上并行执行。

缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。

多对多模型

多对多模型: n用户及线程映射到m个内核级线程(n >= m)。每个用户进程对应m个内核级线程。

克服了多对一模型并发度不高的缺点,又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点。


猜你喜欢
official 935 问题,那么netty就对解决这个问题提供了线解决方案。netty线实际上Netty线就是Reactor一个实现,而Reactor式又是什么呢?Reactor式是基于事件
weblog 1008 根本区别:进是操作系统资源分配基本单位,而线是处理器任务调度执行基本单位。包含关系:一个进内可以有线(默认有一个主线),线是进一部分,必须依赖于进而存在,不能独立存在。资源共享:进之间是不共享资源线之间是共享资源,所以存在资源竞争问题。
java基础 7264 线带来问题:线有时候回其他线共享一些资源,比如内存、数据库等。当线同时读写同一份共享资源时候,可能会发生冲突。这时候,我们就需要引入线“同步”机制,即各位线之间要有顺序使用
java基础 2658 ”。线对象被创建后,其它线调用了该对象start()方法,从而来启动该线。例如,thread.start()。处于就绪状态线,随时可能被CPU调度执行。3.运行状态(Running):线获取C
java基础 2833 为什么用线池:1.创建/销毁线伴随着系统开销,过于频繁创建/销毁线,会很大度上影响处理效率2.线并发数量过,抢占系统资源从而导致阻塞3.对线进行一些简单管理
java基础 1609 Java分为两种线:用户线守护线所谓守护线是指在序运行时候在后台提供一种通用服务线,比如垃圾回收线就是一个很称职守护者,并且这种线并不属于序中不可或缺部分。因此,当所有
java基础 2971 1.什么是线通信线之间通信两个基本问题是互斥同步。线同步是指线之间所具有一种制约关系,一个线执行依赖另一个线消息,当它没有得到另一个线消息时应等待,直到消息到达时才被唤醒
java基础 1298 java线通讯之生产者消费者式生产者消费者式是并发、线中经典设计式,生产者消费者通过分离执行工作解耦,简化了开发式,生产者消费者可以以不同速度生产消费数据。一个生产
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。