- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
有没有一种方法可以使用类似于 Apple 的概念在 Python 中进行并行处理 Grand Central Dispatch ? Grand Central Dispatch 从一开始就看起来像是一种处理并行处理的好方法。
如果 Python 没有基本等效的模块,那么 Grand Central Dispatch 背后可以用 Python 有效实现的基本概念是什么?
我对 Grand Central Dispatch 了解不多,因此提出这个问题:我很想知道 Grand Central Dispatch 是否使用 (1) 在 Python 中尚不可用,和/或 (2) 可以使用的范例用 Python 实现。
最佳答案
这里的主要问题是 GCD 的编译器和操作系统部分。为了运行 GCD,您需要编译器理解 Blocks。你可以创建一些在编程时工作类似的东西,但它根本不会有相同的性能。使用 GCD,您可以创建和排队数千个 block ,但仍然只有 2 或 4 个线程执行该 block 。如果你在没有编译器接受它们的情况下实现 block 的高级功能,我看到的唯一方法是使用线程来“模拟” block 。然后,由于上下文切换和内存使用,在具有 2 到 4 个 CPU 内核的系统中使用数千个线程将是一个惊人的性能困惑。
您不仅需要适当的编译器扩展来支持 GCD,还需要适当的操作系统扩展来管理 block 入队的 GCD 队列。对于使用 GCD 的程序,您需要操作系统以某种方式运行,以控制正在执行的线程数,以及当 CPU 内核可用时激活线程的时间和数量。使用 GCD,线程和队列是独立的。线程只是从队列(轻型数据结构)中获取 block ,但可以从任何队列中获取 block 。所以有多少 block 并不重要,因为它们只是存储在主内存中某处的代码和指针。
您根本无法从 Python 中实现所有这些低级功能。并且仅实现高级“GCD 编程方式”,您将编写出非常慢的程序,甚至可能无法在个人计算机上执行。
首先,例如 Cython 可以支持 GCD,以及您想要使用的操作系统。 Linux 有一个名为 libdispatch 的实现,可用于 Devian。但它只实现了编译器部分,因此程序启动的线程数与系统内核减去一个一样多。所以我认为这仍然不是一个好的选择。有人应该为 GCD 添加 Linux 操作系统支持,也许作为内核模块。
Windows 没什么好说的。我真的不知道。
因此,自然而然的第一步应该是在 Cython 中为 Mac OS 添加和测试对 CGD 的支持。从那里,您可以创建一个在内部使用 de Cython GCD 库的 native Python 库,为普通 Python 程序员提供 block 和队列。
Anoder 选项可能是 CPython 项目接受这个,以及 Python 项目添加 block 和队列作为 python 的 native 功能。那将是惊人的 XD
关于python - Python à la Grand Central Dispatch 中的并行处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7955630/
如果我执行 ls -la,我会得到如下结果 total 16 drwxr-xr-x 4 rockse staff 136 Apr 28 16:55 . drwx------+ 23 rocks
有人可以向我解释为什么 MARS 将伪指令翻译成两条指令:lui 和 ori?是否存在仅翻译一条指令的情况? 最佳答案 这个简单的程序 .data msg: .asciiz
在 MIPS 中,la指令转换为 lui和 ori .然而,MARS Simulator 似乎根本没有这样做。当我转储以下机器代码时: .text la $a0, array la $
这是一个由两部分组成的问题,与在 Angular 中操作数据数组中的元素有关。从 ViewModel 中的数组中删除元素的方法似乎非常普遍: $scope.array.splice(index, 1)
我将不胜感激任何“一步一步”指南,说明如何更改 PHP/HTML 页面上的动态数据库连接/连接字符串/等上的代码,使其“即插即用”工作通过 ftp 将页面和 MySQL 数据库托管在“Azure 网站
我遇到了与此类似的问题 unanswered question 。我正在将代码提交到构建系统以使用其 g++ 二进制文件。但是,构建会移动到具有随机生成名称的临时路径(例如 /temp-build/1
我的问题类似于this question ,它询问如何将属性替换为字符串,例如 Transfer {0} from {1} to {2} on {3} 该问题的答案是 MessageFormat 类,
我正试图在 android 上复制我公司在外部开发的 iphone 应用程序。 我的需求很简单,但是在android下好像很难实现。我有三个数字编辑文本输入。每个都应该只采用十进制数值。所以数字 0-
关闭。 这个问题不符合 Stack Overflow guidelines 。它目前不接受答案。 这个问题似乎与 a specific programming problem, a software
在 PHP 中我可以这样做: print <<
我必须使用 C 重新实现 printf(3),而不使用任何可以为我进行转换的函数。 在我理解了 感谢各位 %a 的工作原理后,我以为我已经完成了:How %a conversion work in p
我想通过索引将元素添加到一个空列表中。例如,我想将 4 添加到列表 a 的第 5 位。 x = 4 a = [] 在 C++ 等其他语言中,我可以创建一个包含 10 个索引的数组,一开始都是空的,然后
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: When running ls -l, why does the filesize on a directo
在模块 warnings ( https://docs.python.org/3.5/library/warnings.html ) 中,可以发出警告,该警告似乎来自堆栈中较早的地方: warning
我是一名强类型语言支持者,但我正在从事一个大型 PHP 项目。 我一直在使用 PhpStorm,我喜欢您可以提供的额外类型提示,以及如下注释: /** @var \Payments $payment
我想知道它们是如何生成的,以及它们是否在我每次打开应用程序时生成或存储(缓存)。 这只是一个 Canvas (以编程方式)还是他们使用 XML?像这样,然后他们以编程方式添加字母:
我知道 .so 文件是一种动态库(许多线程可以共享这样的库,因此内存中不需要有多个副本)。但是 .a 和 .la 有什么区别呢?这些都是静态库吗? 如果动态库比静态库有很大的优势,为什么还有很多静态库
我必须将类似Wufoo的WYSIWYG表单生成器功能添加到Rails Webapp。 有谁知道会有所帮助的良好资源( gem /引擎/插件/示例代码)? 最佳答案 这并不是您所提问题的真正答案,但是很
向您学习 Haskell 提到的 difference lists (在该页面上搜索该术语),其中列表 l不直接表示,而是作为函数 (l++) .这允许更有效的左右连接。串联变成函数组合,最终可以通过
引用文献说la(加载地址)的伪代码被翻译为: Pseudo : la $1, Label lui $1, Label[31:16] ori $1,$1, label[15:0] 但是当我尝试在 M
我是一名优秀的程序员,十分优秀!