多线程则扩展了多进程的概念,使得同一个进程可以同时并发处理多个任务。线程(Thread)也被称作轻量级进程(Lightweight Process),线程是进程的执行单元。
多线程能让你像运行一个独立的程序一样运行一段长代码。这有点像调用子进程(subprocess),不过区别是你调用的是一个函数或者一个类,而不是独立的程序。程基本上是一个独立执行流程。单个进程可以由多个线程组成。
简单地说就是作为可能是仅有的支持多线程的解释型语言(perl的多线程是残疾,PHP没有多线程),Python的多线程是有compromise的,在任意时间只有一个Python解释器在解释Python bytecode。
python中的多线程实质上是对上下文的不断切换,可以说是假的多线程。
多线程则扩展了多进程的概念,使得同一个进程可以同时并发处理多个任务。线程(Thread)也被称作轻量级进程(Lightweight Process),线程是进程的执行单元。
线程 进程的最小执行单元。线程是一个进程的实体。一个进程要想执行任务,就必须至少又一个线程,当程序启动时,系统默认开启一条线程,也就是主线程。
线程共享同一应用程序的部分内存空间,它们拥有对数据相同的访问权限。你得协调多个线程对同一数据的访问,一般做法是在访问之前加锁,这会导致一定的性能开销。
所以block1在等待block2在其他线程中执行完毕,然后才执行block3。这里不好理解的应该是为什么打印出来的三个block在同一线程执行,应该是系统做了优化,因为block1的线程在等待状态,所以直接让block2在当前线程执行了。
所以这个block就永远没有机会执行了,所以就会造成死锁。示例2:输出结果:示例2就不会造成死锁,因为dispatch_async会立即返回,所以会先输出3,而异步会创建一个新的线程来执行block块,所以2最后输出。
这样也是不可取的。控制台输出 运行 runLoop 一次,阻塞当前线程以等待处理。
在多线程环境下,每个线程拥有一个栈和一个程序计数器。栈和程序计数器用来保存线程的执行历史和线程的执行状态,是线程私有的资源。其他的资源(比如堆、地址空间、全局变量)是由同一个进程内的多个线程共享。
一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。
一个线程在默认情况下只有一个栈,位置在应用程序的进程地址空间中,而在内核中并没有栈,而是一个叫做线程内核对象的结构体,用来记录该线程的相关参数。
栈是私有的,每个线程都有自己的栈。堆是公有的,同一进程中的不同线程可以通过堆共享数据。
同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。
操作系统在创建进程时,需要为该进程重新分配系统资源,但创建线程的代价则小得多。因此,使用多线程来实现多任务并发执行比使用多进程的效率高。
线程主要用于异步操作。只要有异步的IO,或者是异步的操作,等待都可以用线程。但是python的线程不足够安全。同时它还有GIL的问题。线程的退出也不太容易。所以在python里经常用进程代替线程。
进程在执行过程中拥有独立的内存单元,而多个线程共享内存,可以极大地提高进程程序的运行效率;线程比进程具有更高的性能,由于同一个进程中的线程都有共性,多个线程共享同一个进程的虚拟空间,可以很容易实现通信。
多线程则扩展了多进程的概念,使得同一个进程可以同时并发处理多个任务。线程(Thread)也被称作轻量级进程(Lightweight Process),线程是进程的执行单元。
多线程能让你像运行一个独立的程序一样运行一段长代码。这有点像调用子进程(subprocess),不过区别是你调用的是一个函数或者一个类,而不是独立的程序。程基本上是一个独立执行流程。单个进程可以由多个线程组成。
进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源。
进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。
区别:进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。
进程是程序的一次执行过程。一个程序至少有一个进程,一个进程至少有一个线程.线程的划分尺度小于进程,使得多线程程序的并发性高。
功能不同 进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。
本文暂时没有评论,来添加一个吧(●'◡'●)