美文网首页
06进程和线程

06进程和线程

作者: 雪梦_93d4 | 来源:发表于2020-07-12 18:00 被阅读0次

进程:进程是操作系统资源分配的基本单位。

线程:线程是任务调度和执行的基本单位。

一个应用程序至少一个进程,一个进程至少一个线程。

两者区别:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。

多进程

from multiprocessing import Process

def run_proc(name):

    print('Run child process %s (%s)...'% (name, os.getpid()))

if __name__ =='__main__':

    print('Parent process %s.'% os.getpid())

    p = Process(target=run_proc, args=('test',))

    print('Child process will start.')

    p.start()

    p.join()

    print('Child process end.')

如果要启动大量的子进程,可以用进程池pool的方式批量创建子进程:

from multiprocessing  import pool

if __name__=='__main__':

    print('Parent process %s.'% os.getpid())

    p = Pool(4)

    for i in range(5):

        p.apply_async(long_time_task, arg=(i,))

        print('Waiting for all subprocesses done...')

        p.close()

        p.join()

        print('All subprocesses done.')

对Pool对象调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close(),调用close()之后就不能继续添加新的Process了

子进程

subprocess模块可以让我们非常方便地启动一个子进程,然后控制其输入和输出。

import subprocess

r = subprocess.call(['nslookup','www.python.org'])

如果子进程还需要输入,则可以通过communicate()方法输入:

import subprocess

print('$ nslookup')

p = subprocess.Popen(['nslookup'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

output, err = p.communication(b'set q=mx\npython.org\nexit\n')

print(output.decode('utf-8'))

print('Exit code:', p.returncode)

在输入nslookup后,手动输入:

set q=mx 

python.org

exit

进程间通信方式:Queue, Pipes

多线程

import threading

t = treading.Thread(target=loop, name='LoopThread')

t.start()

t.join()

Python的线程虽然是真正的线程,但解释器执行代码时,有一个GIL锁:Global Interpreter Lock,任何Python线程执行前,必须先获得GIL锁,然后,每执行100条字节码,解释器就自动释放GIL锁,让别的线程有机会执行, GIL全局锁实际上把所有线程的执行代码都给上了锁,所以,多线程在Python中只能交替执行

进程间通信的几种方式:队列,管道,进程池,manager类

线程间通信的几种方式:加锁,队列

计算密集型 vs. IO密集型

计算密集型任务的特点是要进行大量的计算,消耗CPU资源

计算密集型任务由于主要消耗CPU资源,因此,代码运行效率至关重要。Python这样的脚本语言运行效率很低

IO密集型,涉及到网络、磁盘IO的任务都是IO密集型任务,CPU消耗很少,任务的大部分时间都在等待IO操作完成,常见的大部分任务都是IO密集型任务,比如Web应用

相关文章

  • 并发编程

    01 进程和线程 02 并行和并发 03 Java线程 04 栈与栈帧 05 线程上下文切换 06 线程常见方法 ...

  • 06 进程和线程

    在之前的课程中,我们已经学习了进程相关的知识。进程是计算机程序被执行的一个实例(instance),一个进程可能由...

  • 06进程和线程

    进程:进程是操作系统资源分配的基本单位。 线程:线程是任务调度和执行的基本单位。 一个应用程序至少一个进程,一个进...

  • 线程和进程概念

    线程和进程 进程 线程 线程和进程的区别

  • 17_多线程

    =================线程和进程 =============进程 =============线程 ==...

  • OC-底层原理 23:多线程原理

    本文的目的在于了解进程、线程、多线程、线程池等的基本概念及原理 线程 和 进程 线程和进程的定义 线程 线程时进程...

  • iOS 多线程原理

    本文的目的在于了解进程、线程、多线程、线程池等的基本概念及原理 线程 和 进程 线程和进程的定义 线程 线程时进程...

  • 线程

    线程和进程 进程 线程 线程和进程的区别 线程的好处和坏处 创建线程的方式一 线程中常用的方法 代码实例 创建线程...

  • iOS底层原理24:多线程原理

    本文的目的在于了解进程、线程、多线程、线程池等的基本概念及原理 线程和进程 线程和进程的定义 线程 线程是进程的基...

  • 多线程

    线程和进程的概念: 进程:正在运行的应用就是一个进程线程:进程中执行每个任务的是线程 进程和线程的关系: 一个进程...

网友评论

      本文标题:06进程和线程

      本文链接:https://www.haomeiwen.com/subject/urhncktx.html