码迷,mamicode.com
首页 > 其他好文 > 详细

并发编程

时间:2018-09-06 00:04:35      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:发送   效率   __name__   信号   task   self   ==   running   多核   

进程介绍:

1. 什么是进程
进程指的是一个程序的运行过程,或者说一个正在执行的程序
所以说进程一种虚拟的概念,该虚拟概念起源操作系统
2. 操作系统发展史
多道技术:
1. 空间上的复用: 多个任务复用/共享内存空间
ps:进程之间的内存空间是互相隔离的
2. 时间上的复用: 多个任务复用/共享cpu的时间
cpu在多个任务之间来回切换
1. 一个任务占用cpu时间过长会被操作系统强行剥夺走cpu的执行权限: 只是为了保证一个并发的效果,反而会降低效率
2. 一个任务遇到io操作了会被操作系统强行剥夺走cpu的执行权限: 为了实现并发的效果,这种情况下的并发可以提升效率

大前提:一个cpu同一时刻只能执行一个任务
串行: 一个任务完完整整运行完毕才能执行下一个任务
并发: 多个任务看起来是同时运行的,单核下就能实现并发(并发=切换+保存状态)
并行: 多个任务是真正意义上的同时运行,只有多核才能实行并行


开启进程的两种方式:
开启子进程的方式一:

from multiprocessing import Process
import time

def task(name):
print(‘%s is running‘ %name)
time.sleep(3)
print(‘%s is done‘ %name)

在windows系统上,开启子进程的操作必须放到if __name__ == ‘__main__‘的子代码中
if __name__ == ‘__main__‘:
p=Process(target=task,args=(‘egon‘,)) #Process(target=task,kwargs={‘name‘:‘egon‘})
p.start() # 只是向操作系统发送了一个开启子进程的信号
print(‘主‘)


开启子进程的方式二:
from multiprocessing import Process
import time

class Myprocess(Process):
def __init__(self,name):
super().__init__()
self.name=name

def run(self):
print(‘%s is running‘ %self.name)
time.sleep(3)
print(‘%s is done‘ %self.name)

在windows系统上,开启子进程的操作必须放到if __name__ == ‘__main__‘的子代码中
if __name__ == ‘__main__‘:
p=Myprocess(‘egon‘)
p.start() # 只是向操作系统发送了一个开启子进程的信号
print(‘主‘)



并发编程

标签:发送   效率   __name__   信号   task   self   ==   running   多核   

原文地址:https://www.cnblogs.com/zhangpang/p/9594952.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!