多线程的最最简单的基本了解

这篇具有很好参考价值的文章主要介绍了多线程的最最简单的基本了解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言:

在学习完常规的语法后,我们将进入下一步的学习,而多线程则是被大多数人认为的下一步的学习目标,因为在有了基础的语法大框架后我们都有了对编程的一个基本的认知,而多线程则是开始有了一定的深度。

一、线程的基本概念

1.1概念

  • 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”
  • 一切进程至少都有一个执行线程(主线程)
  • 线程在进程内部运行,本质是在进程地址空间内运行(这让同一进程内的线程间的通信的成本大大降低)
  • 透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流

特别的:在Linux系统中,线程是基于轻量化进程而再封装的,这也是在Linux下执行多线程程序要引用 -pthread 的原因

多线程的最最简单的基本了解

 1.2线程优缺点

①、优点

  • 创建一个新线程的代价要比创建一个新进程小得多
  • 与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多
  • 线程占用的资源要比进程少很多
  • 能充分利用多处理器的可并行数量
  • 在等待慢速I/O操作结束的同时,程序可执行其他的计算任务
  • 计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现
  • I/O密集型应用,为了提高性能,将I/O操作重叠。线程可以同时等待不同的I/O操作。

②、缺点

性能损失

  •  一个很少被外部事件阻塞的计算密集型线程往往无法与共它线程共享同一个处理器。如果计算密集型线程的数量比可用的处理器多,那么可能会有较大的性能损失,这里的性能损失指的是增加了额外的。
  • 同步和调度开销,而可用的资源不变。

健壮性降低

  • 编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了。
  • 不该共享的变量而造成不良影响的可能性是很大的,换句话说线程之间是缺乏保护的。

缺乏访问控制

  • 进程是访问控制的基本粒度,在一个线程中调用某些OS函数会对整个进程造成影响。

编程难度提高

  • 编写与调试一个多线程程序比单线程程序困难得多

独立性差

  • 单个线程如果出现除零,野指针问题导致线程崩溃,进程也会随着崩溃。
  • 线程是进程的执行分支,线程出异常,就类似进程出异常,进而触发信号机制,终止进程,进程终止,该进程内的所有线程也就随即退出。
    .

二、进程与线程的理解类比(重点??)

可以将进程比作一个家庭,而线程则为同一进程的家庭成员,每个家庭成员的日常生活(各线程程序)是不同的,但他们有同一个大目标(进程的需求满足)将日子过好,且家庭(进程)内的有些物品(资源)是共享的(如厕所),当然对于各个家庭成员也有自己的私人物品(局部资源),家庭成员的私人物品由于只属于自己所以不会产生使用的冲突,但是有些公共物品就不行了(也比如厕所,不能一起使用),而这些公共资源则是引发了一些列的线程安全的主要原因。

多线程的最最简单的基本了解文章来源地址https://www.toymoban.com/news/detail-448270.html

到了这里,关于多线程的最最简单的基本了解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 简单了解线程和协程(C#)

    1.为什么需要线程和协程: (1)使程序中的任务可以并发执行,让程序同时处理多个任务,提高程序的运行效率和响应速度 (2)线程和协程可以共享同一个进程的资源,避免多个进程之间的资源浪费 (3)可以动态调整程序的并发度,从而提高程序的可伸缩性,以便适应不

    2024年02月11日
    浏览(27)
  • 最最简单的ensp拓扑图

    拓扑图如下 选择两个PC和一个路由器    PC1配置如下:   PC2配置如下: 配置完成后打开路由器对端口G0/0/0进行配置:     再对端口G0/0/1进行配置:   配置完成,打开PC1在命令行中pingPC2:   打开PC2在命令行中pingPC1:  

    2024年02月12日
    浏览(30)
  • aspnetcore最最简单的接口权限认证

    五月一眨眼就过去,就当凑个数吧。 场景: 一个小小的项目,需要一个后台,就展示几个列表,连用户表、角色表等都不需要设计。 之前有写过identityserver4和jwt4的demo (exercisebook/IdentityServer4Serilog at main · liuzhixin405/exercisebook · GitHub exercisebook/授权/授权一/JwtToken at main · liuz

    2024年02月07日
    浏览(23)
  • 引言:ElasticSearch的基本概念

    ElasticSearch是一个基于分布式搜索和分析的开源搜索引擎。它是一个实时、可扩展、高性能的搜索引擎,可以处理大量数据并提供快速、准确的搜索结果。ElasticSearch的核心概念包括索引、类型、文档、映射、查询和聚合等。在本文中,我们将深入探讨ElasticSearch的基本概念、核

    2024年02月19日
    浏览(31)
  • FPGA时序约束(一)基本概念入门及简单语法

    文章目前大部分参考明德扬时序约束,只是一个学习总结,侵权删 原文链接:FPGA时序约束分享04_output delay 约束 时序逻辑电路的基础是触发器FF: 建立时间:Setup Time,缩写是 Tsu,即在时钟上升沿之前数据必须稳定的最短时间 保持时间:Hold Time,缩写是 Th,即在时钟上升沿之

    2024年02月03日
    浏览(29)
  • lua脚本的基本语法,以及Redis中简单使用

    Lua 脚本的基本语法如下: 变量与赋值: 变量名可以是字母、数字和下划线的组合,以字母或下划线开头。Lua 是动态类型语言,无需事先声明变量类型。 控制结构: a) 条件语句: b) 循环语句: 函数定义: 函数可以有参数和返回值。 表(table): 表是 Lua 中的一种数据结构

    2024年02月04日
    浏览(38)
  • 在Windows上安装MySQL数据库(最最最详细,超级简单)

    目录 一.确认Windows是否安装MySQL 二.下载MySQL安装包  三.添加配置文件并安装MySQL 四.登录数据库,修改密码 五.配置环境变量 六.启动MySQL 1.按【Win+R】打开运行 2.输入【services.msc】打开服务  3.在服务列表中查找MySQL,如果有mysql服务则表示Windows已经安装MySQL,如果没有MySQL服务

    2024年02月13日
    浏览(30)
  • vbs运行不了,显示中文乱码怎么办,最最最简单的方法

    修改前: 运行时中文乱码:   运行出错:   那么该怎么办呢,在这里,教大家一个最最最简单的方法: 1.先找到想修改的vbs程序。 2.点击另存为。    3.在“编码”把原来的UTF-8改为ANSL,点击保存。  4.确定替换。  就变成了:  再次点击运行:  就没了乱码和出错! 哦!

    2024年02月04日
    浏览(58)
  • Oracle、MySQL数据库常规命令语法-简易记录(非常规持续更新)

    前言:呈现的是非常基础必备命令以及常规关联语法,因涉及到不同数据库其表达都会有所区别,此篇纯属做个仓库记录更非常规持续更新,专业人士可忽略,且看且珍惜… MySQL: 关系型数据库、重点开源、支持大型规模、标准SQL数据语言、多平台多架构、高可用集群、可定

    2024年01月25日
    浏览(44)
  • Python学习笔记—基本语法

    1、一般代码第一行会有#!/usr/bin/python3 这句注释是告诉操作系统执行该脚本时,调用/usr/bin目录下的Python 解释器。 在windows 下可以不写第一行注释 2、多行注释’’’和”””,用法类似verilog中的/**/ 如 ’’’ 第一行注释 第二行注释 ‘’‘ 3、多行语句表示 一般最好是一行

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包