首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并行和并发编程

并行和并发编程
EN

Stack Overflow用户
提问于 2010-01-08 11:59:31
回答 3查看 1.4K关注 0票数 4

我计划增强我对并行和并发编程的了解。有人能帮我找出一些在线学习资源吗?

谢谢,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-08 12:35:41

如果您使用的是基于POSIX的系统(Linux、FreeBSD、Mac等),则需要查看pthreads(教程链接)。Pthread已经存在很长一段时间了,并且是基于POSIX的平台上并发编程的事实标准。

不过,还有一个新来者,称为Grand Central Dispatch(教程链接)。这项技术是由Apple(在Snow Leopard中)开发的,试图解决一些与pthread和多线程编程相关的繁琐问题。具体地说:

  1. Blocks(anonymous函数)被引入C语言(通过扩展,C++和Objective-C)。这使您可以完全避免使用上下文结构。在一个示例中(大量使用伪代码),您可以使用pthread编写如下代码:

类型定义f struct { int val1;int val2;} context;int main(){ int firstval = 5;int secondval = 2;context *c = malloc(sizeof(context));c->val1 = firstval;c->val2 = secondval;create_new_thread(context,myFunct);} void myFunct(context *c){ printf(“人为的示例%d%d”,c->val1,c->val2);}

这涉及到很多工作-我们必须创建上下文,设置值,并确保我们的函数正确处理接收上下文。但GCD并非如此。我们可以改为编写以下代码:

代码语言:javascript
复制
    int main(){
            int firstval = 5;
            int secondval = 2;
            dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
            dispatch_async(queue, ^{
                                    printf("Contrived example %d %d", firstval, secondval);
            });
    }

注意这是多么的简单!没有上下文,甚至没有单独的函数。

  1. GCD让内核管理线程数。系统上的每个线程都会消耗一些内核资源。在便携式电脑上,过多的线程会导致电池寿命缩短。在任何计算机上,过多的线程都会导致性能下降。“过度”是什么意思?在一台双核机器上产生100个线程。在使用pthread时,您必须显式地管理threadcount,以确保您没有使系统过载。当然,这是很难做到的。使用GCD,你只需告诉内核“有机会执行这块工作”--内核决定何时有足够的空闲资源来运行这段代码--你不必担心这一点。
  2. 除了提供强大的基本多线程支持外,GCD还允许你的程序通过块与“源”进行交互。因此,您可以将文件描述符排入队列,并告诉GCD“当有新数据要读取时,运行此代码块”。因此,内核会让您的程序处于空闲状态,直到有足够的数据进入,然后将您的块automatically!

排入队列

而且我只触及了GCD所能做的表面。这真是一项令人惊叹的技术,我强烈建议你去看看docs。它目前可以在Mac和FreeBSD上使用,而且它是开源的-所以如果你想让它在Linux上运行,你可以移植它:)。

如果你正在寻找数据并行应用程序的原始能力,苹果公司开发了另一项名为OpenCL的伟大技术(也是为雪豹开发的),它允许你用一种非常简单的C语言(它几乎完全是C语言,但有一些警告)来利用GPU的能力。我对此没有太多的经验,但从我所听到的一切来看,它很容易使用,而且非常强大。OpenCL是一个open standard,在Mac和Windows上都有实现。

所以,总结一下:用于所有基于POSIX系统的pthread(它很难看,但它是事实上的标准),用于Mac和FreeBSD的GCD,以及用于需要所有功能的数据并行应用程序的OpenCL!

票数 6
EN

Stack Overflow用户

发布于 2010-01-08 12:04:13

看看“实践中的并发性”。一本标准的书

票数 1
EN

Stack Overflow用户

发布于 2010-01-08 12:39:13

Herb Sutter写了许多关于这个主题的好文章。His site可能是一个很好的起点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2025411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档