jjh*_*son 6 java parallel-processing concurrency multithreading
一直在研究 Java 语言中的隐式和显式并发,经过大量研究后想澄清一些事情。
谢谢
隐式并行性是指编译器在没有程序员“任何”提示的情况下并行执行某些操作的能力。如果您要执行的计算具有某些属性(例如并行作业之间没有数据依赖性),则这是可以实现的。
Java流是(引用Oracle的文档)支持顺序和并行聚合操作的元素序列,并且与集合有根本的不同,因为
1)集合被设计为快速访问和操作集合的元素
2) Stream并不是用来修改的,而是用来在源元素和结果元素之间创建一种管道。结果元素是通过对源应用操作(通常以函数/lambda 样式描述)来创建的。这种计算可以安全地划分为子管道并以并行方式处理。
组成该管道的函数必须具有以下属性: 1)必须是非干扰的(它们不修改流源);2)无状态(它们的结果不应该依赖于流管道执行期间可能改变的任何状态)。看这里
显式并行性(顾名思义)是由程序员实现的,程序员可以根据需要生成尽可能多的(计算元素)。这些元素通常是线程或进程(请参阅此处了解差异) 那些计算元素同时执行,并且取决于程序员协调所有操作以产生正确的结果(例如显式同步线程、交换消息、进行事务操作等)。