python_day9 线程
====================什么是线程=======================
在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程
多线程(即多个控制线程)的概念是,在一个进程中存在多个控制线程,多个控制线程共享该进程的地址空间
进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位,
例如,北京地铁与上海地铁是不同的进程,而北京地铁里的13号线是一个线程,北京地铁所有的线路共享北京地铁所有的资源,比如所有的乘客可以被所有线路拉。
===================为什么要多线程===========================
多线程指的是,在一个进程中开启多个线程,简单的讲:如果多个任务公用一块地址空间,那么必须在一个进程内开启多个线程。详细的讲分为4点:
1. 多线程共享一个进程的地址空间
2. 线程比进程更轻量级,线程比进程更容易创建可撤销,在许多操作系统中,创建一个线程比创建一个进程要快10-100倍,在有大量线程需要动态和快速修改时,这一特性很有用
3. 对于计算/cpu密集型应用,多线程并不能提升性能,但对于I/O密集型应用,使用多线程会明显地提升速度(I/O密集型根本用不上多核优势)
4. 在多cpu系统中,为了最大限度的利用多核,可以开启多个线程(比开进程开销要小的多)
===============多线程的应用举例==========================
开启一个字处理软件进程,该进程肯定需要办不止一件事情,比如监听键盘输入,处理文字,定时自动将文字保存到硬盘,这三个任务操作的都是同一块数据,因而不能用多进程。只能在一个进程里并发地开启三个线程,如果是单线程,那就只能是,键盘输入时,不能处理文字和自动保存,自动保存时又不能输入和处理文字。
===================进程与线程的区别=============================
- Threads share the address space of the process that created it; processes have their own address space.
- Threads have direct access to the data segment of its process; processes have their own copy of the data segment of the parent process.
- Threads can directly communicate with other threads of its process; processes must use interprocess communication to communicate with sibling processes.
- New threads are easily created; new processes require duplication of the parent process.
- Threads can exercise considerable control over threads of the same process; processes can only exercise control over child processes.
- Changes to the main thread (cancellation, priority change, etc.) may affect the behavior of the other threads of the process; changes to the parent process does not affect child processes.
线程共享创建它的进程的地址空间;进程有自己的地址空间。
线程直接访问进程的数据段;进程拥有父进程的数据段的自身副本。
线程可以直接与其他线程的过程;过程必须使用进程间通信与兄弟姐妹的过程。
很容易创建新线程;新进程需要重复父进程。
线程可以对相同进程的线程进行相当的控制;进程只能对子进程进行控制。
对主线程的更改(取消、优先级更改等)可能影响进程的其他线程的行为;对父进程的更改不会影响子进程。