摘要: 互斥锁:并发串行,是对代码的局部做串型。是共享数据修改的那块代码变成串型。 join: join也是并发串行的。但是join是全局的串型。 互斥锁:牺牲效率保证数据的安全。 队列:效率+数据安全,详见队列一文 进程之间内存是独立的,但其他资源是共享的,如可以操作同一个文件。 没有互斥锁的情况下,以下 阅读全文
posted @ 2018-06-16 14:14 beallaliu 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 子进程设置为守护进程后,在主进程代码执行结束(而非进程退出)后,子进程就终止。 如果子进程没有设置为守护进程,那么主进程会等子进行结束才结束主进程。 1. 守护进程的设置必须在start前设置。 2. 守护进程无法再开启子进程。 验证守护进程无法再开启子进程: 输出结果: 报错: 守护进程练习题: 阅读全文
posted @ 2018-06-16 13:51 beallaliu 阅读(448) 评论(0) 推荐(0) 编辑
摘要: 1. 进程之间内存空间是隔离还是共享的? 请看代码的输出结果: from multiprocessing import Process n=100 #在windows系统中应该把全局变量定义在if __name__ == '__main__'之上就可以了 def work(): global n n 阅读全文
posted @ 2018-06-16 13:28 beallaliu 阅读(132) 评论(0) 推荐(0) 编辑
摘要: p.start() # 只是将命令交给操作系统,操作系统什么时候执行,主进程并不关心。主进程执行完p.start()交给操作系统后,就会立马执行下一条语句。 p.join() # 当主进程执行到p.join()时,会就等待p子进程执行完后,再继续下一语句。 不过,注意了,如果有多个子进程,并不是串行 阅读全文
posted @ 2018-06-16 10:47 beallaliu 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 僵尸进程:一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。任何一个子进程(init除外)在exit()之后,并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构,等待父进程处理。这是每个 子进程在结束时都要经过的阶段。如果子进程在e 阅读全文
posted @ 2018-06-16 10:09 beallaliu 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 获取本进程id: os.getpid() 或: 获取父进程id: os.getppid() 阅读全文
posted @ 2018-06-16 09:33 beallaliu 阅读(658) 评论(0) 推荐(0) 编辑
摘要: 当主进程开启子进程后,主进程会与子进程并行执行。当主进程执行后不会立马结束进程,而是会等子进程结束才结束,好去清理僵尸子进程(给子进程收尸)。 进程之间内存是相互隔离的。当创建子进程时,会把父进程的内存空间拷贝一份到子进程,子进程的改变不会影响主进程的内存空间。 但进程之间的IO是共享的,可以同时操 阅读全文
posted @ 2018-06-16 09:20 beallaliu 阅读(291) 评论(0) 推荐(0) 编辑
摘要: 操作系统作用: 1. 封装硬件的复杂接口 2. 管理操作系统上的多个进程 阅读全文
posted @ 2018-06-12 22:27 beallaliu 阅读(196) 评论(0) 推荐(0) 编辑
摘要: #多分支:被监测的代码块抛出的异常有多种可能性,并且我们需要针对每一种异常类型都定制专门的处理逻辑# try:# print(' >1')# # name# print(' >2')# l=[1,2,3]# # l[100]# print(' >3')# d={}# d['name']# print 阅读全文
posted @ 2018-06-11 17:51 beallaliu 阅读(90) 评论(0) 推荐(0) 编辑
摘要: TCP: 1 . 会粘包 粘包情况: 1. 发送端短时间内数据量少 2. 接收端时间后才接 3. 接的字节数 UDP: 不会粘包,一个sendto(data,(ip,port))必须有一个recvfrom(字节) 一条数据就是一段完整的数据包。 接收端如果没有接收完本条数据包,该数据包的其余数据就会 阅读全文
posted @ 2018-06-09 20:51 beallaliu 阅读(79) 评论(0) 推荐(0) 编辑