当前位置:  开发笔记 > 编程语言 > 正文

并行和并发编程

如何解决《并行和并发编程》经验,为你挑选了1个好方法。

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

谢谢,



1> Mike..:

如果您使用的是基于POSIX的系统(Linux,FreeBSD,Mac OS X等),您需要查看 pthreads(链接到教程).Pthreads已存在很长时间,并且是基于POSIX的平台上并发编程的事实标准.

虽然有一个新人,称为Grand Central Dispatch(链接到教程).该技术由Apple(Snow Leopard)开发,旨在解决与pthread和多线程编程相关的一些繁琐问题.具体来说:

    块(匿名函数)被引入C语言(通过扩展,C++和Objective-C).这允许您完全避免使用上下文结构.在一个示例中(大量使用伪代码),您可以使用pthreads编写类似的内容:

    typedef 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("Contrived example %d %d", c->val1, c->val2);
    }
    

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

    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);
            });
    }

注意那是多么简单!没有背景,甚至没有单独的功能.

    GCD允许内核管理线程计数.系统上的每个线程都会占用一些内核资源.在便携式设备上,多余的线程会降低电池寿命.在任何计算机上,多余的线程都会降低性能."多余"是什么意思?在2核机器上产生100个线程.使用pthread时,您必须明确管理线程数,确保您没有超载系统.当然,这很难做到.使用GCD,您只需告诉内核"当您有机会时执行此工作块" - 内核决定何时有足够的可用资源来运行代码 - 您不必担心这一点.

    除了提供强大的基本多线程支持外,GCD还允许您的程序通过块与"源"进行交互.因此,您可以将文件描述符排入队列并告诉GCD"在需要读取新数据时运行此代码块".因此,内核将让您的程序处于空闲状态,直到有足够数量的数据进入,然后自动将您的块排入队列!

而且我只是触及了GCD可以做的事情.这是一项真正令人惊叹的技术,我强烈建议您查看文档.它目前在Mac OS X和FreeBSD上可用,它是开源的 - 所以如果你想让它在Linux上运行,你可以移植它:).

如果你正在为数据并行应用程序寻找原始功能,那么Apple开发了另一项名为OpenCL的优秀技术(也适用于Snow Leopard),它可以让你以非常简单的C形式利用GPU的强大功能(它几乎就是C语言)有一些警告)语言.我没有太多的经验,但从我听到的一切,它都很容易使用,非常强大.OpenCL是一个开放标准,在Mac OS X和Windows上实现.

总而言之:pthreads适用于所有基于POSIX的系统(它很难看,但它是事实上的标准),Mac OS X和FreeBSD的GCD,以及数据并行应用程序的OpenCL,你需要所有的功能得到!

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有