5.1 线程进程与多线程

1.进程

  • 资源是稀缺的,进程是竞争计算机资源的基本单位。

  • 一台计算机至少要有一个进程。

  • 单核CPU用眼只能执行一个应用程序吗?No,他可以在不同的应用程序直接进行切换。由于切换的时间非常短,短到人类无法感知到,所以造成了一种假象,一个进程可以同时执行多个进程。

  • 多核CPU可以真正意义上的同时运行多个进程。

  • 切换进程是计算机的一个最重要的功能-进程调度。每个算法有自己不同的操作系统来决定每个应用程序何时挂起,并切换到另一个进程。

  • 进程/线程直接的切换,对资源的开销非常大。所以这是设计一个应用程序的关键。

  • 操作系统在将一个进程切换到另一个进程的时候,会保存当前进程的状态,这个状态叫上下文。

2.线程

  • 对于计算机编程来说,线程的重要性要远高于进程,一个进程可以有多个线程。

  • 线程产生的原因:现在CPU的运行速度非常快,用进程来管理资源粒度太大了,不能够有效充分的利用CPU的高性能,所以需要一个更小的单元来管理和使用CPU的资源。

  • 线程比进程更加灵活小巧轻量,并且切换线程的开销要比进程小很多的,这能让我们在单位之间内处理更多的事情。

  • 线程进程分工不同,进程负责分配资源,如内存资源;线程利用CPU执行代码(代码落在计算机最底部,是一条条的指令,由CPU来执行,指令是需要资源才能完成他的功能的)

  • 线程不管理和持有资源,但是他可以访问进程的资源来完成功能。

3.多线程

  • 每段代码执行起来,都会有一个进程,并且会分配一个默认的线程,成为主线程

  • 可以通过python内置threading来操作线程

      import threading
      # 获取当前线程
      t = print(threading.current_thread())
      # 获取线程的名字
      print(t.getName())
    
      def worker():
          t = print(threading.current_thread())
          print(t.getName())
    
      # 创建一个新的线程,target是线程要运行的函数,name是线程名
      new_t = threading.Thread(target=worker,name='new_thread')
    
      # 启动一个线程
      newt.start()
  • 多线程编程的好处:更加充分的利用CPU的性能优势。可以将不同的线程运行在不同的核里。

  • 多线程只是看起来是多个线程同时执行,实际上是交替执行,只是交替的实际非常短。

  • 多线程编程是异步编程:1.主线程完全不知道其他线程的存在。2.主线程不依赖其他线程的执行结果。

Last updated