百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术流 > 正文

多线程——线程概念(多线程原理和使用场景)

citgpt 2024-09-09 02:17 9 浏览 0 评论

文章目录

  • 前言
  • 线程概念
    • 线程和进程关系
    • 根据学习阶段的不同,对pcb有不同的理解
    • 线程之间的独有与共享
    • 多线程/多进程进行多任务处理的优缺点分析

前言

多线程:非常重要----以后工作中用得非常多
多线程-----线程概念/线程控制/线程安全/线程基本应用

线程概念

线程:线程是进程中的一条执行流

多线程——线程概念(多线程原理和使用场景)

以前我们学习进程的时候,我们说进程就是一个pcb,是程序动态运行的描述,通过pcb可以实现操作系统对程序运行的调度管理。

在最早时候,进程是一个pcb,操作系统通过pcb实现程序的运行调度管理;然而学习多线程,因为线程是进程中的一条执行流,linux下通过pcb实现的,因此linux下的pcb实际上是一个进程,并且这些pcb共用同一个虚拟地址空间,这些pcb更加轻量化,因此linux下的线程也被称为轻量级进程


线程和进程关系

linux下的进程其实是一个线程组,一个进程中可以有多个线程(多个pcb),线程是进程中的一条执行流,类似于进程就是一个工厂,线程就是工厂中干活的人(Linux下干活的就是pcb)

在linux中,pcb就是调度程序运行的描述,一个pcb就可以调度一段程序的运行;

线程是进程中的一条执行流,而这个执行流Linux下就是通过pcb实现的,因此线程是一个pcb;并且这些pcb共享了进程中的大部分资源,因此相较于传统pcb更加轻量化。

进程:是一个程序动态的运行,其实就是一个程序运行的描述-pcb
线程:是进程中的一条执行流,执行一个程序中的某段代码

在linux操作系统内核中,其实没有线程的概念,只有轻量级进程的概念
一个进程中至少会有一个线程

根据学习阶段的不同,对pcb有不同的理解

第一阶段:pcb是进程,用于调度一个程序运行;

第二阶段:pcb是线程,是轻量级进程(就是为了跟印象中的传统进程加以区分),因为线程是运行中程序的一条执行流,linux下通过pcb实现这个执行流,并且共用同一份运行资源

进程是操作系统资源分配的基本单位(操作系统会为一个程序的运行分配所需的所有资源)
线程是cpu调度的基本单位;

线程之间的独有与共享

独有:标识符,寄存器,栈,信号屏蔽字,errno
共享:虚拟地址空间(代码段/数据段),文件描述符表,信号处理方式,用户ID/组ID/工作路径

为什么信号是先注销,再处理?:信号是针对整个进程通知时间进行处理的,但是一个信号只需要被处理一次就够了,然而一个进程有可能会有多个执行流,到底是谁处理这个事件(谁拿到时间片,谁能处理谁处理),有的线程不希望操作被信号被打断,就可以独立屏蔽这个信号----信号屏蔽字独有原因

使用vfork创建一个子进程;父子进程共用同一个虚拟地址空间,但是父进程会阻塞直到子进程exit或者程序替换;
多线程,多个pcb作为独立执行流肯定是要同时运行,如何做到不会调用栈混乱----栈独有的原因

errno:系统调用完毕后重置的一个全局变量

多线程/多进程进行多任务处理的优缺点分析

多线程优点:

  • 线程间的通信更加灵活方便
  • 线程的创建与销毁成本更低
  • 同一个进程中的线程间调度成本更低

多进程的优点:

  • 多进程的健壮性,稳定性更高(异常以及一些系统调用exit直接针对整个进程有效)

共同的优点:提高程序中的处理效率

  • IO密集型程序
  • CPU密集型程序

相关推荐

js中arguments详解

一、简介了解arguments这个对象之前先来认识一下javascript的一些功能:其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数...

firewall-cmd 常用命令

目录firewalldzone说明firewallzone内容说明firewall-cmd常用参数firewall-cmd常用命令常用命令 回到顶部firewalldzone...

epel-release 是什么

EPEL-release(ExtraPackagesforEnterpriseLinux)是一个软件仓库,它为企业级Linux发行版(如CentOS、RHEL等)提供额外的软件包。以下是关于E...

FullGC详解  什么是 JVM 的 GC
FullGC详解 什么是 JVM 的 GC

前言:背景:一、什么是JVM的GC?JVM(JavaVirtualMachine)。JVM是Java程序的虚拟机,是一种实现Java语言的解...

2024-10-26 08:50 citgpt

使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
跨域(CrossOrigin)

1.介绍  1)跨域问题:跨域问题是在网络中,当一个网络的运行脚本(通常时JavaScript)试图访问另一个网络的资源时,如果这两个网络的端口、协议和域名不一致时就会出现跨域问题。    通俗讲...

微服务架构和分布式架构的区别

1、含义不同微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并...

深入理解与应用CSS clip-path 属性
深入理解与应用CSS clip-path 属性

clip-pathclip-path是什么clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐...

2024-10-25 11:51 citgpt

HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
Request.ServerVariables 大全

Request.ServerVariables("Url")返回服务器地址Request.ServerVariables("Path_Info")客户端提供的路...

python操作Kafka

目录一、python操作kafka1.python使用kafka生产者2.python使用kafka消费者3.使用docker中的kafka二、python操作kafka细...

Runtime.getRuntime().exec详解

Runtime.getRuntime().exec详解概述Runtime.getRuntime().exec用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。...

promise.all详解 promise.all是干什么的
promise.all详解 promise.all是干什么的

promise.all详解promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果...

2024-10-24 16:21 citgpt

Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解

取消回复欢迎 发表评论: