进程线程

Posted neuropathy_ldsly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程线程相关的知识,希望对你有一定的参考价值。

并发:在同一个时间段能同时执行多个程序的能力

进程:程序运行的状态,这个过程叫进程

进程组成:

  程序,数据集,进程控制快。进程控制块是记录进程的外部特征,是系统感知进程的唯一标识

  进程是最小的资源管理单元

线程:

  线程是进程下的最小执行单位。

  线程使用的是进程的资源

  线程一定在进程中,不存在独立的线程

  线程还有主线程,一个进程肯定有个主线程

  主线程可以开辟子线程

进程线程切换原则:

  操作者:操作系统

  原则:

    1.时间片

    2.遇到I/O操作切换(当程序卡在IO等待时,不会占用CPU资源)

    3.优先级切换

 

串行:  依次执行 多个线程 
并行:  同时执行多个任务的执行
并发:  切换任务的执行方式 并发
下图说明:

同步异步:

  发送请求一直在等待结果的返回,收到结果之后才继续执行。这是同步

  发送请求但是并不会一直等待结果返回,程序就继续执行。这是异步

Python中的多线程多进程跟其他语言的区别:

  python在进程上有“一把锁”,同一时间只能有一个线程被执行。

  python没办法在一个进程下实现过个线程并行(不支持多核)

守护进程:

  必须在start前执行

  被守护的子线程会在主进程执行完毕后被直接结束,就算子线程没有执行完依然会被结束。

IO密集型任务:  程序存在大量 IO操作
计算密集型任务:程序存在大量计算操作(非IO操作)
 
总结:
Python的多线程处理 IO密集型任务 有优势  
对于处理 计算密集型的 没有优势,甚至不如不使用
import threading   #导入进程模块
import time
def foo(n):
    print("%s" %n)
    time.sleep(n)

def bar(n):
    print("%s" % n)
    time.sleep(n)
a=time.time()
t1=threading.Thread(target=foo,args=(2,))   #生成子进程对象  调用函数
t1.setDaemon(True)   #设置 T1子进程为守护进程
t1.start()   #执行子进程
t2=threading.Thread(target=bar,args=(5,))
t2.start()

#多线程对象调用

t1.join()
t2.join()   #join阻塞主线程,
print(time.time()-a)

 

 

 

以上是关于进程线程的主要内容,如果未能解决你的问题,请参考以下文章

多线程编程

多个请求是多线程吗

python多线程

[Python3] 043 多线程 简介

python中的多线程和多进程编程

进程和线程和协程之间的关系