若是学过linux下的进程,线程,信号...会有更加深刻的了解。所以推荐去学习下,包括网络编程都可以去了解,尤其是对select,poll,epoll都会有更多的认识。

进程就是资源管理的最小单位,而线程是程序执行的最小单位。一个程序可以有多个进程,一个进程可以有多个同时执行的线程

1.进程:

操作系统隔离各个进程可以访问的地址空间。如果进程间需要传递信息。那么可以使用进程间通信或者其他方式,像信号,像文件,数据库,剪切板....等。在进程的调度中,进程进行切换所需要的事件是比较多的。为了更好的支持信息共享和减少切换开销。从而从进程中演变出来了线程。

2.线程:

线程是进程的执行单元。对于大多数程序来说可能只有一个主线程,就是该程序进程。在系统中看起来所有的线程都是同时执行的,实际上是去共同抢占资源,当一个线程使用完后,下一个马上使用,减少了时间的空隙。和进程抢占时间片大致相同。但是依旧提高了很多的效率。

实例:下载文件时,可以将文件分成多个部分,然后使用多个线程同时去下载,从而加快下载速度。

3.进程线程的对比:

明确进程和线程的区别十分重要。

一般地,进程是重量级的。在进程中需要处理的问题包括进程间通信,临界区管理,和进程调度等。这些特性使得新生成一个进程的开销比较大。

线程是轻量级的。线程之间共享许多资源,容易进行通信,生成一个线程的开销比较小。但是在使用线程会遇到锁问题,死锁和自锁,还有数据同步,实现复杂等问题。需要谨慎使用。

GIL(全局解释器锁)和队列的使用减少了线程实现的复杂性,但是由于GIL的存在,所以python解释器不是线程安全的。因为使用当前线程必须持有这个全局解释器锁,从而可以安全的访问python数据。

例:需要计算操作时,要用到CPU进行处理数据,当我们调用多线程时,由于GIL的存在,一次只允许一个线程被CPU调度(哪怕我们有多核CPU)<为了保证数据同步>,所以由于GIL限制,无论我们开了多少线程,只能使用一个CPU,而CPU是专门用于计算的,所以对于计算型,使用多线程的效果反而下降了。所以计算密集型使用多进程,IO密集型使用多线程

1)与进程和线程相关的模块

os/sys  包含基本进程管理函数
subprocess  多进程相关模块
signal  信号相关模块
threading  线程相关模块
2)os/sys模块中与进程相关的函数

popen  生成新的进程
system  直接生成字符串所代表的进程
abort/exit  终止进程
exec足  在现有进程环境下生成新进程

进程编程

创建进程:

一:简单使用:

1.system函数

可以使用os模块中system函数创建进程,是最快捷方式,可以去执行命令或者调用其他程序

>>> import os
>>> os.system("dir")
2018/04/21 周六  下午 07:09    <DIR>          .
2018/04/21 周六  下午 07:09    <DIR>          ..
2017/11/18 周六  下午 10:08    <DIR>          .android
0
#执行命令dir,返回0,代表执行成功。否则失败
>>> os.system("calc")    
0
#调用其他程序,计算器。
上面调用system产生的子进程的父进程都是该程序,只有子进程执行完毕,父进程才会获取控制器
os.system使用

相关文章: