Python 进程和线程区别

进程:

进程是程序的一次执行,每个进程都有自己的地址空间、内存、数据栈以及其他辅助记录运行轨迹的数据。

进程的基本状态和状态之间的关系:
状态:运行、阻塞、挂起阻塞、就绪、挂起就绪
状态间转化:

  1. 准备就绪的进程,被CPU调度执行,变成运行态。
  2. 运行中的进程,进行I/o请求或者不能得到所请求的资源,变成阻塞态。
  3. 运行中的进程,进程执行完毕(或者时间片已到),变成阻塞态。
  4. 将阻塞态的进程挂起,变成挂起阻塞态,当导致进程阻塞的I/o操作在用户重启前完成(唤醒),挂起阻塞态变成挂起就绪态。

线程:

是进程中执行运算的最小单位。**是进程中的一个实体。**是被系统独立调度和分派的基本单位。所有的线程运行在同一个进程中,共享运行环境和资源,线程一般是并发的,使得其实现了多任务的并行和数据共享。
在单cpu中,真正的并发是不可能的,每个进程会被安排成每次运行一小会,然后让出cpu ,让其他线程运行。

好处:

  • 易于调整
  • 提高并发性。通过线程可方便有效的实现并发行。进程可以创建多个线程来执行同一程序的不同部分。
  • 开销小。创建线程比进程要快,并且开销很小。

线程与进程的关系

一个线程可以创建和撤销另个线程。同一个进程中多个线程可以并发执行。

相对于进程而言,线程是一个更加接近于执行体的概念。它与同一个进程中的其他线程共享数据。但拥有自己的栈空间,拥有独立的执行序列。

区别
进程和线程的主要差别在于它们不同的操作系统资源管理方式。
1.一个程序至少存在一个进程,一个进程至少存在一个线程。
2.线程划分尺度小于进程,使得多线程程序的并发行较高。
3.进程在执行过程中拥有自己的内存单元。而多线程共享内存,从而极大地提高了程序的运行效率。
4.每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线不能够独立执行,必须依存在应用程序中,由应用应用程序提供多个线程执行控制。
5.操作系统没有把多线程看做独立的应用,来实现进程的调度和管理以及资源分配。

多线程与多进程的区别

1.在UNIX平台上,当多个进程终结之后,该进程需要被其父进程电泳wait方法,否则进程成为僵尸进程。所以必须对于每个Process对象调用join()方法(实际上等同于wait)。对于多线程来说,由于只有一个进程,所以不存在此必要性。
2.多进程之间应该避免共享资源,在多线程中,我们可以比较容易的共享资源,比如全局变量或者传递参数。在多进程情况下,由于每个进程有自己的独立的内存空间,以上方法并不适用。此时我们可以通过共享内存和manager的方法来共享资源,但会提高程序的复杂度,并且因为同步的需要降低了程序的效率。

猜你喜欢

转载自blog.csdn.net/Program_life_1/article/details/84974018