线程理论知识

一、什么是线程线程:顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才

大家好,又见面了,我是你们的朋友全栈君。

一、什么是线程

线程:顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程

所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位。

 多线程(即多个控制线程)的概念是,在一个进程中存在多个控制线程,多个控制线程共享该进程的地址空间,相当于一个车间内有多条流水线,都共用一个车间的资源。(一个进程里面开多个线程(共享同一个进程里面的内存空间))

      例如,北京地铁与上海地铁是不同的进程,而北京地铁里的13号线是一个线程,北京地铁所有的线路共享北京地铁所有的资源,比如所有的乘客可以被所有线路拉。

注意:

1.所以进程里面真正干活的是线程(进程里面有线程)

2.进程只是用来把资源互相隔离开,而线程才是真正负责cpu来调动他的

二、线程的创建开销小 

创建进程的开销要远大于线程?

如果我们的软件是一个工厂,该工厂有多条流水线,流水线工作需要电源,电源只有一个即cpu(单核cpu)

一个车间就是一个进程,一个车间至少一条流水线(一个进程至少一个线程)

创建一个进程,就是创建一个车间(申请空间,在该空间内建至少一条流水线)

而建线程,就只是在一个车间内造一条流水线,无需申请空间,所以创建开销小

三、线程与进程的区别

1.创建线程比进程开销小(开一个进程,里面就有空间了,而线程在进程里面,就没必要在开一个空间了)
2.多线程一定是在一个进程里面开启的,共享进程里面的资源
3.线程启动的速度快
4.同一进程下的多个线程共享进程的资源,而多个进程之间内存空间是隔离的
n = 100
def work():
global n
n-=100
如果开进程n是相互独立的,而线程是共享了资源,就不隔离了

在wins下开进程,子进程不会拷贝父进程的
在linux下开进程,子进程会完全拷贝父进程的

5.线程可以跟它所在的进程之内 的线程通信

四、为何要用多线程

多线程指的是,在一个进程中开启多个线程,简单的讲:如果多个任务共用一块地址空间,那么必须在一个进程内开启多个线程。详细的讲分为4点:

  1. 多线程共享一个进程的地址空间

      2. 线程比进程更轻量级,线程比进程更容易创建可撤销,在许多操作系统中,创建一个线程比创建一个进程要快10-100倍,在有大量线程需要动态和快速修改时,这一特性很有用

      3. 若多个线程都是cpu密集型的,那么并不能获得性能上的增强,但是如果存在大量的计算和大量的I/O处理,拥有多个线程允许这些活动彼此重叠运行,从而会加快程序执行的速度。

      4. 在多cpu系统中,为了最大限度的利用多核,可以开启多个线程,比开进程开销要小的多。(这一条并不适用于python)

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124520.html原文链接:https://javaforall.net

(0)
上一篇 2022年3月29日 下午2:00
下一篇 2022年3月29日 下午2:00


相关推荐

  • 安装hiredis

    安装hiredis下载地址 https github com redis hiredis 文件解压之后进入文件夹直接执行 make 然后在执行 makeinstall 即可安装

    2025年8月23日
    6
  • keySet和entrySet

    keySet和entrySetkeySet 是键的集合 Set 里面的类型即 key 的类型 entrySet 是键 值对的集合 Set 里面的类型是 Map Entry 使用 entrySet 则必须将 map 对象转换为 Map Entry keySet 则不需要 KeySet 将 Map 中所有的键存入到 set 集合中 因为 set 具备迭代器 所有可以迭代方式取出所有的键 通过 e get key 方法取值 entrySet S

    2026年3月18日
    2
  • 浅析文本相似度

    浅析文本相似度在自然语言处理 NaturalLangu NLP 中 经常会涉及到如何度量两个文本的相似度问题 在诸如对话系统 Dialogsystem 和信息检索 Informationr 等的问题中 如何度量句子或者短语之间的相似度尤为重要 为方便对知识的梳理 写下这篇博客对部分传统方法 词向量 深度学习方法进行总结 遗漏之处还请大家补充 度量文

    2026年3月26日
    2
  • 如何通过 User-Agent 识别百度蜘蛛

    如何通过 User-Agent 识别百度蜘蛛如果有大量的百度蜘蛛抓取网站就需要注意了:有可能是其他爬虫伪造百度蜘蛛恶意抓取网站。如果遇到这种情况,这时候就需要查看日志来确定是不是真正的百度蜘蛛(baiduspider)。搜索引擎蜘蛛、用户访

    2022年7月3日
    56
  • java 枚举的定义与用法_c语言枚举类型

    java 枚举的定义与用法_c语言枚举类型【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)http://blog.csdn.net/javazejian/article/details/71333103出自【zejian的博客】关联文章:深入理解Java类型信息(Class对象)与反射机制深入理解Java枚举类型(enum)深入理解Java注解类型(@Annotation)深入理解

    2025年8月7日
    7
  • AI Agent全解析:从概念到落地的技术指南

    AI Agent全解析:从概念到落地的技术指南

    2026年3月16日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号