> For the complete documentation index, see [llms.txt](https://flask-yushu.gitbook.io/yushu/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://flask-yushu.gitbook.io/yushu/5.flask-zhong-de-duo-xian-cheng-yu-xian-cheng-ge-li-ji-shu/5.1-xian-cheng-jin-cheng-yu-duo-xian-cheng.md).

# 5.1 线程进程与多线程

### 1.进程

* 资源是稀缺的，进程是竞争计算机资源的基本单位。
* 一台计算机至少要有一个进程。
* 单核CPU用眼只能执行一个应用程序吗？No，他可以在不同的应用程序直接进行切换。由于切换的时间非常短，短到人类无法感知到，所以造成了一种假象，一个进程可以同时执行多个进程。
* 多核CPU可以真正意义上的同时运行多个进程。
* 切换进程是计算机的一个最重要的功能-进程调度。每个算法有自己不同的操作系统来决定每个应用程序何时挂起，并切换到另一个进程。
* 进程/线程直接的切换，对资源的开销非常大。所以这是设计一个应用程序的关键。
* 操作系统在将一个进程切换到另一个进程的时候，会保存当前进程的状态，这个状态叫上下文。

## 2.线程

* 对于计算机编程来说，线程的重要性要远高于进程，一个进程可以有多个线程。
* 线程产生的原因：现在CPU的运行速度非常快，用进程来管理资源粒度太大了，不能够有效充分的利用CPU的高性能，所以需要一个更小的单元来管理和使用CPU的资源。
* 线程比进程更加灵活小巧轻量，并且切换线程的开销要比进程小很多的，这能让我们在单位之间内处理更多的事情。
* 线程进程分工不同，进程负责分配资源，如内存资源；线程利用CPU执行代码（代码落在计算机最底部，是一条条的指令，由CPU来执行，指令是需要资源才能完成他的功能的）
* 线程不管理和持有资源，但是他可以访问进程的资源来完成功能。

## 3.多线程

* 每段代码执行起来，都会有一个进程，并且会分配一个默认的线程，成为主线程
* 可以通过python内置threading来操作线程

  ```python
    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.主线程不依赖其他线程的执行结果。
