php多线程和多进程(多线程死锁)

我的理解是,进程指的是系统中运行的应用程序;一旦程序运行,它就是一个进程,或者更确切地说,进程是指程序执行时的一个实例,线程是进程的一个实体。

进程——的最小资源分配单位和线程——的最小程序执行单位。

线程之间的差异体现在几个方面:

0:因为一个进程有独立的栈空间和数据段,每次启动一个新的进程,都必须给它分配一个独立的地址空间,并且要建立无数的数据表来维护它的代码段、栈段和数据段。这对于多个进程来说是非常奢侈的,系统开销也相对较高。与拥有独立堆栈空间但共享数据段的线程不同,它们使用相同的地址空间并共享大多数数据。与流程相比,它比流程更节俭、更便宜、更快、更高效。但是,正是因为进程之间的独立性,使得进程的安全性更高,并且因为进程有独立的地址空间,所以一个进程崩溃后,不会影响到其他处于保护模式的进程,线程只是一个进程中不同的执行路径。一根线死了,整个过程就死了。

1.体现在通信机制上,正是因为进程之间互不干扰,相互独立,所以进程之间的通信机制比较复杂,比如管道、信号、消息队列、共享内存、套接字等通信机制,而线程之间共享数据段,所以通信机制非常方便。

2:属于同一进程的所有线程共享该进程的所有资源,包括文件描述符。而不同的过程是相互独立的。

3.线程也被称为轻量级进程。进程有进程控制块,线程有线程控制块。

4:线程必须只属于一个进程,进程可以有多个线程,至少有一个线程;

5.体现在程序结构上,举一个通俗易懂的例子:我们在使用进程的时候,会不由自主地用if else嵌套来判断pid,这使得程序结构繁琐,但是当我们使用线程的时候,基本上可以摆脱掉。当然,程序的内部执行功能单元在需要的时候还是需要用到的,所以线程对于改善程序结构有很大的帮助。

工艺和螺纹的选择取决于以下几点:

0:需要频繁创建优先销毁线程;因为一个流程创建和销毁一个流程的成本非常高。

1.线程的切换速度快,因此在需要大量计算和频繁切换时,可以通过使用线程,以及使用线程进行耗时的操作来提高应用程序响应。

2.由于CPU系统使用线程的效率更好,可能需要向多机分布式应用进程和多核分布式应用线程发展;

3.在并行操作中,使用线程,如C/S的服务器端并发线程来响应用户的请求;

4.当需要更多的稳定性和安全性时,适合选择流程;当需要速度时,最好选择线程。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注