操作系统(多线程)

1.概述

每个线程是CPU使用的一个基本单元,包括线程ID、程序计数器、寄存器组和堆栈。

传统单线程:

多线程进程:


2.动机

  在某些情况下,单个应用程序可能需要执行多个类似的任务。例如,一个Web服务器接受有关网页、图像、声音等的客户请求。一个繁忙的Web可能有多个用户并发访问它。如果一个Web服务器作为单个线程的传统进程来执行,那么只能一次处理一个请求,这样客户需要等待很长时间。一种解决方法是让服务器作为单个进程运行,以便接受请求。当服务器收到请求时,它会创建一个进程以便处理请求,但是创建进程很耗费时间和资源。如果新进程与原进程执行同样的任务,为什么要承担这些开销呢?通常,使用一个包含多个线程的进程更加有效。如果服务器是多线程的,那么可以创建一个单独的线程,以便监听客户需要。

3.优点

  1. 提高程序的响应速度。在多线程程序中,可以将一个耗时的任务放在一个线程中执行,另一个线程可以执行其他任务,从而提高了程序的响应速度。
  2. 提高系统的资源利用率,在多线程程序中,多个线程可以共享计算机的资源,如CPU、内存、硬盘等,提高了系统的资源利用率。
  3. 线程的创建更加经济,线程创建所需内存和资源比进程的创建要少很多,而且线程间的切换也更加迅速
  4. 对于多核CPU,多线程可以在多核上并行运行。


4.多核编程

大体意思就是不是CPU的核越多越好,一个程序中串行代码,和并行代码,如下:

a=b+1;
c=a*c;//c的处理要等到a计算完成
————————————————————————————————————
a=3;
c=4;//并行算法,两个可以并发执行

代码中如果串行代码较多,代码要等到其需要的过程执行完成,才能进行下一步。即使有再多的核,也需要“排队执行”。

Amdahl定律:

5.多线程模型

有两种不同的方法来支持线程,一种是用户层的用户线程、一种是内核层的内核线程。用户线程位于内核之上,它的管理不需要内核支持,而内核线程由操作系统直接支持与管理。

5.1多对一模型

映射多个用户线程到一个内核线程。线程管理是由用户空间的线程库来完成的,因此效率较高。但是如果一个线程执行阻塞系统调用,那么整个线程将会阻塞。再者因为一个时间只有一个线程可以访问内核,所以多个线程不能在多核系统上并行运行

5.2一对一模型

  映射每个用户线程到一个内核线程,一个线程阻塞时另一个线程可以继续执行,有更好的并发性,也允许多个线程并行地在处理器上运行。唯一缺点是每创建一个用户线程就要创建一个相应的内核线程,由于创建系统线程的开销可能会影响程序性能,所以大多数模型限制了支持线程数量。

5.3多对多模型

实现难度高,需要根据用户和程序来创建线程。

6.线程池

在进程开始时创建一定数量的线程,并加到池中等待工作(若每请求一次创建一次,耗费时间太多)。当服务器收到请求时,它会唤醒池内的一个线程,并将需要的服务传递给它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/539872.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全,硬防迪云

要减少被攻击的频率,游戏开发者可以采取以下措施: 1. 强化安全措施:确保游戏服务器和用户数据的安全性,加密网络传输,防止黑客攻击和数据泄露。 2. 更新和修复漏洞:定期检查游戏代码和服务器,…

《ElementPlus 与 ElementUI 差异集合》el-input 和 el-button 属性 size 有变化

差异 ** element-ui el-input、el-input-number 和 el-button 中,属性size 值是 medium / small / minielement-plus el-input、el-input-number 和 el-button 中,属性size 值是 large / default /small 如果你是自动升级,Vue3 系统会有如…

Redis的内存淘汰策略是怎么样的?

淘汰策略 Redis 的内存淘汰策略用于在内存满了之后,决定哪些 key 要被删除。Redis 支持多种内存淘汰策略,可以通过面置文件中的 maxmemory-policy 参数来指定。 以下是 Redis 支持的内存淘汰策略 noeviction:不会淘汰任何键值对,而是直接返…

全新升级SQLCoder-7B-2:领先的自然语言至SQL转换模型,性能显著提升

前言 随着数据科学和机器学习技术的不断进步,自然语言处理(NLP)已成为连接人类语言和计算机编程之间的重要桥梁。在这个交汇点上,SQLCoder-7B-2模型的最新升级引领了一场革命,特别是在自然语言至SQL生成方面&#xff…

Java代码基础算法练习---2024.3.14

其实这就是从我学校的资源,都比较基础的算法题,先尽量每天都做1-2题,练手感。毕竟离我真正去尝试入职好的公司(我指的就是中大厂,但是任重道远啊),仍有一定的时间,至少要等我升本之后…

unity3d Animal Controller的Animal组件中Speeds,States和modes基础部分理解

Speeds 速度集是修改你可以做的原始动画,增加或减少运动,旋转,或动画速度。它们与 州 所以,当动物在运动状态下,在飞行或游泳时,你可以有不同的速度 如果你的性格动画是 (已到位), 你一定要调整速度 位置 和 旋转 每一种的价值观 速度装置 …否则,它们不会移动或旋转。 每个速…

Day42-企业级网络存储NFS01

Day42-企业级网络存储NFS01 1. 什么是NFS?2. 为什么要用网络共享存储?3. 共享存储的种类4. NFS工作原理5. 环境准备6. NFS软件列表7. 安装8. 配置nfs9. 项目实践作业:10. ()权限 对应参数11. 在生产中配置NFS的重要技巧:12. 项目实…

windows 11访问Debian10上的共享目录

步骤 要在Windows 11上访问Debian 10.0.0的共享目录,可以通过以下步骤来实现: 1. 设置Samba服务:在Debian系统上,需要安装并配置Samba服务,以便能够实现文件夹共享。Samba是一个允许Linux/Unix服务器与Windows操作系…

供电系统分类详解

一、供电系统分类 电力供电系统一般有5种供电模式,常用的有:IT系统,TT系统,TN系统,其中TN系统又可以分为TN-C,TN-S,TN-C-S。 1、TN-C系统(三相四线制) 优点: 该系统中…

python 调用redis创建查询key

部署redis apiVersion: apps/v1 # 描述api版本,默认都用这个 kind: Deployment # 资源类型,可以配置为pod,deployment,service,statefulset等等 metadata: # deployment相关的元数据,用于描述deployment的…

软考高级:政府信息化与电子政务(G2G 、G2E、G2B、B2G、G2C、C2C)概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

【SysBench】Linux 安装 sysbench-1.20

安装目的是为了对 MySQL 8.0.x 、PostgreSQL 进行基准测试。 0、sysbench 简介 sysbench 是一个可编写脚本的多线程基准测试工具,基于 LuaJIT 。 它最常用于数据库基准测试,但也可以 用于创建任意不涉及数据库服务器的复杂工作负载。 sysbench 附带以…