线程

  1. 什么是线程

  2. 线程的创建开销小

  3. 线程与进程的区别

  4. 为何要用多线程

  5. 多线程的应用举例

  6. 开启线程的两种方式

  7. 在一个进程下开启多个线程与在一个进程下开启多个子进程的区别

  8. 多线程并发的socket服务器

  9. 线程相关的其他方法

  10. 守护线程

  11. 同步锁
  12. 死锁现象与递归锁

  13. 信号量Semaphore

  14. Event
  15. 定时器

  16. 线程queue

 

一 什么是线程  

在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程

注意:进程是资源分配的最小单位,线程是CPU调度的最小单位.

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

 车间负责把资源整合到一起,是一个资源单位,而一个车间内至少有一个流水线

 流水线的工作需要电源,电源就相当于cpu

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

 

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

 

二 线程的创建开销小

创建一个进程,需要向操作系统申请一块内存空间然后把一些列资源放进去。

创建一个线程,无需向操作系统申请内存空间,直接用进程的资源,所以效率会高很多。

 

三 线程与进程的区别

1.线程共享创建它的进程的地址空间;进程有自己的地址空间。

2.线程可以直接访问其进程的数据段;进程拥有自己父进程数据段的副本。

3.线程可以直接与其进程的其他线程通信;进程必须使用进程间通信来与兄弟进程通信。

4.新线程很容易创建;新进程则需要复制父进程的数据段。

5.线程可以对同一进程的线程进行相当大的控制;进程只能控制子进程。
6.对主线程的更改(取消,优先级更改等)可能会影响进程的其他线程的行为;对父进程的修改不会影响子进程。

 

四 为何要用多线程

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

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

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

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

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

 

五 多线程的应用举例

Python3-线程

开启一个字处理软件进程,该进程肯定需要办不止一件事情,比如监听键盘输入,处理文字,定时自动将文字保存到硬盘,这三个任务操作的都是同一块数据,因而不能用多进程。只能在一个进程里并发地开启三个线程,如果是单线程,那就只能是,键盘输入时,不能处理文字和自动保存,自动保存时又不能输入和处理文字。

 

 

六 开启线程的两种方式

multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性。

 

#方式一
from threading import Thread
import time
def sayhi(name):
    time.sleep(2)
    print('%s say hello' %name)

if __name__ == '__main__':
    t=Thread(target=sayhi,args=('egon',))
    t.start()
    print('主线程')
方式一

相关文章:

  • 2022-12-23
  • 2021-11-23
  • 2021-07-17
  • 2021-12-30
  • 2021-07-31
  • 2021-05-18
  • 2022-12-23
  • 2021-12-05
猜你喜欢
  • 2021-10-10
  • 2021-05-20
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-13
相关资源
相似解决方案