编程语言 – 为什么闭包突然对优化程序在多个内核上运行有用?
我读了一个
article,声称闭合(或“块”)是“多核战争”中的有用武器,因为
现在,我不是在讨论闭包的有用性,也可能是共享内存模型中的并发编程,但是与仅作用于本地数据(或进程,或者actor,或……)的线程的区别是什么? ? 作为没有调度程序的线程的并发编程,它本身不是一个闭包吗? 什么是关闭具有非局部副作用? 解决方法
争论的焦点是,在编程语言中使用闭包可以更容易地在另一个线程中完成一些工作.我认为作者应该在该论证中提到高阶函数的重要性.
我最喜欢的高阶函数的介绍是“Why functional programming matters”,我不会尝试在这里展示一个糟糕的复制品. 因此,如果你要在for循环中执行闭包,那么使用闭包不会免费提供并行性,例如 for (int i = 0; i < numElements; i++) { result[i] = closure(inputs[i],i); } 因为语言无法判断闭包(a,b)是否以某种方式改变了结果或??输入数组中的其他值.但是具有高阶函数(如map)的语言指定传递给map的函数不应查看或更改输入中的其他值,并防止它影响其他结果.因此,类似下面的代码(在函数式语言中很常见)可以为您并行化,而无需创建工作线程池并将闭包交给它们: results = map(closure,inputs,[0..numElements-1]); 在这些语言中,闭包消除了在短片代码中声明新函数的痛苦.这使得使用高阶函数更有趣. 下面的Haskell代码定义了一个函数f,它接受一个数字列表并返回一个列表,其中每个输入i被替换为2i 1.通过保存创建函数来计算2i 1的麻烦这是1行代码而不是2行. f nums = map (i -> 2*i+1) nums 再次,请参阅“Why functional programming matters”以获得有关如何扩展到实际代码库的强有力论据. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |