当前位置: 首页 > 网络应用技术

改进了多少个线程(Python如何多线程)

时间:2023-03-09 13:18:04 网络应用技术

  简介:许多朋友询问与Python相关的有多少线程得到了改进。本文的首席CTO注释将为您提供详细的答案,以供您参考。我希望这对每个人都会有所帮助!让我们一起看看!

  首先,Python的多线程本身非常低效,因为GIL的限制(全球解释器锁:全局说明锁)机制,其作用简单:对于解释器,仅执行一个线程字节字节。

  因此,如果您在传统意义上追求多线多线程的效率,那么您仍然在Python世界中使用多处理...

  在这里,您可以使用多线程和控制公共资源。首先,这件事将导致死锁。如果您不锁定,就没有死锁的隐藏危险,但是会有同步问题。

  另外,如果不同的线程操作不同的文件,则没有同步问题。如果操作相同的文件,我建议使用队列(队列)进行处理。

  通常,只需使用一个线程,因为Python多线程本身不是有效的,并且单程不需要考虑同步。如果您必须提高效率,请使用多个过程,并且还必须考虑过程锁定。

  python线程

  在此过程中有许多优势。它提供了可以改善计算机CPU的利用率的多个编程。由于该过程是如此出色,为什么它是线程?实际上,如果仔细观察,您会发现该过程中仍然存在许多缺陷。

  它主要反映在几个方面:

  该过程一次只能完成一个任务。如果您想同时执行两个或多个任务,则必须启动多个进程才能完成多个任务。

  如果该过程在执行过程中被阻止,例如等待输入,则整个过程将被悬挂。即使该过程中的某些工作不取决于输入数据,也不会执行它。

  每个过程都有自己的独立空间,因此创建多过程,破坏比多线程更耗时,而且还占据了系统资源。

  该过程是资源分配的最小单元。该线程是CPU调度的最小单元。在每个过程中至少一个线程。

  线程和过程之间的区别

  可以总结为以下4分:

  1)地址空间:过程之间每个独立过程的每个过程都有其自己的独立内存空间,这意味着一个过程中的数据在另一个过程中不可见。但是共享了同一过程中线程之间的数据。

  2)通信:由于每个过程都有自己的独立内存空间,因此,过程中的过程需要IPC,并且可以为多个线程共享该过程中的数据,并且可以访问每个线程。

  3)时间表和切换:线程的切换比上下文开关快得多。

  4)在多线程操作系统中,该过程不是可执行的实体。它的主要功能是从操作系统申请存储空间,然后在内存空间中打开线程执行任务。它是真实的执行主体。一个进程可以包含多个线程,一个线程不能包含进程。由于该过程是系统分配的最小单元,因此该线程不能从操作系统中申请其自己的空间,但是可以将多个线程包含在一个线程中。

  相关建议:“ Python视频教程”

  线程的功能:

  在多线程操作系统中,通常在一个过程中包含多个线程中。每个线程是使用CPU的基本单位,该单元是其成本最低费用的实体。该线程具有以下属性。

  1)光实体

  线程中的实体基本上没有系统资源,但是有一些资源可以确保独立操作。

  线程的实体包括程序,数据和TCB。线程是一个动态概念,其动态特性由线程控制块TCB(线程控制块)描述。

  2)独立调度和分销的基本单位。

  在多线程OS中,线程是可以独立运行的基本单元,因此它们也是独立调度和分发的基本单元。由于线程为“光”,因此线程的切换非常快,费用很小(费用很小(在同一过程中)。

  3)共享过程资源。

  可以访问过程,计时器,计时器,信号机制等。由于线程共享内存和文件在同一过程中,因此内核无需在线程之间互相调用。

  4)可执行执行

  在一个过程中的多个线程之间,它可以同时执行,甚至允许所有线程在一个过程中执行;同样,也可以同时执行不同过程中的线程,从而充分利用并施加处理器和外围设备。并行工作的能力。

  线程的实现可以分为两类:

  用户级线程和内核级线程也称为螺纹或轻巧的过程,由内核支持。在多线程操作系统中,每个系统的实现都不相同。用户 - 级线程在某些系统中实现,并且内核 - 级线程在某些系统中实现。

  用户线程和内核线程之间的区别:

  1. OS内核感知了内核支持线程,并且用户级别的线程与OS内核密不可分。

  2.用户级线程的创建,取消和调度不需要OS内核的支持,OS内核是在语言级别(例如Java)进行处理的;内核支持线程的创建,取消和调度需要OS内核来提供支持,并且随着创建,取消和调度的过程通常相同。

  3.用户 - 级别的线程执行系统调用指令将导致其过程中断,当内核支持线程执行系统调用指令时,仅会导致线程中断。

  4.在仅具有用户 - 级线程的系统中,CPU调度仍在运行过程中处理过程中,并且控制用户程序控制线程的旋转操作;在具有内核支持线程的系统中,CPU调度线程用作单元,并且OS线程计划的时间表负责线程的调度。

  5.用户 - 级线程的程序实体是在用户状态下运行的程序,而支持线程的内核实体可以在任何状态下运行程序。

  内核线程的优点和缺点:

  优点:当有多个处理器时,可以同时执行过程的多个线程。

  缺点:内核的时间表。

  用户线程的优点和缺点:

  优势:

  线程的调度不需要直接参与核心,并且控件很简单。

  它可以在不支持线程的操作系统中实现。

  构建和破坏线程和线程开关成本的成本远低于内核线程。

  每个过程都可以自定义自己的调度算法,并且线程管理更加灵活。

  线程的表面空间和堆栈空间可以使用比内核级别的线程更多。

  在同一过程中,只有一个线程同时运行。如果通过系统调用阻止线程,则将悬挂整个过程。此外,这些页面将引起相同的问题。

  缺点:

  资源调度是根据过程执行的。在多个处理器下,同一过程中的线程只能在同一处理器下重复使用。

  多线程的目的 - “最大使用CPU资源”。每个程序都会生成一个过程,并且每个过程必须至少具有一个主线程。对于一个CPU(没有覆盖范围),只有一个线程可以同时执行,因此,如果您想完成多个任务,只能获得时间胶片或线程。它可以在一个线程中执行,然后根据某个策略执行其他线程。简而言之,感觉到有许多线程同时执行。

  Python是口译员中运行的一种语言。找到信息知道Python中有一个全球锁(GIL)。在使用多线程(线程)的情况下,使用多核的优势。使用多局部(Multipress),多核的优势可以真正提高效率。

  单线程,多线程和多进程效率比较测试:GitHub地址

  根据数据,如果多线程的过程是CPU密集型,则多线程的效率不大。相反,这可能是由于线程的频繁切换,这将导致效率降低。建议使用多个过程;如果是io -dense类型;多线程过程可以使用IO在等待其他线程提高效率时阻止空闲时间。因此,我们根据实验比较不同场景的效率

  |CPU密集操作|io -dense操作|网络请求密集操作

  - | - | - | -

  线性操作|69.7353328374 |17.76633326213 |6.78833333651

  多线程操作|75.40299995740 |145.683666670609 |1.939999977755

  多进程操作|13.97433336576 |4.67833328247 |2.38333328565

  唯一的个人观点,欢迎留言~~~

  如果您的代码密集的CPU,则可能会线性执行多个线程的代码。因此,在这种情况下,多个线程是鸡排,效率可能不会像单个线程一样,因为有上下文开关

  但是:如果您的代码是密度的,多线程可以显着提高效率。爬行动物正在等待插座返回数据。这次,C代码中有一个释放GIL。最终结果是当线程在等待IO时,可以继续执行其他线程。

  另一方面:您不应该在Python中编写CPU密集型代码...效率在哪里...

  如果您确实需要在CPU密集型代码中使用并发,请使用多处理库。此库基于多进程来实现多线程的API接口,并且与Pickle部分实现了Partial变量共享。

  添加另一个,如果您不知道您的代码到末端,即CPU密度类型或IO密度类型,请教您一种方法:

  多处理(一个模块)具有一个虚拟子模块,该模块基于多线程API来实现多处理。

  假设您使用的是使用多处理的多处理池来实现相关性

  从多处理导入池

  如果此代码已更改为以下内容,它将变为多线程以实现共识

  从多处理。dummy进口池

  以这两种方式运行,只需使用快速的速度即可。

  更新:

  我刚刚发现并发。Futures包含threadpoolexecutor和ProcessPooleExecutor,这可能更容易

  结论:以上是相关内容答案,回答了主要CTO注释汇编的多少线程。希望它对您有所帮助!如果您解决了问题,请与更多关心此问题的朋友分享?