进程和线程

提到进程和线程的概念,就不得不说一下并发;一个服务器同一时间内只能服务于一个客户端,其他客户端都在wait状态,为了解决这种性能低下的问题,并发编程应允而成,并发是网络编程中必须考虑的问题。

实现并发的方式有:多进程、多线IO多路复用

多进程

进程是资源(cpu、内存等)分配的基本单位,他是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为他分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为他分配cpu时间,程序开始真正运行。Linux系统函数fork()可以在父进程中创建一个子进程,当一个进程接到来自客户端新的请求时就可以复制出一个子进程让其来处理,父进程只需负责监控请求的到来,然后创建子进程让其去处理,这样就做到并发处理。

import os
print('当前进程:%s 启动中 ....' % os.getpid())
pid = os.fork()
if pid == 0:
print('子进程:%s,父进程是:%s' % (os.getpid(), os.getppid()))
else:
print('进程:%s 创建了子进程:%s' % (os.getpid(),pid ))
输出结果:
当前进程:27223 启动中 ....
进程:27223 创建了子进程:27224
子进程:27224,父进程是:27223

fork函数会返回两次结果,因为操作系统就会把当前进程的数据复制一遍,然后程序就分两个进程继续运行后面的代码,fork分别在父进和子进程中返回,在子进程返回的值pid永远是0,在父进程返回的是子进程的进程id。

多线程

线程是程序执行时的最小单位,他是进程的一个执行流,是cpu调度和分派的基本单位,一个进程可以有多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。线程有cpu独立调度执行,在多cpu环境下就允许多个线程同时运行多线程也可以实现并发操作,每个请求分配一个线程来处理。

进程和线程的区别

1.进程是资源分配的最小单位,线程是程序执行的最小单位
2.进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
3.线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
4.但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 进程和线程 进程线程的区别1、进程是什么?是具有一定独立功能的程序、它是系统进行资源分配和调度的一个独立单位,重点...
    HeartGo阅读 1,233评论 0 4
  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,162评论 0 23
  • 本系列主要学习Python的基本使用和语法知识,后续可能会围绕着AI学习展开。Python3 (1) Python...
    猿来如痴阅读 1,502评论 0 5
  • 记不得最难忘的一场雨了,她倚在窗前看楼下来往在雨中的车流。总之一直是不钟情于下雨天的。 不是怕凌乱头发,不是怕打湿...
    牵心过洋阅读 429评论 1 0
  • 那一世,大荒之中一处荒山,成就她与他的初见。桃花灼灼,枝叶蓁蓁,妖娆伤眼。记忆可以封存,可心有时也会背叛,忘得了前...
    今天天气真好阅读 400评论 0 0