测试秋招八股文集锦—线程进程协程代码实现(面试频率超高)
一、前言:我又可以啦!
八股文之经典网络篇收获535收藏量,突破了我的文章收藏记录,且粉丝涨到了400,每次更新文章都会熬到凌晨的我,感觉又可以啦!!!!
以前我的帖子大多数以分享生活的小幸福为主,现在发现面经类是大家秋招最需要的,虽然这次写帖子的初衷是牛客周边和月饼(不小心说了大实话hhhhhh,嘘~)
写了3篇之后逐渐进入了状态,文章不仅是给大家看的,也是我秋招+社招迟到的复盘,大家加油吖~
二、什么是进程、线程、协程?
2.1 进程(Process)
定义:就是任务,是计算机系统进行资源分配和调度的基本单位。
例如:打开一个word文件就是启动一个word进程。
特点:独立数据空间,进程间不共享数据、系统调度。
2.2 线程(Thread)
定义:进程内的子任务。
例如:word中可进行编辑、拼写检查和打印等子任务。
特点:执行程序的最小单位,进程内线程间共享资源、系统调度。
2.3 协程
定义:程序员调度,分解一个线程成为多个"微线程"。
特点:通过代码层面控制程序使用协程方式运行,高并发需求,可使用协程。
三、如何用Python实现进程、线程、协程?
3.1 进程代码实现
目的:输出一条语句,同时包含一个进程的id。
#encoding:utf-8 from multiprocessing import Process#引入process模块实现多进程 #输出一条语句,同时包含一个进程的id def foo(i): print("This is Process",i) for i in range(s):#初始化5个进程,每个进程都把def语句打印出来 P = Process(target=foo,args=(i,)) P.start( )#启动进程
进程输出结果
{'This is Process',0} {'This is Process',1} {'This is Process',2} {'This is Process',3} {'This is Process',4}
3.2 线程代码实现
目的:试下多线程,输出一条语句,告诉你是第几个线程。
#encoding:utf-8 import threading def show(i): print('This is Thread',i) for i in range(5): t = threading.Thread(targer = show,args=(i,)) t.start( )#启动线程
线程输出结果
('This is Thread',0) ('This is Thread',1) ('This is Thread',2) ('This is Thread',3) ('This is Thread',4)
3.3 协程代码实现
#encoding:utf-8 import geven def foo(): print("start_foo") gevent.sleep(2) print("end_foo") def bar(): print("start_bar") gevent.sleep(0) print("end_bar") #foo() #bar() #把foo()和bar()两个待测方法添加进去执行 gevent.joinall([ gevent.spawn(foo), gevent.spawn(bar), ])
协程输出结果
start_foo start_bar end_bar#因foo()设置sleep为2,耗时比bar长,因此bar()先执行结束 end_foo
四、写在最后
进程线程面试遇到的可能性还是很大的,我秋招和社招都有遇到过,希望大家多学习一下。对哦,下篇文章大家想看什么呢,测试基础知识、自动化实战、数据库,还是Linux基本命令呢???
大家可以留言哦,下篇文章就写你们想看的文章。
晚安啦~~~