您的位置:首页 > 其它

线程、进程、并行、并发

2017-12-19 00:00 176 查看
【并行和并发】参考https://www.zhihu.com/question/33515481

你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。
你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。
你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。

并发的关键是你有处理多个任务的能力,不一定要同时。并行的关键是你有同时处理多个任务的能力。所以我认为它们最关键的点就是:是否是『同时』。
“并行”概念是“并发”概念的一个子集。也就是说,你可以编写一个拥有多个线程或者进程的并发程序,但如果没有多核处理器来执行这个程序,那么就不能以并行方式来运行代码。

并发和并行都有处理多想任务的能力,但是前者不支持“同时”,后者支持同时!BINGO!噢耶

【线程和进程】参考https://www.cnblogs.com/pdev/p/5267720.html

多进程的简单python例子

1 #func.py
2 def writeln(x,y):
3 aa=x*10+y
4 print(aa)
5 return(aa)
1 #calc.py
2 def calc():
3 x=233
4 for i in xrange(1000000000):
5 x=x+1
6 x=x-1

#main.py
import multiprocessing
import time
import numpy as np
from func import writeln
from calc import calc
import scipy.io as sio

def func1(x):
calc()
c1=0
d1=np.zeros(233,int)
for i in xrange(5):
d1[c1]=writeln(1,i)
c1+=1
#time.sleep(1)
sio.savemat('11.mat',{'dd':d1})

def func2(x):
calc()
c2=0
d2=np.zeros(233,int)
for i in xrange(5):
d2[c2]=writeln(2,i)
c2+=1
#time.sleep(1)
sio.savemat('22.mat',{'dd':d2})

def func3(x):
calc()
c3=0
d3=np.zeros(233,int)
for i in xrange(5):
d3[c3]=writeln(3,i)
c3+=1
#time.sleep(1)
sio.savemat('33.mat',{'dd':d3})

def func4(x):
calc()
c4=0
d4=np.zeros(233,int)
for i in xrange(5):
d4[c4]=writeln(4,i)
c4+=1
#time.sleep(1)
sio.savemat('44.mat',{'dd':d4})

if __name__ == "__main__":
pool = multiprocessing.Pool(processes=4) #4个进程(4个CPU同时进行)
pool.apply_async(func1, (1, ))
pool.apply_async(func2, (2, ))
pool.apply_async(func3, (3, ))
pool.apply_async(func4, (4, ))
pool.close()
pool.join()
print "Sub-process(es) done."
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: