并发和并行有什么区别?
赞赏的例子.
这可能是一个微不足道的问题,但我如何在python中并行化以下循环?
# setup output lists
output1 = list()
output2 = list()
output3 = list()
for j in range(0, 10):
# calc individual parameter value
parameter = j * offset
# call the calculation
out1, out2, out3 = calc_stuff(parameter = parameter)
# put results into correct output list
output1.append(out1)
output2.append(out2)
output3.append(out3)
Run Code Online (Sandbox Code Playgroud)
我知道如何在Python中启动单线程,但我不知道如何"收集"结果.
多个过程也可以 - 对于这种情况最简单的事情.我正在使用当前的Linux,但代码应该在Windows和Mac上运行.
并行化此代码的最简单方法是什么?
node.js的事件驱动编程模型使得协调程序流有点棘手.
简单的顺序执行变成了嵌套的回调,这很容易(虽然写下来有点复杂).
但并行执行怎么样?假设您有三个可以并行运行的任务A,B,C,当它们完成时,您希望将结果发送到任务D.
使用fork/join模型,这将是
我如何在node.js中编写它?有没有最佳做法或烹饪书?我是否每次都必须手动滚动解决方案,或者是否有一些带帮助程序的库?
javascript parallel-processing concurrency fork-join node.js
Java 5引入了Executor框架形式的线程池对异步任务执行的支持,其核心是java.util.concurrent.ThreadPoolExecutor实现的线程池.Java 7以java.util.concurrent.ForkJoinPool的形式添加了一个备用线程池.
查看各自的API,ForkJoinPool在标准场景中提供了ThreadPoolExecutor功能的超集(虽然严格来说ThreadPoolExecutor提供了比ForkJoinPool更多的调优机会).除此之外,fork/join任务看起来更快(可能是因为工作窃取调度程序)的观察结果显然需要更少的线程(由于非阻塞连接操作),可能会让人觉得ThreadPoolExecutor已被取代ForkJoinPool.
但这真的是对的吗?我读过的所有材料似乎总结为两种类型的线程池之间相当模糊的区别:
这种区别是否正确?我们能说出更具体的内容吗?
java parallel-processing threadpool threadpoolexecutor forkjoinpool
我一直在谷歌做一些研究,并且无法理解java中并发和并行程序之间的差异(如果有的话).我所看到的一些信息表明两者之间没有差异.是这样的吗?
我无法理解这种send方法.我知道它用于操作发电机.但语法在这里:generator.send(value).
我莫名其妙地无法理解为什么值应该成为当前yield表达式的结果.我准备了一个例子:
def gen():
for i in range(10):
X = yield i
if X == 'stop':
break
print("Inside the function " + str(X))
m = gen()
print("1 Outside the function " + str(next(m)) + '\n')
print("2 Outside the function " + str(next(m)) + '\n')
print("3 Outside the function " + str(next(m)) + '\n')
print("4 Outside the function " + str(next(m)) + '\n')
print('\n')
print("Outside the function " + str(m.send(None)) + '\n') # Start generator …Run Code Online (Sandbox Code Playgroud) 注意:我"潜入"了multiprocessing2天前的土地.所以我的理解非常基础.
我正在编写和上传到amazon s3存储桶的应用程序.在情况下,文件的大小较大(100mb),我已经实施并使用平行上传pool从multiprocessing模块.我使用一台机器core i7,我有一个cpu_count的8.我的印象是,如果pool = Pool(process = 6)我使用6核心,文件开始上传部分,前6个部分的上传同时开始.为了看看当process大于时发生了什么cpu_count,我输入了20(意味着我想要使用20个核心).令我惊讶的是,程序开始同时上传20个零件而不是出现错误(我使用较小的部件chunk size以确保有大量零件).我不明白这种行为.我只有8核心,所以他的程序如何接受20的输入?当我说process=6,它实际上使用6个线程?这可能是20作为有效输入的唯一解释,因为可以有1000个线程.有人可以向我解释一下.
编辑:
我从这里借了'代码' .我只是略微改变了它,我要求用户选择核心用途,而不是设置parallel_processes为4
我看到HotSpot JVM中实现了六种线程类型:VMThread,CGCThread,PGCThread,JavaThread,CompilerThread和WatcherThread.但是我不知道哪种线程类型正在做什么.这是我到目前为止所理解的:
其他问题:其他JVM怎么样?
我们需要构建一个可以与运行Android变体的某些嵌入式设备通信的服务器.我们需要能够向设备发送命令,并接收响应.一个简单的命令可能是询问设备的状态.我们不会有HTTP,所以我们需要让客户端/设备与服务器建立连接.
我们正在考虑使用MQTT,因为它具有许多不错的属性(QoS,轻量级,为物联网构建),但它本身不支持请求响应工作流.
我们已经考虑过在MQTT之上构建RPC,但在我们开始之前,我只是想让人们对此问题有所了解.Websockets,WAMP,ZeroMQ会更好吗?
编辑:
Q1: 我们甚至需要RPC吗?
Q2: 有没有一种方法来构建系统,我总是发送异步类型的消息,仍然提供良好的用户体验?
Q3: 任何例子?
寻找实施示例并亲身体验使用单个设备构建物联网通信系统的经验.
concurrency ×3
java ×3
python ×3
android ×1
asynchronous ×1
blocking ×1
fork-join ×1
forkjoinpool ×1
generator ×1
iot ×1
javascript ×1
jvm ×1
low-latency ×1
mqtt ×1
node.js ×1
python-3.x ×1
synchronous ×1
threadpool ×1