多线程的缺点:
(1)等候使用共享资源时造成程序的运行速度变慢 。这些共享资源主要是独占性的资源 ,如打印机等 。
(2)对线程进行管理要求额外的 CPU开销 。线程的使用会给系统带来上下文切换的额外负担 。当这种负担超过一定程度时,多线程的特点主要表现在其缺点上,比如用独立的线程来更新数组内每个元素 。
(3)线程的死锁 。即较长时间的等待或资源竞争以及死锁等多线程症状 。
多进程和多线程的主要区别?
线程是进程的子集(部分),一个进程可能由多个线程组成 。多进程的数据是分开的、共享复杂,需要用IPC;但同步简单 。多线程共享进程数据,共享简单;但同步复杂 。
什么是多进程?
进程是程序在计算机上的一次执行活动,即正在运行中的应用程序,通常称为进程 。当你运行一个程序,你就启动了一个进程 。每个进程都有自己独立的地址空间(内存空间),每当用户启动一个进程时,操作系统就会为该进程分配一个独立的内存空间,让应用程序在这个独立的内存空间中运行 。
在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多进程,也称多任务 。现代的操作系统几乎都是多任务操作系统,能够同时管理多个进程的运行 。
多任务带来的好处是明显的,比如你可以边听mp3边上网,与此同时甚至可以将下载的文档打印出来,而这些任务之间丝毫不会相互干扰 。
什么是多线程?
线程是一个轻量级的子进程,是最小的处理单元;是一个单独的执行路径 。可以说:线程是进程的子集(部分),一个进程可能由多个线程组成 。
线程是独立的 。如果在一个线程中发生异常,则不会影响其他线程 。它使用共享内存区域 。
多线程是一种执行模型,它允许多个线程存在于进程的上下文中,以便它们独立执行但共享其进程资源 。
多进程和多线程的区别:
文章插图
多进程和多线程的区别
大量的进程/线程出现了新的问题?
- 高内存占用
- 调度的高消耗CPU
(1)用户级线程
用户级线程(User Level Thread,ULT)是在用户(目态)空间实现的,是建立在用户进程内的线程,由对应的应用程序通过存放在用户空间的一组管理线程的过程(即线程库)完成对线程的管理工作 。ULT的特点为:ULT与内核无关,因此,同一进程中的ULT的调度和切换简单而快速;虽然内核不知道用户级线程的存在,但却管理着该线程所属进程的活动,如果该用户级线程调用了系统调用而处于运行态,那么所属进程还是该阻塞时要阻塞,即线程状态与进程状态是独立的;如果内核阻塞了一个进程,则该进程中所有的线程都将被阻塞;内核只将处理器分配给进程,因此每次只有一个进程中的一个线程在一个处理器上运行 。
(2)内核级线程
内核级线程(Kernel Level Thread,KLT)是在核心空间实现的,通过系统调用,由操作系统创建,是依赖于系统内核的线程 。由操作系统内核完成对线程的管理工作 。线程是CPU调度的基本单位,操作系统为每个线程保持一个核心栈 。KLT可以在用户进程中,也可以在系统进程中 。
KLT的特点:同一进程中的KTL切换需要进入核心模式下才能完成;当进程中的一个线程被阻塞时,进程中的另一个线程可以被调度;内核可以调度进程中的多个线程,使其同时在多个CPU上并行运行;内核本身也都可以使用多线程方式编写,从而改善操作系统本身的并行性 。
除了内核级和用户级线程之外,还可以采用将两者混合的实现机制 。即线程的实现分为两个层次:用户层和核心层 。内核必须支持内核级线程的创建、调度和管理,同时也允许应用程序创建、调度和管理用户级线程 。线程的创建、调度、同步通常在用户空间完成,某个应用程序的多个ULT能分配和对应于一个或多个KLT,KLT可同时并行运行于多个CPU,且在阻塞一个ULT时,内核可调度另一个线程执行 。
线程模型
线程模型就是指操作系统内线程的实现策略,一般有一对一、多对一和多对多3种模型 。
(1)一对一模型
将每个ULT映射到一个KLT,它能够保障并发性,但是对能支持的线程总数有一定的限制 。
(2)多对一模型
推荐阅读
- 被隔离没钱交费怎么办?
- 单线程性能秒杀多线程!多路复用IO实现高性能网络服务
- Linux 查看进程的动态信息
- 取代H.265/HEVC!H.266编解码标准发布:视频清晰度不变、数据量减半
- 素食的八大好处!看看科学怎么说
- 久用电脑眼睛干涩 就吃这七种果蔬
- 红茶、绿茶、乌龙茶各用什么茶具泡茶?[红茶]
- 红茶含硒吗?[红茶]
- 老电脑升级加固态硬盘还是内存、CPU、显卡?旧电脑升级硬件建议
- 轻薄、办公、高性能,这四款笔记本满足学生党所有需求