在apple的操作系统平台里,GCD使得多线程编程是那么的优雅自然。
在传统的多线程编程中,首先要写线程处理循环;之后还有事件队列,消息队列;还要在线程循环中分离事件解释消息,分派处理;还要考虑线程间是否要同步;还要写许多有着可能费解的函数名的回调处理程序,注册回调程序,而且代码分散即使同一文件也不容易看出与哪些线程对应或者彼此间的是否有次序或并发的关系,不利于调试;另外还要考虑是否需要使用线程池,线程线使用何种模式等。
在apple平台的objc中,只需要如下:

A* a;
dispatch_async(queue_serial, ^{
// handle a in step 1;
dispatch_async(queue_concurrent, ^{
// handle a in step 2;
dispatch_async(queue_main, ^{
// handle a in step 3;
});
});
});

优雅,至少我是这样以为的。一目了然,整个流程分了三个子流程,分别在不同线程中运行。子流程间可以并发,第二个子流程可以并行,各个子流程在哪个线程中执行(,除了queue_main和queue_backgroup,其余都是工作线程),所写即所想。
传统中多线程编程的影子无踪,只知道我写到这里要用到多程线异步执行我的任务,好就我说一声异步执行。

并不是说多线程编程就只有这么些,只不过在传统中多线程编程中,实现上面的代码,还得费不少功夫的。不假思索写下的伪代码都有下面这么多,还不好理解。

struct Thread
{
void putq(msg);
uint createThread();
}; struct ThreadStep1 : public Thread
{
queue q;
void register(handler);
void run() {
wait(q);
msg = getq(q);
handler = findHandler(msg);
handler(msg);
}
}; struct ThreadStep2 : public Thread
{
static queue q;
static void register(handler);
void run() {
wait(ThreadStep2::q);
msg = getq(ThreadStep2::q);
handler = findHandler(msg);
handler(msg);
}
}; struct ThreadStep2Pool
{
ThreadStep2 threads[n];
void createThreads();
void register(handler);
}; struct ThreadStep3 : public Thread
{
queue q;
void register(handler);
void run() {
wait(q);
msg = getq(q);
handler = findHandler(msg);
handler(msg);
}
}; void handler1(void* ctx)
{
  // handle get_a(ctx) in step 1
  get_p2(ctx)->putq(ctx);
}
void handler2(void* ctx)
{
  // handle get_a(ctx) in step 2
  get_t3(ctx)->putq(ctx);
}
void handler3(void* ctx)
{
  // handle get_a(ctx) in Step 3
}
main()
{
ThreadStep1 t1;
ThreadStep2Pool p2;
ThreadStep3 t3; t1.createThread();
p2.createThreads(); t1.register(handler1);
p2.register(handler2);
t3.register(handler3); A* a = new a;
msg msg(a, t1, p2, t3);
t1.putq(msg); t3.run();
}

apple平台下的objc的GCD,多线程编程就是优雅自然。的更多相关文章

  1. iOS开发——多线程篇——NSOperation(基于GCD多线程编程),下载图片并合成新图片

    一.NSOperation的基本概念1.简介NSOperation的作用配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperatio ...

  2. iOS多线程编程Part 1/3 - NSThread & Run Loop

    前言 多线程的价值无需赘述,对于App性能和用户体验都有着至关重要的意义,在iOS开发中,Apple提供了不同的技术支持多线程编程,除了跨平台的pthread之外,还提供了NSThread.NSOpe ...

  3. python --- 基础多线程编程

    在python中进行多线程编程之前必须了解的问题: 1. 什么是线程? 答:线程是程序中一个单一的顺序控制流程.进程内一个相对独立的.可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程 ...

  4. Object-C关于GCD多线程的使用

    ```objc1 使用Crearte函数创建的并发队列和全局并发队列的主要区别: 1)全局并发队列在整个应用程序中本身是默认存在的并且对应有高优先级.默认优先级.低优先级和后台优先级一共四个并发队列, ...

  5. ios 使用GCD 多线程 教程

    什么是GCD Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法.该方法在Mac OS X 10.6雪豹中首次推出,并随后被引入到了iOS4.0中.GCD ...

  6. ios开发:GCD多线程

    ios有三种多线程编程技术,分别是NSThread,Cocoa NSOperation和GCD,GCD全称Grand Central Dispatch 是Apple开发的一个多核编程的解决方法,在iO ...

  7. iOS多线程编程技术之NSThread、Cocoa NSOperation、GCD

    原文出处: 容芳志的博客 简介iOS有三种多线程编程的技术,分别是:(一)NSThread(二)Cocoa NSOperation(三)GCD(全称:Grand Central Dispatch) 这 ...

  8. [Xcode 实际操作]八、网络与多线程-(22)使用GCD多线程技术异步下载图片

    目录:[Swift]Xcode实际操作 本文将演示如何使用使用GCD多线程技术异步下载图片. Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法 ...

  9. [转]Windows平台下Makefile学习笔记

    Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...

随机推荐

  1. sql查询入门

    SQL语言是一门相对来说简单易学却又功能强大的语言,它能让你快速上手并很快就能写出比较复杂的查询语句.但是对于大多数开发者来说,使用SQL语句查询数据库的时候,如果没有一个抽象的过程和一个合理的步骤, ...

  2. 玩转PubSubClient MQTT库

    1.前言     在ESP8266学习系列中,博主一直使用HTTP协议.HTTP连接属于短连接,而在物联网应用中,广泛应用的却是MQTT协议.所以,本篇我们将学习Arduino平台上的MQTT实现库 ...

  3. 基础安全术语科普(四)——RFID

    RFID —— Radio Frequency Identification (射频识别技术) 概念:RFID属于一种无源技术(Passive Technology) 使用:生活中RFID无处不在.如 ...

  4. gulp 自动化管理工具实现全过程

    1.全局安装gulp npm install gulp -g 2.项目内安装gulp npm install gulp -s 3.项目根目录新建gulpfile.js js内代码: //载入gulp核 ...

  5. nuxt.js部署vue应用到服务端过程

    由于seo的需要,最近将项目移植道nuxt.js下采用ssr渲染 移植完成后,一路顺畅,但是到了要部署到服务器端上时候,还是个头疼的问题,但最终还是顺利完成.现在记录一下部署中的过程. 注:部署时候过 ...

  6. Java基础(三)对象与类

    1.类的概念:类是构造对象的模板或蓝图.由类构造对象的过程称为创建类的实例. 2.封装的概念:封装(有时称为数据隐藏)是与对象有关的一个重要概念.对象中的数据称为实例域,操纵数据的过程称为方法.对于每 ...

  7. 学习笔记48_Memcache跟用户登录模块结合

    public interface ICacheWriter {  void AddCache(string key,object value, DateTime expDate);  void Add ...

  8. Vim 自定义补全利器 Snippet

    Vim Snippet 设置 本人是 vim 用户,可以说能不用 IDE 就不用 IDE. Snippet 是一种支持用户自定义补全的需求,在 vim 中,可以使用 UltiSnips 和 Vim-S ...

  9. 主席树学习笔记(静态区间第k大)

    题目背景 这是个非常经典的主席树入门题——静态区间第K小 数据已经过加强,请使用主席树.同时请注意常数优化 题目描述 如题,给定N个整数构成的序列,将对于指定的闭区间查询其区间内的第K小值. 输入输出 ...

  10. css3 mask遮罩动画(照明灯效果)

    <pre><!DOCTYPE html><html lang="en"><head><meta charset="U ...