多进程与多线程的区别

多进程与多线程的区别 多线程和多进程模式有什么区别?

python多进程和多线程的区别?

多线程和多进程模式有什么区别?

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程

2) 线程的划分尺度小于进程,使得多线程程序的并发性高。

3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

4) 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

5) 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

协程为什么比线程快?

多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些

一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程;

资源分配给进程,同一进程的所有线程共享该进程的所有资源;

处理机分给线程,即真正在处理机上运行的是线程;

线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。

io多路复用和多线程的区别?

1、多进程模型的优缺点

(1)优点:

1)每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;

2)通过增加CPU,就可以容易扩充性能;

3)可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;

4)每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大。

(2)缺点:

1)逻辑控制复杂,需要和主程序交互;

2)需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算 ;

3)多进程调度开销比较大。

2、多线程模型的优缺点

(1)优点:

1)无需跨进程边界;

2)程序逻辑和控制方式简单;

3)所有线程可以直接共享内存和变量等;

4)线程方式消耗的总资源比进程方式好;

(2)缺点:

1)每个线程与主程序共用地址空间,受限于2GB地址空间;

2)线程之间的同步和加锁控制比较麻烦;

3)一个线程的崩溃可能影响到整个程序的稳定性;

4)到达一定的线程数程度后,即使再增加CPU也无法提高性能,

5)线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU 。

3、I/O多路复用的优缺点

(1)优点:

1)相比于多线程和多进程,I/O多路复用是在单一进程的上下文中的,当有多个并发连接请求时,多线程或者多进程模型需要为每个连接创建一个线程或者进程,而这些进程或者线程中大部分是被阻塞起来的。由于CPU的核数一般都不大,比如4个核要跑1000个线程,那么每个线程的时间槽非常短,而线程切换非常频繁。这样是有问题的。而使用I/O多路复用时,处理多个连接只需要1个线程监控就绪状态,对就绪的每个连接开一个线程处理(由线程池支持)就可以了,这样需要的线程数大大减少,减少了内存开销和上下文切换的CPU开销。

2)整个过程只在调用select、poll、epoll这些调用的时候才会阻塞,收发客户消息是不会阻塞的,整个进程或者线程就被充分利用起来,这就是事件驱动。

(2)缺点:

单线程模型不能有阻塞,一旦发生任何阻塞(包括计算机计算延迟)都会使得这个模型不如多线程。另外,单线程模型不能很好的利用多核cpu。