线程、进程、并行、并发
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."
你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。
你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。
你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。
并发的关键是你有处理多个任务的能力,不一定要同时。并行的关键是你有同时处理多个任务的能力。所以我认为它们最关键的点就是:是否是『同时』。
“并行”概念是“并发”概念的一个子集。也就是说,你可以编写一个拥有多个线程或者进程的并发程序,但如果没有多核处理器来执行这个程序,那么就不能以并行方式来运行代码。
并发和并行都有处理多想任务的能力,但是前者不支持“同时”,后者支持同时!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."
相关文章推荐
- 进程,线程和协程 并行与并发
- 进程、线程、微线程、并发、并行、同步、异步、阻塞、非阻塞
- 线程和进程的区别,并发与并行的区别
- 线程,进程。多进程,多线程。并发,并行的区别
- 线程 线程与进程的区别 并行和并发的区别 线程安全sychronized 等待唤醒机制
- 进程和线程的区别、多进程与多线程、并行与并发、多任务
- Java多线程中的进程,线程,并行,并发
- 并发,并行,进程,线程,同步,异步
- 并行和并发的区别 进程和线程的区别
- 15分钟读懂进程线程、同步异步、阻塞非阻塞、并发并行
- 线程、进程、并行、并发
- Java并发01:进程、线程、并发、并行、多线程、线程安全、死锁、并发优缺点
- Java 多线程编程之一 进程与线程,并发和并行的区别
- 进程,线程,协程,并行与并发区别, 上下文
- [面试]进程与线程的区别联系,并发和并行的区别
- 进程与线程、并发与并行、同步与异步的区别
- 并发和并行的区别,进程和线程的区别,如何创建线程和线程的四种状态,什么是线程计时器
- 进程和线程的区别?同步和异步的区别?并行和并发的区别?
- 进程、线程知识点总结和同步(消费者生产者,读者写者三类问题)、互斥、异步、并发、并行、死锁、活锁的总结
- PHP 线程,进程、并发、并行 的理解